From c4ff77819fdfa9a426e74356793d26b86fad6609 Mon Sep 17 00:00:00 2001 From: Tim Csaky <58443522+TimCsaky@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:30:45 -0800 Subject: [PATCH] Initial commit --- .github/ISSUE_TEMPLATE/bug.md | 35 + .github/ISSUE_TEMPLATE/custom.md | 8 + .github/ISSUE_TEMPLATE/decision.md | 8 + .github/ISSUE_TEMPLATE/documentation.md | 26 + .github/ISSUE_TEMPLATE/epic.md | 21 + .github/ISSUE_TEMPLATE/feature.md | 26 + .github/ISSUE_TEMPLATE/question.md | 22 + .github/ISSUE_TEMPLATE/task.md | 20 + .github/ISSUE_TEMPLATE/ux.md | 22 + .github/codeowners | 7 + .github/graphics/analysis.png | Bin 0 -> 18832 bytes .github/graphics/branch-code-results.png | Bin 0 -> 44116 bytes .github/graphics/branch-protection.png | Bin 0 -> 81253 bytes .github/graphics/demo-label.png | Bin 0 -> 10295 bytes .github/graphics/demo-workflow.png | Bin 0 -> 56594 bytes .github/graphics/deploymentUpdate.png | Bin 0 -> 28504 bytes .github/graphics/merge.png | Bin 0 -> 26227 bytes .github/graphics/mergeNotification.png | Bin 0 -> 19252 bytes .github/graphics/packages.png | Bin 0 -> 43354 bytes .github/graphics/pr-cleanup.png | Bin 0 -> 48268 bytes .github/graphics/pr-close.png | Bin 0 -> 24804 bytes .github/graphics/pr-open.png | Bin 0 -> 37619 bytes .github/graphics/pr-validate.png | Bin 0 -> 9305 bytes .github/graphics/scheduled.png | Bin 0 -> 21736 bytes .github/graphics/schemaspy.png | Bin 0 -> 53909 bytes .github/graphics/template.png | Bin 0 -> 39709 bytes .github/pull_request_template.md | 43 + .github/workflows/.deployer-db.yml | 159 + .github/workflows/.deployer.yml | 205 + .github/workflows/.tests.yml | 100 + .github/workflows/analysis.yml | 91 + .github/workflows/demo.yml | 41 + .github/workflows/merge.yml | 88 + .github/workflows/notifications.yml | 72 + .github/workflows/pr-close.yml | 74 + .github/workflows/pr-open.yml | 58 + .github/workflows/pr-validate.yml | 27 + .github/workflows/scheduled.yml | 93 + .gitignore | 367 + CODE_OF_CONDUCT.md | 132 + COMPLIANCE.yaml | 11 + CONTRIBUTING.md | 9 + LICENSE | 201 + README.md | 399 + SECURITY.md | 10 + backend/.dockerignore | 24 + backend/Dockerfile | 37 + backend/nest-cli.json | 8 + backend/package-lock.json | 12614 ++++++++++++++++ backend/package.json | 85 + backend/prisma/schema.prisma | 16 + backend/src/app.controller.spec.ts | 22 + backend/src/app.controller.ts | 12 + backend/src/app.module.ts | 57 + backend/src/app.service.ts | 8 + backend/src/app.spec.ts | 29 + backend/src/app.ts | 38 + backend/src/common/logger.config.spec.ts | 14 + backend/src/common/logger.config.ts | 26 + backend/src/health.controller.ts | 19 + backend/src/main.ts | 11 + backend/src/metrics.controller.ts | 15 + backend/src/middleware/req.res.logger.spec.ts | 43 + backend/src/middleware/req.res.logger.ts | 21 + backend/src/prom.ts | 11 + backend/src/users/dto/create-user.dto.ts | 7 + backend/src/users/dto/update-user.dto.ts | 3 + backend/src/users/dto/user.dto.ts | 21 + backend/src/users/users.controller.spec.ts | 186 + backend/src/users/users.controller.ts | 65 + backend/src/users/users.module.ts | 10 + backend/src/users/users.service.spec.ts | 241 + backend/src/users/users.service.ts | 156 + backend/test/app.e2e-spec.ts | 20 + backend/tsconfig.build.json | 4 + backend/tsconfig.json | 25 + backend/vitest.config.mts | 20 + charts/app/.helmignore | 23 + charts/app/Chart.lock | 6 + charts/app/Chart.yaml | 37 + charts/app/README.md | 5228 +++++++ charts/app/README.md.gotmpl | 12 + charts/app/templates/_helpers.tpl | 58 + .../templates/backend/templates/_helpers.tpl | 42 + .../backend/templates/deployment.yaml | 120 + .../app/templates/backend/templates/hpa.yaml | 55 + .../app/templates/backend/templates/pdb.yaml | 14 + .../templates/backend/templates/service.yaml | 18 + .../templates/frontend/templates/_helpers.tpl | 43 + .../frontend/templates/deployment.yaml | 100 + .../app/templates/frontend/templates/hpa.yaml | 55 + .../templates/frontend/templates/ingress.yaml | 27 + .../app/templates/frontend/templates/pdb.yaml | 14 + .../templates/frontend/templates/service.yaml | 25 + charts/app/templates/knp.yaml | 87 + charts/app/templates/secret.yaml | 80 + charts/app/values.yaml | 163 + charts/crunchy/Chart.yaml | 26 + charts/crunchy/templates/PostgresCluster.yaml | 258 + charts/crunchy/templates/_helpers.tpl | 70 + charts/crunchy/templates/knp.yaml | 17 + charts/crunchy/templates/secret.yaml | 11 + charts/crunchy/values.yaml | 147 + docker-compose.yml | 100 + frontend/.dockerignore | 24 + frontend/.eslintignore | 7 + frontend/.eslintrc.yml | 75 + frontend/.prettierrc.yml | 22 + frontend/.vscode/extensions.json | 3 + frontend/Caddyfile | 48 + frontend/Dockerfile | 23 + frontend/e2e/pages/dashboard.ts | 22 + frontend/e2e/qsos.spec.ts | 9 + frontend/e2e/utils/index.ts | 1 + frontend/index.html | 16 + frontend/package-lock.json | 11123 ++++++++++++++ frontend/package.json | 70 + frontend/playwright.config.ts | 79 + frontend/public/favicon.ico | Bin 0 -> 22486 bytes frontend/src/App.tsx | 45 + frontend/src/__tests__/App.test.tsx | 9 + frontend/src/assets/BCID_H_rgb_pos.png | Bin 0 -> 16262 bytes frontend/src/assets/gov-bc-logo-horiz.png | Bin 0 -> 3603 bytes frontend/src/components/Dashboard.tsx | 129 + frontend/src/components/NotFound.tsx | 37 + .../components/__tests__/NotFound.test.tsx | 20 + frontend/src/index.css | 3 + frontend/src/interfaces/UserDto.ts | 5 + frontend/src/main.tsx | 16 + frontend/src/routes/index.tsx | 12 + frontend/src/service/api-service.ts | 32 + frontend/src/test-setup.ts | 32 + frontend/src/test-utils.tsx | 19 + frontend/src/theme.tsx | 25 + frontend/tsconfig.json | 31 + frontend/tsconfig.node.json | 10 + frontend/vite.config.ts | 57 + frontend/vitest.config.ts | 19 + migrations/.dockerignore | 6 + migrations/Dockerfile | 13 + migrations/sql/V1.0.0__init.sql | 24 + migrations/sql/V1.0.1__alter_user_seq.sql | 1 + renovate.json | 7 + tests/integration/package-lock.json | 153 + tests/integration/package.json | 15 + tests/integration/src/main.js | 94 + .../src/test_suites/it.backend.fastapi.json | 62 + .../src/test_suites/it.backend.fiber.json | 68 + .../src/test_suites/it.backend.nest.json | 62 + .../src/test_suites/it.backend.quarkus.json | 62 + tests/load/README.md | 8 + tests/load/backend-test.js | 34 + tests/load/frontend-test.js | 30 + 153 files changed, 35741 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug.md create mode 100644 .github/ISSUE_TEMPLATE/custom.md create mode 100644 .github/ISSUE_TEMPLATE/decision.md create mode 100644 .github/ISSUE_TEMPLATE/documentation.md create mode 100644 .github/ISSUE_TEMPLATE/epic.md create mode 100644 .github/ISSUE_TEMPLATE/feature.md create mode 100644 .github/ISSUE_TEMPLATE/question.md create mode 100644 .github/ISSUE_TEMPLATE/task.md create mode 100644 .github/ISSUE_TEMPLATE/ux.md create mode 100644 .github/codeowners create mode 100644 .github/graphics/analysis.png create mode 100644 .github/graphics/branch-code-results.png create mode 100644 .github/graphics/branch-protection.png create mode 100644 .github/graphics/demo-label.png create mode 100644 .github/graphics/demo-workflow.png create mode 100644 .github/graphics/deploymentUpdate.png create mode 100644 .github/graphics/merge.png create mode 100644 .github/graphics/mergeNotification.png create mode 100644 .github/graphics/packages.png create mode 100644 .github/graphics/pr-cleanup.png create mode 100644 .github/graphics/pr-close.png create mode 100644 .github/graphics/pr-open.png create mode 100644 .github/graphics/pr-validate.png create mode 100644 .github/graphics/scheduled.png create mode 100644 .github/graphics/schemaspy.png create mode 100644 .github/graphics/template.png create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/.deployer-db.yml create mode 100644 .github/workflows/.deployer.yml create mode 100644 .github/workflows/.tests.yml create mode 100644 .github/workflows/analysis.yml create mode 100644 .github/workflows/demo.yml create mode 100644 .github/workflows/merge.yml create mode 100644 .github/workflows/notifications.yml create mode 100644 .github/workflows/pr-close.yml create mode 100644 .github/workflows/pr-open.yml create mode 100644 .github/workflows/pr-validate.yml create mode 100644 .github/workflows/scheduled.yml create mode 100644 .gitignore create mode 100644 CODE_OF_CONDUCT.md create mode 100644 COMPLIANCE.yaml create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 backend/.dockerignore create mode 100644 backend/Dockerfile create mode 100644 backend/nest-cli.json create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/prisma/schema.prisma create mode 100644 backend/src/app.controller.spec.ts create mode 100644 backend/src/app.controller.ts create mode 100644 backend/src/app.module.ts create mode 100644 backend/src/app.service.ts create mode 100644 backend/src/app.spec.ts create mode 100644 backend/src/app.ts create mode 100644 backend/src/common/logger.config.spec.ts create mode 100644 backend/src/common/logger.config.ts create mode 100644 backend/src/health.controller.ts create mode 100644 backend/src/main.ts create mode 100644 backend/src/metrics.controller.ts create mode 100644 backend/src/middleware/req.res.logger.spec.ts create mode 100644 backend/src/middleware/req.res.logger.ts create mode 100644 backend/src/prom.ts create mode 100644 backend/src/users/dto/create-user.dto.ts create mode 100644 backend/src/users/dto/update-user.dto.ts create mode 100644 backend/src/users/dto/user.dto.ts create mode 100644 backend/src/users/users.controller.spec.ts create mode 100644 backend/src/users/users.controller.ts create mode 100644 backend/src/users/users.module.ts create mode 100644 backend/src/users/users.service.spec.ts create mode 100644 backend/src/users/users.service.ts create mode 100644 backend/test/app.e2e-spec.ts create mode 100644 backend/tsconfig.build.json create mode 100644 backend/tsconfig.json create mode 100644 backend/vitest.config.mts create mode 100644 charts/app/.helmignore create mode 100644 charts/app/Chart.lock create mode 100644 charts/app/Chart.yaml create mode 100644 charts/app/README.md create mode 100644 charts/app/README.md.gotmpl create mode 100644 charts/app/templates/_helpers.tpl create mode 100644 charts/app/templates/backend/templates/_helpers.tpl create mode 100644 charts/app/templates/backend/templates/deployment.yaml create mode 100644 charts/app/templates/backend/templates/hpa.yaml create mode 100644 charts/app/templates/backend/templates/pdb.yaml create mode 100644 charts/app/templates/backend/templates/service.yaml create mode 100644 charts/app/templates/frontend/templates/_helpers.tpl create mode 100644 charts/app/templates/frontend/templates/deployment.yaml create mode 100644 charts/app/templates/frontend/templates/hpa.yaml create mode 100644 charts/app/templates/frontend/templates/ingress.yaml create mode 100644 charts/app/templates/frontend/templates/pdb.yaml create mode 100644 charts/app/templates/frontend/templates/service.yaml create mode 100644 charts/app/templates/knp.yaml create mode 100644 charts/app/templates/secret.yaml create mode 100644 charts/app/values.yaml create mode 100644 charts/crunchy/Chart.yaml create mode 100644 charts/crunchy/templates/PostgresCluster.yaml create mode 100644 charts/crunchy/templates/_helpers.tpl create mode 100644 charts/crunchy/templates/knp.yaml create mode 100644 charts/crunchy/templates/secret.yaml create mode 100644 charts/crunchy/values.yaml create mode 100644 docker-compose.yml create mode 100644 frontend/.dockerignore create mode 100644 frontend/.eslintignore create mode 100644 frontend/.eslintrc.yml create mode 100644 frontend/.prettierrc.yml create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/Caddyfile create mode 100644 frontend/Dockerfile create mode 100644 frontend/e2e/pages/dashboard.ts create mode 100644 frontend/e2e/qsos.spec.ts create mode 100644 frontend/e2e/utils/index.ts create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/playwright.config.ts create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/__tests__/App.test.tsx create mode 100644 frontend/src/assets/BCID_H_rgb_pos.png create mode 100644 frontend/src/assets/gov-bc-logo-horiz.png create mode 100644 frontend/src/components/Dashboard.tsx create mode 100644 frontend/src/components/NotFound.tsx create mode 100644 frontend/src/components/__tests__/NotFound.test.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/interfaces/UserDto.ts create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/routes/index.tsx create mode 100644 frontend/src/service/api-service.ts create mode 100644 frontend/src/test-setup.ts create mode 100644 frontend/src/test-utils.tsx create mode 100644 frontend/src/theme.tsx create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts create mode 100644 frontend/vitest.config.ts create mode 100644 migrations/.dockerignore create mode 100644 migrations/Dockerfile create mode 100644 migrations/sql/V1.0.0__init.sql create mode 100644 migrations/sql/V1.0.1__alter_user_seq.sql create mode 100644 renovate.json create mode 100644 tests/integration/package-lock.json create mode 100644 tests/integration/package.json create mode 100644 tests/integration/src/main.js create mode 100644 tests/integration/src/test_suites/it.backend.fastapi.json create mode 100644 tests/integration/src/test_suites/it.backend.fiber.json create mode 100644 tests/integration/src/test_suites/it.backend.nest.json create mode 100644 tests/integration/src/test_suites/it.backend.quarkus.json create mode 100644 tests/load/README.md create mode 100644 tests/load/backend-test.js create mode 100644 tests/load/frontend-test.js diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 00000000..08be974d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,35 @@ +--- +name: Bug +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the Bug** +A clear and concise description of what the bug is. + +**Expected Behaviour** +A clear and concise description of what you expected to happen. + +**Actual Behaviour** +A clear and concise description of what you expected to happen. + +** Steps To Reproduce** +Steps to reproduce the behaviour: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 00000000..b1069d88 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,8 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here +title: '' +labels: '' +assignees: '' + +--- diff --git a/.github/ISSUE_TEMPLATE/decision.md b/.github/ISSUE_TEMPLATE/decision.md new file mode 100644 index 00000000..83d1a793 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/decision.md @@ -0,0 +1,8 @@ +--- +name: Decision +about: This is a big decision that has been made or raised to PO +title: '' +labels: decision +assignees: '' + +--- diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md new file mode 100644 index 00000000..5186b698 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.md @@ -0,0 +1,26 @@ +--- +name: Documentation +about: Documentation for a specific area or need +title: '' +labels: documentation +assignees: '' + +--- + +**As a** *(User Type/Persona)* **I want** *(Feature/enhancement)* **So That** *(Value, why is this wanted, what is the user trying to accomplish)* + +**Additional Context** +- enter text here +- enter text here + +**Acceptance Criteria** +- [ ] Given (Context), When (action carried out), Then (expected outcome) +- [ ] Given (Context), When (action carried out), Then (expected outcome) + +**Definition of Done** +- [ ] Ready to Demo in Sprint Review +- [ ] Does what I have made have appropriate test coverage? +- [ ] Documentation and/or scientific documentation exists and can be found +- [ ] Peer Reviewed by 2 people on the team +- [ ] Manual testing of all PRs in Dev and Prod +- [ ] Merged diff --git a/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md new file mode 100644 index 00000000..ae28e6f6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.md @@ -0,0 +1,21 @@ +--- +name: Epic +about: A User Story Large enough that it cannot be completed in a single sprint, the + desired end state of a feature +title: '' +labels: epic +assignees: '' + +--- + +**As a** *(User Type/Persona)* **I want** *(Feature/enhancement)* **So That** *(Value, why is this wanted, what is the user trying to accomplish)* + +**Additional Context** + +- enter text here +- enter text here + +**Acceptance Criteria** + +- [ ] Given (Context), When (action carried out), Then (expected outcome) +- [ ] Given (Context), When (action carried out), Then (expected outcome) diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md new file mode 100644 index 00000000..c779fac8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -0,0 +1,26 @@ +--- +name: Feature request / user story +about: Suggest an idea from the perspective of a user +title: '' +labels: enhancement +assignees: '' + +--- + +**As a** *(User Type/Persona)* **I want** *(Feature/enhancement)* **So That** *(Value, why is this wanted, what is the user trying to accomplish)* + +**Additional Context** +- enter text here +- enter text here + +**Acceptance Criteria** +- [ ] Given (Context), When (action carried out), Then (expected outcome) +- [ ] Given (Context), When (action carried out), Then (expected outcome) + +**Definition of Done** +- [ ] Ready to Demo in Sprint Review +- [ ] Does what I have made have appropriate test coverage? +- [ ] Documentation and/or scientific documentation exists and can be found +- [ ] Peer Reviewed by 2 people on the team +- [ ] Manual testing of all PRs in Dev and Prod +- [ ] Merged diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 00000000..43b5c685 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,22 @@ +--- +name: Question +about: Ask us a question! +title: '' +labels: question +assignees: '' + +--- + +**Describe the task** +basic description of the task, is it focuse on research with users or the business area? is it design focused on either co-design or wireframing? is it User Testing or compiling results? + +**Acceptance Criteria** +- [ ] what is required for this task to be complete? +- what is the finishing point or end state of this task? +- [ ] what is the output of this task? + +**SME/User Contact** +(may want to use a persona to fill this in) + +**Additional context** +- any additional details that could not be captured above diff --git a/.github/ISSUE_TEMPLATE/task.md b/.github/ISSUE_TEMPLATE/task.md new file mode 100644 index 00000000..f9b5f1ff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/task.md @@ -0,0 +1,20 @@ +--- +name: Task +about: Work for the team that cannot be written as a user story +title: '' +labels: task +assignees: '' + +--- + +**Describe the task** +A clear and concise description of what the task is. + +**Acceptance Criteria** +- [ ] first +- [ ] second +- [ ] third + +**Additional context** +- Add any other context about the task here. +- Or here diff --git a/.github/ISSUE_TEMPLATE/ux.md b/.github/ISSUE_TEMPLATE/ux.md new file mode 100644 index 00000000..3bb98fcf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ux.md @@ -0,0 +1,22 @@ +--- +name: UX Task +about: This is a Task for UX Research, Design or Testing +title: '' +labels: ux +assignees: '' + +--- + +**Describe the task** +basic description of the task, is it focuse on research with users or the business area? is it design focused on either co-design or wireframing? is it User Testing or compiling results? + +**Acceptance Criteria** +- [ ] what is required for this task to be complete? +- what is the finishing point or end state of this task? +- [ ] what is the output of this task? + +**SME/User Contact** +(may want to use a persona to fill this in) + +**Additional context** +- any additional details that could not be captured above diff --git a/.github/codeowners b/.github/codeowners new file mode 100644 index 00000000..a1536181 --- /dev/null +++ b/.github/codeowners @@ -0,0 +1,7 @@ +# Matched against repo root (asterisk) +# * @mishraomp @DerekRoberts + +# Matched against directories +# /.github/workflows/ @mishraomp @DerekRoberts + +# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners diff --git a/.github/graphics/analysis.png b/.github/graphics/analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..31e825a74e1ec8e9405d6d7b37e3c5ba39a17a21 GIT binary patch literal 18832 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 Y1!u9p-udwY@Q5V_Pgg&ebxsLQ0BmLdkpKVy literal 0 HcmV?d00001 diff --git a/.github/graphics/branch-code-results.png b/.github/graphics/branch-code-results.png new file mode 100644 index 0000000000000000000000000000000000000000..78b515a96459f2ce49a322dde06f4ed927c01bca GIT binary patch literal 44116 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

kXn_i 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 qpKb%uE(@i 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 literal 0 HcmV?d00001 diff --git a/.github/graphics/demo-label.png b/.github/graphics/demo-label.png new file mode 100644 index 0000000000000000000000000000000000000000..3e907be2336a938e0883c0d93d318bb60f0704b0 GIT binary patch literal 10295 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 JE0v*P{|Eiv3IqTE literal 0 HcmV?d00001 diff --git a/.github/graphics/deploymentUpdate.png b/.github/graphics/deploymentUpdate.png new file mode 100644 index 0000000000000000000000000000000000000000..6c475b85b4f07c0aff187e2af9b68a5d1e58442f GIT binary patch literal 28504 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 literal 0 HcmV?d00001 diff --git a/.github/graphics/merge.png b/.github/graphics/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..780a220e0a8f9097fdf93680ea9b732d0c0d4d65 GIT binary patch literal 26227 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 z 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�In??91NN=S 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 YdS9yekm;#e#ob+Q-!#%j0*N~R0t{}NMgRZ+ literal 0 HcmV?d00001 diff --git a/.github/graphics/pr-cleanup.png b/.github/graphics/pr-cleanup.png new file mode 100644 index 0000000000000000000000000000000000000000..0e06ae6dcdcd2aa16e2c6771927cf6bb849ac55d GIT binary patch literal 48268 zcmb??bzGF)+AblWfFjZ$AcAyvBPiV=ozmT%3J6F^4m~I>?a(RGInv$T-E|gwfA9YG zIe(w|35+vOthJtX*L7WYn396zQ*>f<1O$Yq(o*kL5D-vU5D<`_K1Kzf%!hxy0)HMk zi%F|J1}~q-CZXW}L@wf*E~@rsF78H7rU>SC_O_->&c;rrrgqL2_AdL#&BEXyx`%__ zIhh){SlZjYQnR!*MNoCMd&SD}O2*aZ6+0_C`zux+epXg~PTp5a@`(J1vIq#T5TxIW zs(GaC%)0C1tdsvfRD6N-1kvO%ZR?XI1T_ci*(}%nM(s-V-74?N)51!(TJ1ttmuah6 z?+?Y^3u2~W=%Gu7r9t0r?m{J0CCW$Zn)b&FOP$=|LU3nDZ~A#Z2QIVSoLSIwvBwnu z^J|GLt6>`NzdjHPU6MLb`Oo)aj~x|b7jpjVfTawo7TJGJ2N!A+lKu?&-wTR`ddEIu z3I4AW&Z(a0qyN_ld(tl&aR2LsnK&vBy8jwe4UP2wGk{+Vj)CdK0s;cK=x=E6dg-4~ zwCS0l!X|?TE!r#?YZyK_xH`9XccXZtq2W4V;s4LI9ibelEt%tS>FLs5+Sv9 zskZ903A_^mnMyKQauh+Vsd5`nz51w!{Z%rwi#zH+W1*m+vU3b|!{MDa-1oOp{|vKD zNbb8*=AeZG-TGH;Tg9Gs6Lj>urWU1`g&c{jgx_F&X4-7nW1!G;X#DEBLGn(K+|Y3E z9Yg#->)@Avl)=%W`ylyzjyHpV`bNLZQ)(fvxkoFkcb~k!|qvA0GEDx60q&QmzkL0GHvvcR=*);X)3?9R>9n z*;l0AnRP@itFn!C^4fT(Lj?k+|NF>6yJd>+-y?i{IFpHpZjO$z9)3*BOjwT&2ZMsX z%ys|xzeZmxFn09Id3^5?TF46mlGdqFhGM;Tg4+}1^m@1T@`2gI^U^<4TnzSf20T1G zs8~c|9v;XuGqc_B-u0bHj+>)i_)7t=6NQ&w|55N9gQ`D|$QDMh}Pt51K^$6i9G56~-iKjmlGAg81Q@T}i|JF#W4x|aS zHZ^*8cXz*T5JlFmwCXQO_m53ZzATMiv{R!0kkr3culJPVJzWF}iaV#jI~LZEO6lAn z`#(z&>MgD{7ijO@+pF(;tz42u(woRk%}rg`=2Gvrw=k50%kRFaP}+2Rv6@GI$Gz{g z+JjA~8OWefa&T2xsvYPnQ#VKNeR`PH|2(l?jByAgVl;GN5@Bw&d$prP(Nyl z#h1%aFZA@RC<6#11vhtMLNA2F>cnDa#LDmPP%?^Cq@%aA;VUGMK*0U3J7RN~Eg3yo z*qM6t=ZEzK2=!4P48FL!+g_4hpTx0FqVIKyCnokeEIiVd6`*1eIlbi((fdi&Y>)G#azYfSi9M}xR{tvgBIDMtzQ~=EMK5K+o>j--e5Dn z@a=wq-v>Rn7a{v^M?+HW+b8RP-}6$itaRk}s%tshAb5)fJ~8bPU}1qG1tPk;^GvyK z1V|Jj8eaa&@!>zkQFt$rNJri%iWN{@%~L#GWjb5uy5Yi~K`4~sxZDA=T$cC+gKhjR zr<70OMEsq}gTQ(erff4&hS)gwcG_+CVqP*XEHaFOn*R%bOUnrfFG7IT=+EOV>r$gU zbq?PtPG*CqzOGKm!TiI@8+69Yr^K8|y$}}13x`LkJoZSLmayEhI&PbZ=K;3UceKOh zPyTm8hnY3Yut@8doIyNRCNSos3pVzlVS7H7KvDR(fq#F^;j-u6C4tA)=6a|IPG@;m zr)IMq69Ka>t*WpY>rpk-1g^! zH?gdb1nTr7RHUoP*(L5v4{i*WCUj>9?nE5zr%0I{gBNj_no56Oj!o<_4#0#GUe9D6KX1|AYtF@p<-{I zInQm|*Obu^zS5l{MwQaj!e+10qk9f>xMpIhW@4qbWUB8#h7iWvtx<-=RgT0}hVe7^ z5v`#-J^44hyg^2-k_$^a5n=^(iO@0X=B_TBv1SZ(^ob^40lhl69JBtEnz}k8bMsDe zf2qR%IAXEKhX=L0vmLTW-JRqQKXZuRY~Wm zX+DE16f<*^XB~D>iJHabaG5Pu;>YA#7jxjD2loq)>&T_B8OYjKOx}AP#V86YTt6e7 zs5i%gi<~pgGwCYXkRBZ!*(6rm%wfKb%awnEfz@imEemn{udSeT1^*1GepfhFe7P4w zo_sMR%e`%EY>eRGG=%sqJ^g6_q?!joR8;idh=~aa*%~1+@yGf=dh6`$?i9Xww*Vp= z+aMJ+)$_Sb3X1QpVf=XQIq~rVx;p=R2Z}u*_lD_4&~Sp{u-%kF>9F$i9ekjSQT z+j?f3$_o433su=qe<>{`@7EDj*=o|M)~pL7AeO(WU4}+JrT@o!f+XfvVR32Awy7!8 zb>wy%6Y9Na%B)u>CH998f&RnKh-QD&Z4XFk!x?^9*t$&>#M#mGY@FlHbrS3Ax4%l% z{(`|m-fqXuSi&{aqu64)agbDJ$>UNo&A{RDFD*5CUm`s|(|;&L&Qzmk(<6ZrEW|~N zyoEyT^-4CjWt;s1lkQgYswmYTTI0BAA=Q>lzsNIQ+%+y<|F4rh>!c;%S$+IV!O+ z$t^$edW&$zXMavRrjKG^EK9v_6PYszo!*R5x6LPx7<+CV{lc^T>Gm(yk@R;z8P7}6@qBwubm^?? zbR3;;QL#w750@qR{7w#Rd+$YY3Dx3+ebLIiM$unKC8w)qY^STDNINBh7cUoPq_lBa)cQ0grP3PWkF=t%!W*biRh8h>x zBfWI3!zcT7KiAIfY$e(v77zD76)d^2sm|ue{ncBgpO)*}r|Xeiw?|pHJtnK~4PU>0 zR^~AG@+Znj=6yhmT>24(c4T77tT&tancR?ys^v@t(X980+2Re~eg3oiGk#TC+=}gk zq(?06LKM6eWR=^GV1{!xzkdC47~vc8|IMmhZ3|zE+%CXY!w?V{okzv%Nl};)c!4u; z)KYJc^c;Wg+f+--&4u0}j*GrK%S^M3H|l+*pDg6&>!9X=f%<-vnh0ZBe=4_9v!7;I zi)^r%(Xo(7nLieN4thY(heAhTx|n(V+mq-X$aTo`B_oIFKnRHYhT{XV_589Jy|K04 z9)BCX-G4bdU099Def;=i-z_2NIaV3Eu<*&oB%~Lj;^5|JwEU%V4Bv5eW@cmB{uRF@ z>67&VBlA*fX6~<)*kI(3vt=QBNpfb-$Yvyu@tKm(cWu~*h8|<0|IoXZELWY3NzCZ! zF_rD=>G}Bg+oEn=yx6RlQIYPQz>_EI8$*=>etrqGoXHc-?mXb(B4>KNeF~D2s7af( zi^J9=x~tgH!@*9af*s9jGdu)sNlE>*3u36kZRonb$K=$}FS}b-GRsNggrTU22$#g$ zI|d@2+f3BN#DGSxbDBFBM&YI=3r_8^68-K;jzdh+Lte?(uR{g>a5KA(iqq!z*WgTt zH#5BR3c58(5lEq7eC;uzkLP^W-{txW2k-1KBBZVk9c|C%i74=!$IHA4dA4hQ-z0=d zDEP8iy|*kT>%wSJ&{{7+=FRol?wVAaXrCEJo^cjisvNIC{le0coVq%-WkCT#T9`;b zWpo9dR|6jXP?o#M(nsTb-5hl7NXkMDmMqI*{2K50^_^r7FwRfz?O(^XiyVj7)bf=O zL2)xPBcwzhe^a+13BtOp;2!g=cc$|Q+gocY#N^~~u_Q}cS{fVSNs&(d*R~+% zd^LKnldV9gfhibrSeUt1tqmQDzbE$j;c1q2bp}|Eh+v7a60MfW3l9YC3LEjjFY?{} z-D`haZUu*aJvHzXMhO-ZO?4y9*P|f}SUFzTf?1(>`3f&BE^TghUmi=Fm}->_&!p-4 zU7t#V83R|JXIfZ=n}Y7>@b{PNF)F|CRB#HHb(Rt>uQzu_La%?GQ^HT~&66uZkUVHM z4zcffh9?#m^^PJTZH^RRxVgE3b0=$zm>iGx+r6XI3v*=8_0@`$uwg_|jhiIE&Vw#xDb^BDglO&Q3eRec2`yQm$8tG)x#kWo^XO&x#f<22RAng zhTfs$<+bA``+d8VY75ibjPZ@eCI+)kwk89O-l4+$ zX6x$pNGaNo2Xrm|w6+Frtv^O zimNb*YuTBT_$hxn&e|U_@aQ*Z%@JfFj33ud;GrU2QTjI*my_vQGfny1v8q}Zn|A#h>eSTZ2vcZ zWLdxRBVBMXbyLdW8zLg2lTDFt#+^~D&R6C|`ju&Z$f#K=1&@DfVWh`#JdCk|MVNwt zAsk(}N&IMgtdRg1x!Dy&b+X)-L9bq0`1&X#gVTEMt9^5Fdqb^(Doov0E>{d;>ru#y z=Y(xM2K^>uCoD>|nWo!6#uGgb#3j>Tb5@Y;@(X^2`o96DS3TAK)eU(x z{W=vZ)AnX;>)S*gUS0_W!v4Of5VbvnZTECpK8?E5jrJc-nez3| zOiay=R?W#_HkS{rRUU5#3&57yg% zE`}XVvhxrZ*7l+rr!s~e6WOFe9vrP==^3wvg}LIRf&@`fDY2cFjLg(d+(i$K4Et5( zRj38yzCPP)vEc?;R&RG)XMtAzv%Nhs?o0A8UJFv$9kcbg7s|AZ#kUBc?s{jEz3aHL zy2|F-6EcP$Xbx{%Ufa{(sb$?bZG%RkyyE6Z=W)k+=^AA!l+b>)eaW)@*VWZt zh=U`YMy}WA)!;gx%cGaVE(pLGOPiRRE@~9Kn4Fw^u)nvF#K7Himl()?{4@F5vkxjT zJr#L3lkA~8JA(jX4DtFv2Y|Z7jf^NHqh|<@izSqvcSe)uWd05SA+~F=RjrUrY0WDf zP4eiHYOVj07^Lw{w`j*(+xvgBGz==D#P`X|2bF!U`xzr7C?$+3q@}~&%*DyXCM1YE zNa=y#RO4}oRG7%ps2B3uF6%dOC9jKv2m*)}c?#(um`A?ePkmrO?2?kDq@?Wk z!lGA5pdaOR-(#Gd)Jp0%OTAVpxI4mZ8g(kvzZf8d^YFmy^w+bq?tfDx$tV8$;6|_Tp6uQBhSZ(>eHS-zBq7Gvd&&FmIGV>lKZF-* zl&Tb{;Q1LG752MCLKU^;+j*9v6Pn~OFSafwo zNs-d`*S6DD<{c++u$oyQqJ6<6?JgoRz$NO0W&Sq2oi<@tb{IA{=S~&X;(TuVciVPI z7wZcoctAQt#*}pPyajQ#Qh$AEF)r3ACZX34Ez`$Samw8* z0#xG1%jX!jLzbkZn-c{b8T$I*>GsstIU3Gq=+Ikl#u`{o{$!$r5(a{N{dQ_}j9kC1 z@m=2VOP&<}{#QK9=_=$Xeo`|S5yYva{m#%meQYr1rXe*0&(r_DsAg}? z{Gd3o(Anwrd9FW>u0Qv-OXBrhb8YlI9F#raDj|c4QPm}?)6=Rgogv}fiR2Xa!uzJm zQ@&z(&c8gFXMLD-&lREfU}u!ZEdZ!huuX=z!T?&@DVh~*&EZyGQ-hTF3K|$VmNFo{ z9wcK*zWJ`N9ixf~v)9|}M{R+3Tw|kpQhMNR!J#;jnv8>e$~)*WGBU_iVB ztFc&ycQ19-#8lak^;t#YggCT#AivCHu)T% zx|HZPMTCcA!1XXt*Vor4F|{0=Wq+il*`ylgWMwT2@kqyC*pK9Eg=6qUdU~$*n7Zvv zbOeaL3(vNF0CSJmd?LF|et4G(x35{UCokl_9qK<%PusB>E7t0+<6?O7xJb15F7RSy z8EbEY%3^73b!BB?BcJki%2zed`85qqp;X;N#kdV8eHq33_%{sRtY+2Z>FLQ0mr9R| zJKY~DA^E*V_Q4w9G|A1gIQjuJFI-6Xhd2`FKyr)c77Lj_P39)NmBPaF!iu#n~ zyArKZftrg~5eA;Gue7XuPFdNvtxuu|K|D4pON_J9Ve6n4RIc_TqHPKh;XUjtycb z$cSqOei^&{k)?qBLYqLKk{CG4+k-FfB_(GEk16)#0SZ1`>CLk3Q9>M<2$n9+!S*8P z&mS>P;$AG_sHmvyY~42C-oA^8|5PuCYHak4aRGpcho@EtyV`WYlOkoDvY9-IXwvBL za8tQ91`TG&l(xc*5ZfS4@i}Isx@@twYiL+hRjofFua&E=TrI*|so5*uEth=R%NRzw z#g_o{Y@eKDCz8D_bJ(tmElFL9|5s8pyIDhcb4$Otw}_}|rlBastFt268UiX1Dyj-H zWg5k)qG*2C&kGB6?N!2!m)`oZLwh&?N8_{^Ap|o-At#rJCc>h%IbzzpWC2iyfTbs( zwSI)klZ+46@4pp$w~g(;#%Zq5iD(wlAvRW|FS;*`+|>(T{(a|*ONbfpc_+;#k;Opn z{?ofMjlw~ald;L)_gf&1*qq4`fD7_q=ctIw$>Bnn^|Qg=N??Et73*NV6@A}^=;ZWE zS=V~jlLIy>=Q8qSD}={nb4gshN|H=O!eaJH@Ob7uI|s*PgQXBM8djF=b(GC)!yvV- zmp1)f0=<^DU=m)Drrjn|ojcs_>V!mU)M~WW=ki5)`5^7r%`07ekm>i6aR05of2;3v z`7}0m0NeknBZyb0+9uojJj2AqZHch49Ey&(PhZltLGI%Hw$bbfjQHPvoGNtki0sF}Cw0mvF@shVJ zn&U7J(Pq!U|E4_bQ{b1Z@pWv+jaS#_yWhQ|^^0`Niza+n^c#LR`FeXe&2VfSpS~2V zA%K4M3wUFpKI5vI7Tc4~<6b3y3xKpflhv>DM7$n^^f_No0FJ_<=aUMby3MgVeT(UZ ztWly{r3KAMlu&oWA4Lw2a`ZYr7v#GXE5A&1gHF_$Qi8N)tsP<@2`x20TryxKjuhYH zXcxK z_upAQo)1+pDT`&_#FL<4ox0ZGk>bwPUb=JJg(Ln= z=#?b=o8QACPqkZ?$il8{^p&;*^ZahgNxbidcc)r^KOHuG#2?GC7&Z z_H4XZPaI+=1oEG!e0+RGnsqD8!y*mrjZDn*ItB)w1&h(eT>$o&*{qik0%nwTct_T& z{GSU#@t)}Gn{(oK$=3fjvsn_;^8cCrrFX1)ATqGX(9qCcauV;1o`Jds0UZN_4VUom z`g+#*_P*28e<<5fl7E+uh?UxraWD=F3W^FFWoSx*-XYU|fVrWwf_TQOr42f_UEx26 zT~fbbzi4S`Yo6wK2Pir$vtS_&wN$us{u9%s9RG%1x zc?(PlO(mD+`bv9wrBwXE#d=hk`;y+9R7L=em0{1#l}rwugE}ii?AmJpWlgjejKqtLPDmcWqqKVtLFzO zxcS$rAUVT)Y(6WGwJR*bQtJgE%z7VNuUr}LT(Kpx%KIzPq4Jjx_uAtY50wu3IC%dL6s0i<{<~LzNiQcNfbdOx4bil7`Cx zszer@D`?`iBJBsOmuU=!=KG(;EYYMEjs}!7m8QO{2>kdp{*isnn0sE}JW8NIx7Mle z(v1wTNVxbZp<0e z)rU;}cUoGy=i;il(r$c0O$ z9G_sY99`0o$0ep{Q^A8pZi1SdMGT2pIGC6cj3uLgZ9t%Wqy*;%%>HnGFo^w-g^gB~DO~^UX*ZW+lUV*hgg=c-5 zZyw=qt}Or!Nuo+iSvEH}ZKi5I1s|^)u_q^;p4wQA{nVpsUhPd}GoB&<_yL>U%`nIw z9(z}&Bqb4=!863=)LhC>%f>x_s9El9lz;sZPyh6cU-5_|Zr|<09ZvCdMN5Bwx-1=? zps*9~rKcxCh3)(&o_ViSNp0cJA(EaY`i)KyYx=#QrrRsy{Y zThyl?kH1vz%r@pt>@AD<+>=_X7q`u|AQ~7L)VXc96qT;AZl?20R=dNQ#y=FO8L{Kt z6)s2ex`ZkU-*wgPEGlPUM~k$?7eEg$LKinqFYoE^bslnTTHHryXv3A(=OOeSM4FVL z{Ukhy&!0bks~eHCZQ|hYxU}I473zETL=sC<2~-Gke(QQFs;XK|C+>4Tw_GDum0aWk zl_~J%B#HNJq6l*y$4m&+!uO1qUP7&3qD_ug6gS56++(aIi|I7hew#LrkHO5w9Gqax zx7)@n7-;DX(NW2rb(55=E9Uc6KGxhsZ~69r?&uskCJ%}5uj!1zNqwh#nv+#>M2qRp zm0T#s`S_4Cc?el&TuN_@d(9L&JDe8(cw(aV68_Pt+C?zj*-&n4Z%1Oi>dqtN^k4-c zJ^^dqn*c#lk~B*qdND?w$2L_1FF^eoQ#ECh=^N22m+xkn~KyXkH z%;$Rd<=OtMwfu0dyw26rm!V*Ho57MVh7W!2Z{6R&6m*caBvbc3-=Wx2!|jYBYXMj` z&jz3O8l#`z9e@UrST`H7EGB>A!ORpSL3LOVr1Mo8&ozVS0Ng7^c_ zPQbv1Gi?KUz2Wl88emj0PKU1%Xrd&MfILc>KEYJRm_0dPnIklYQW9GYMy*|(h(Qpm zRq2G%3z@qv-U6OoFzugB75PO{!2P!k=L-^7^f+NOoL~#iy_Ky)&sB3e;PD2AYD;8u2VY)CNIyn5(2JzTT&>&(j6G06`1b#Wg z-{>`9^C)R(Qh|9Mofc`WtgV4c(|B~s)kpA>vLh1uTT#Rhz8_9740E?f#Uu=pt#txb zG^_tyH8;!Dc!3%{wLg2pPLYkUhy4o#pbE22M|epRY0iCNFTgGYau9kfwN@ z?S(_~Xr$NUGT&=?kkh7j*QmH`>V~2U^lz`;BwE_r!)u->4%fNrfG0ONNRxcG${8EW$n;_R z5!&$$2F~H>@f&vbSjrHr`(4*{tvd+@SitYMetIXpmGHcP0#y;S?KSx^`1-k42kK+}s=B%Ogp+Kbq(L(5pX_yYoQD$sm^1)wM|;670L1 zDW5f)9PN+1GCD=%b*3i!ebuUUeU|>#h?<-E%fSIECMkDXPXfc@o_H*$cXm5bvwtI&Y*R7VzSyECWcY6Z(8IZ5rz6J@NS%2y=P&pZM zr)rhkOxg;*1KC~MF2#dd(&O!9;jZQ1G71zgK|BAvmq8V;_m ztI_Fb9@&=2Q*K)k3hS6=TpeN@(G?aw1XkDVkn`I=!7jUF=?j1BfHnWlKA&4RS$Q(& ze@^=HG5YEmxnJbC@eTzIKmtff_=E&FEJe38C)P(qT za82&lb>V1S9LM0YJs4P^ntRaVy$^6Cgt_~Jcc>@Z@6^r4=E+p~#+@!MF4#YA7!D1o zl)IPZ`CcnTkXTzTp0z`UwOIXyx5r94W@ppSg)c&xXX^;2r&ePUi-FKc#J=f}e;rP9 zbix5=+nha5V%?)lb@6wXvu{4O3p0)K`H1`Br<&;r4rO;wk4abAqFlz&6R@4dzbhT= zU6cQE>$mc|TJ-+;0n2cxe*Zg*(NRn_bz``qxPi~D&qMSDN{$k_(*OhjoAsdC+lndT^C>gVgzXCCJ`;U;6ZkKzua9Wcbs3gOMm}>HJgqF*KHehc?jw?Q zOIan}za5g{9w1S4(|*B(=JS4S^pS2O(qG=%7%#Rj$c1?yxs#RXcP&P4KQt5u#iS;S zO|_GVQU!}iUl_v|b+U*uUoEz&KeNB;(GF2i^b2q7NS^jwU4>?6wPanOr-%}DUYF?^%q`(++>Ih0Mu7oQiBOgvr z`o`-M)5FqmK+YZ54|Cd%rTzX*ys~0)eAGq&#I`id+)?iH{?L|pUycTJ?EhvO@d9;F z(ZY2w2Ev7N=QFEEC|cX9iJX7Lwl})2$#1ZL8w?71#BD!?5YTOM>E{veZa%Rf3gjzI z_lM^6R~Jgf+6d9ngkL5xn{UoYR(ri);FAqpRkl|*HSBHMH|0nuJw3Vd0kk#&{(ynf z8Yjqx7FSmK1}PKl$)+}0?P=Uws>TwFphdGp23Ku*UO4$oC+@nQN^VcKhE&Cr}7^$3j zpUy8nUA0@ZN+#&=4QS~Q%Qo_$guD)qPq%^{LGU;+W)F;u;}E&MK!z~m?S3v&Dfnwq z2_m|Rre+r)r98cERNuHkn)S!?RcR0}*0xLY$;qNr3h24@96NEz-Rs)e@z7C(yiQgk z#|-pRpM!~dif9rgz z4TXWoV=noGthD*cDdwt))$uiIZhv`} zr03}>tpZ5n3 zqa8f4kvT16wn^i`f2YqKS=TJ4*_k(4|B<~!f3!fYo~y8#`0J#al+v~_uY?+yalGBr!G$(B(wXr+T4#~afKVW0BN@?6z+a<#p@Uj%`40E*QVV2 z$IOS=)}eegxbD!D3Np@Myx}Wl3r?j*eF99+&7u@O!eABYz)t<&1-dA|hFNBY%nvdz zZMJBNv@1W46;G=Gc>5C$mT%AbsO9mK6Flr&I+OtgsUTz*Lr0Blp_DV(4SC z?UB92p^+yg$Z!ADI`aw$Ebr{}T^=Xyt7>WzA`q}>3RkxThG0K`4tPRrz(01GsX%^Z zV=wG1^??i=8&@sv3d%b^-+98kT_Q2Sb0rJU{`9DL!loCTLB#g^vZ-2Ab z4$knwJa;3jL2dOIh?R|xJDyTeQQ@Y}b&hxD3V2&t(d%&A(#L|-kiJ;XoyQ%J0Z@Ow zMyU)S2WYe41OjlQ^ngdN=;#XC7T#!nrU#3Lpp>V;N~7=|Um9k7?e-%pD_;wSpVb*5 zUOEo*9FBy`=Q%HxGp7UNt@+rS#CwP$*bB*1oWGMxzM_Likb|P;TgN1Fy0v)h4<^0A z<>=xZ<#9;Sv~QqxnfYdjA-C!`sQjO9TQy9JKM$r;I2!vfUwEaiJKDIx`~0q|p|t49u!6trW=p{r$R1Z{4+g5AASV5_ z%7z0E{~O^c4KWQ5!iy|7hs6^=IciGk#+Zt5M_%s>$J3i`mEIwKNatuFaXEIPBaUiZ zR+o%y2QVh)4ssxv3=T11%}CgGdczirY`xNcQZ@knMyuz97jy=U~|G zuvzhHG}Y7c{2FK*@Zmnikr3faTv&Mi zIq==WAx(|XCA)p|A%FS!7qRC#5As3F;i|S>OUr_P1)6E8hnAYd0D4A7syB4l>*!>_ znFrT*L`*4&E9f)VYSkv4Q1^IyWIDNsJ&7O`j?a}(RWclT_x*Er+wmAah3O(t+yLJm z_9V>1+Y@MhnVrE- z{;c0sH?jIZeQ$3(miwy@j?eRyv#68$gMl$o@z6lPyp9G^?X?Yl!eFqjsNN+Y16CMN zz$D`DqxP6A632**V|ng>$(61UujD^A1iN@1wMosOB^5cOyhEHOxW^Nffmo~(_dXh<|k6^_uvXKLkWl=Z| zhxtGc@@F#Zg?W_i#q=-EC_7qQ`Z|&8RM+%$?Z7}|K7;|X>43nFWYqKw@%6RV&Cm}o zCk07hwMk>8SYZdKk@@P4{AlO)_G#vxwZk_Xzwlf`tLQgF9ASpsJQ0`t_$7dGf0D*iZTN z1(3@R6&a)LPc)G>>PH6#B9B@>T1sBLt+p)LYwQ6+HLYelQZB2JOg9Ho&`u$xq$EF= z!WoABE@UR=O2h)(-g3Ndb++USDE>L`v|z*l06rId_vzCzHkz{0AMwI=6ZV)=o^LTR z;_7bC2$*xe#isQE(IRM)$^KBNp1=D6(C4fS7?X|W)s?PNTHyJoVRUz=@q2#GUZHZ~ zr)g+tD4OOXehO-`H+xVY;V_{6nJzj$I+G}9ILyDgyGHRjX}Qkd-6cA#*_G?|@@?WO z!y_eapQ)WcxWQnVbZHTQx{!(7%Wz*`Y8=tf(M{IvtgoBjPPfbS3+eQ0=CtJ>|Ued8hj11sdbUecc1{4Gr`N9IFOZ;729CK30`%BeH=PEedzun!NZ z0My)m zUVf;6N^+(?<9FkU4OXbJe7_Q5#o(Mp z{*y3CW#hBYe5j1AH8A}d>LZhau88* z!k+V_SO=nPoI%A)m6V^a%Bc4%XxyM2bANI54YUBj_}+03-H=O&IUvzrPKh+h(-X~7 z20*41yo(C1^wvxLS;pMl#l=SqU)-F;Riswot?Nt$%U-slld86aeX# zR(Iv4ENJcJy&&AS(?{L$-GKZ2m}LwK*^hrX;7dD805@m@nu)Gddqw*4CI)rJJo)LW z2YMPX$KcHQ0fV=@{4HagAfIg%g?HXxe{1r+#(DWd`=cKNgoTD;krBtBiEV8OfP0%0 zhssu?C4t(uk|7GwFF3QJNxyU#KnS|@QhcgO-{ z0KkrphJT0$aan|dT4{6?P`p2#DEMk8e8)?)!IPJ~_Sw)bDnpvA3$%+c1(i4QQ&gAb{5d2^YMP zH6|e7ExlS%SIwa!z-o$NT@Z2ovky)jEUE=nIfVv>t@_+d6mdW99;$bQmoN45ac831 zEP8pJ!juK_iKno=i(#f>X$p#}d8@1lK1iuA?k0{A2%mbI=v9%TXZnTY@&39@{YX>Q z-P;f$>nW==Q7z#d?^YFOayf1n*`pr_{@F*a=_-^xDq*IPSkfrOqpw6JHpja8oT76+ zXwe&!=tKile&*3}+k){hL{$*-8 zLttFRZErvVE0M>XCa-x9T5)>iy~0?|ZY(aRSKlB!7wQIjSsG7_kp$yzJh$K@K< zT|EOWlZ}GQ1|CnK^dD%|@>z}6stx?iH}?y>2AKIXwBU2T9-yP>>WuvDyx*?2TDU?X0@-2XuPBhgw+zDtCHI?rYn)cup?>VaK;5H8kM}O*sd@j_2i?Yxd~3(j z(kpALY+$V;h;OM}x5tg=s-26Mh1~$4IWa-_Lm_<$V37H{qY;E`v98-=LzzbJT=+?K zxb3S7w!^xXBS?8NfZoNKpE;^6=n;@dFVn~wUUbpqYYv7e=K8c1#3icB2zi~FjrJtC z?A;K;g+;JgSXgp>Zm^}t%>-C>lYD${EoO6>MD8yFD{p`TfZt`KE0f~gM7b|XXEeF_ z$p)L?(EqES`mZ_xIfF0X$PH_M4Tp%ftvFHM0ffHvmD81<4>mq z1Y*{Rv5cZ3&FWCji{1!9x0fRRA{~+bUyLZffI6^461bXhf><_uT!07Q`d*)#k0jCD z!{_umH9p)szVx4M*CQy4B#hW2q+qR+RTI;$d;h#$T`30lk>A8?disyADd;F>vq(^F zSS4(V1om!k*=kvNCjQD(H$bD&qC3O(&%K4$b??9Nta~?kczVO!`ssgal(xi9tKT&h zNc3xG=jAvrU9joS>K5qbai{XkrVRMLIbjEShwqZ5bHJ5_dPR?z50jHznzcZ(^X60B z1br@~#!3w&yK?%%PXUXS3i`L$4gVU}xo$@#Bz!ub^Mx!d7~b`awNUn!r+)ksm_L2U z_mg`|_9ADwhJXov8CWPKA4Rz{#3rL=Bez?XMXOVYV}8cGxCFJA?U<_xsw@^d6=;4x z+Hort`jp1-^rhUUB~@GSvQ9CcpKV6&5~Uv7RK1ho5TlFIKU#p>kn9|)CDmG@U|F@b zuH4JXu{c5!h4eFH+7CH=xhI@2bVFT!0-LJolKhQt51pPq=Bs>~)yP4SR~7S|M4=!59j#s#lZ3Z9bNYl>%(|i4ii7Cfb-Hz#!apsqqR&jnKHeB&emE@Ec8>oMnNiShzBqJ7V z@joMh)Ys4bbxFqRNC`RYsVSmL+-sQ7-K!_{e(8Dw?uMLGi(6Zufssc+K_TeNmk026 zE|o1k=;9FqXatctTzW&RUPK5YGNVCN+Axjc(BFCJ-`?*wSH_fp*DBWGUIslklTNGo zDwV`BG1xx$v#*=(_jCY;T`~ol3#x2qKLfXf$ME5YRf1JpNBdFh4{=8A3nqk+XJl>h z84AhZRMl$c)gH+DRV6FF&m{_j#!ccjHx}#;8SNt{ad}l$$KW8{Ff?g`5cKNEFH_6Y z88ivfD5jM$qK<>QqbHuO72r{PWg-XxiN)HgKh@}-kqUOjw1&WR8362Qt5dzSvlCHY zFJNc4r(5rpFh5>mHsB4DQcxK9klIT@p$qz^ObTKzMoZ)?w??HE70oYynfjb{)A0G- zy?_6ns&sX2zXeqTYkvk_{Q^72N3}#ud|>r30~Tk-?amovT_VM^QuU1d}2gG!Sc!1qJHYOQ>|r%)C@)jE|R=*1E!3gcXzPJ7}5F za~3c6U!VAY)#sfUrwT^HPDGFIr_($Z8k z+qQI`tP}P4{)Tf+H>GSjG%>hww_<7!H+fxMZ$I3D49}o=^Cr1NK4rZVOyr2?4Gj%L zW_*a4j1Qp%jUr0YJ-e#c3%Wz2^Lk9Mg4mt`E3zJ*Y`mf2EutfZz<(J8!B9M?MHHnE&Rc*ij{wFvrI^1-6 ztbYe)tQ|pNqX6@a_?98hjiaC&Ezb*v-8^GQgD5n3m--h zgVxu4*5CVUwP(0e2kW7=Dus)|VyXxQ!0_vF(QDdMBl*hV0Lphd?J*_3;>r2sZ(Ls}NeTvR|-{;PT>^~1Uxk(-^`>vfg7ks_#< z-b5aMGQTu#^(rbZF3>Jc$>}c`rr`yGI+C$l1uJcO)1JguLsrAzZ@>Q$r&X(YEKp^; z+DH_Kr~5VZe_nzMca=OWdb+bxAcjx~8=rR9fHu8l=8{D2a(~oVAfy0|oJ$J}q1`4Q zH-`*1{(k3}h3*7{#)g${V@ACj4ogeRd-cnQk^Sp+#L_!_Fx2d*+M|*Gf2e!ws4Bmx zT@>sBqy-6;5-BC6Rg?}Tr9}j!yGsP5BqXIpq`Nz$VG|-H-5s0m4R`LJ`uonk-#6|Z zm*Spqw=bH1G&wOSr&bYIXL;2;zSn?O2a32ZZ*EcryPYl7oys=SQ zuImxr-CZ*F#mdG8vvz2R^x{R4y1MMMW`{GErQ`V?0|j+GL(YpW1 zFYXTwoq3)lZrvHrD?+cSX=G${iO=yu;1kaq9EaSytE2UK+Fm~X9d_Dm+%z;S62$1m zM87_rp_Qpe0GUTN_4#ecV|~DU=(KP<8G7J9}f&Ii{?{QVFveGq}hzdJ+J?c2KS-w!>#LXE!E zd5^(s7u+XZB5wcwd@%Cbg|oVrovY~25nQKlZT&SoJdR}j^RdlXpzOmRxr^oClCqD0 zZ!xhn=Td{X{`-=xw%I0Y@W+{7(lA<4Ok6?|pR6ogTid`R^*`eftv0vatL^U>m4EXl zz}Wc2(*Z1WM7BCsW5rvjj$ei8zC%xc+0sPd%%5A5eMfTb!piC@h`KcQ_qP;fB$O@B zFHL6E5c+u&++U-hfV$Dwg#|)}`@iR>#Wi*?Ca+&eO-(X;thDm~K5vI}{|&SFccA}2 z7fi|pdu?u6a>L=-dis=GMGij3i|-q1f+S*ZA3f~;ZVu$6e;4!shpp7XE_zFQVw2oC zb+o3Ayep+4#llJKx|`vX&FRfQBSBl02$r5ElxC{Szyx0H!W)Uz6T)>$CH}4)zi-K^QLPQzW&{I$6m7s zg&T0;^|blOJ%BVcylOJ|h*ysr@VHu^M)nM{F#=@lcU=pYQnQ7SZ1=JtN2{Q!l}# zIZrlT+AdvWl609DH!Q>Sm13&=r!q^ynThXbC1Y8Ayl>)$GR{hzVxHaqa+1Qw@APY& zzN$9$MFB0_Sae4>l~*K(A+3^-(8l&|vMsW@{b))e&fekNK(ZUUHXy5ErmB_@#qtVfuglJ0|04%r z^Bwr3?%&O75P#P609_3XVl@rTjd+A4k;^Xjq#8syN)MG*cRP6>%RlE^O%^=!M)Ed` zMvhr_9m1TYvH^;y>@AOPe(oTNU%qywyw(kcDQUNCEPfb1Wv~z?=?q0@KzK@c=BEhL zX@0nUS>W@L!0p=+7y!|;cJUoC&LWf`5#mEWT(Z%9(NauIEa|b3YaICz*;OJZG31!D z`QG|O`=Xp=EMKIDhh0p*ZL3E%c&3sR3{;V zf`VE^D4l9g-c>2DbwHU+okUKq;H`ID%{3<6E|YcVLF}M8WowSjq5b7p)cOSz6B9<| z>i7C`bUle8EWUO`lRq0J+U;yfm2%#U)M%~_@uAw^iid5|@G*V_I3ss|J|2jnAIUhb zC=qkLex0blFn&W%Pp?1cD7H)Rh~V9j^)lY|+z6@Ylic1s@PS{y*7p8bxRqo}y#%x2@Osp;tl(NcRAjK7!glWW7P+`86QpSn1W(7VdM z%St&xQBhIaHGHVKB&Dz?+{J^u$aCLSvnQ4NP;o~9x4cM`)v4Aj{DG%7MnFl~yqr@l zIT6XGe27KL8u~K{ao?!rmV*_tt~Dg(vw${je}6xKShUh{bsO5v3%d=|A1OHS1Z#%) zx_87dBx&(I{Rk3d8{0nK;Pf~_9X?N%REAn|`ep~rpFKYphpKojPxk~J_y=QY{D|4~ z+X&Ru)bk6O)RV6ziHE)Jt}`tN2#M>&8E5&LP$P&96(cEn9wg*ER#OLg+6#kKHzy~x zB!Ss?YdR~7UM^(|08ra-pS*gHy>=xyNXW?J~|(9$8}Pn@W!V}t#g_WMby;5mHj>S_P0KF&;mMt zx!NqCW&M7oFA+kah7XH{Uz}HO26jiFCUN+6cj? zkVt9^W7I}-BaYT?!gDL;<3q-6@i~}AVy^rHRITGX9I#>-D&{o2x<4_mwAZ;uOcuKO z@bP2fTnK`O5yKWn@I4?41tiv&)kY)=>5BDz9bq=Byk>LlB%H=0j~pC8>F6<|W_9T9 zswq>r<<1aCF-X_c9$3y_!oevS8OW!Rcv-V%tJ@w^k0Z!3x3hr{`bqemosmLHyu6Op zF@k{$3vZvWXwJb#551>wZ=g%~sR=yKx9A^yS{}$5MgH{wHam8f2Vg@tjMh^%7u#3A z>RQEibqw!qu!@pdpI#Y~2%pG5X-QWenwyI@;Tq>G%+K$%#`5I5qJ^BOjVYsi!>v^K z@&Ps_&(ko2zJ<{W91YhG?>m{nNi+NLlbM^_=kvl1go}y_sc@omwqYq5UR0W?l{~>S zKEF5mfFEMN+aX`;YP&~eSdGf+3HqTr9(L_&1@@y)cj7|tzId27|ucM9>)8Ufm<;`bbhgY$`o5;dT}S)(S!|EfV0% z%*Ms}dyhbNvToMz`=59M94RMTsudm@@q@X26auyimHX6sxiODjBC$cP&eCnpN(v0K z=7~++@ffv(t<^@0S%hB2QZcxu;1@>*M4ntb6vn!}lhg6Pt|j$&V{@~%o?e7@1z#+u3+m0&Waq%2%t{|)N$tU6wxP+jIW2pM zO&cKMPpQ4SC9{K!pN$C%BLr~~t@+MX*!{`@#Cv5N#h?iW0L1#uNj2=tNs^JQkxlFC zcR`1+eIqV2Gt+)!Rw-3ELos<8-V{O?C|7E>Mx=}P$x-|MjcxzG&;Q-e9m#4P4V^vf ztn3pP(k@4iJ8j=xeG+jXg(Ou=ru~LnIct!e{lK=eX+z#LrhZtZ81gnXI`p-A&bQyYOk*GJ(c_m;Wditdndz&jTQQ*c`8eaNbfRSs8m zYq&zd+W{L5jZ5^b)=d< zbJl(*EJ9RLbYeY02m~R5aRd)M8XBI4GarO0v+1pmt(e%_rRAl#B=+vHytb^)OYC>3*lH5W9d^W%rQ#pwO*L{mFA*T6146@l8 zhotm0nGSKx-?&H|*8y0!P1QPtmJrwVmY@_3nybLurIY*?7`S#p_1j0=?7Q@Fx#HKLm> zhK9>W>hJ&D{|q{+<(ufwK6U3m!s-61!;oCf8zQA@n`@4+(Xcxp%*H$*+b&l7jUOdiwzZP@=$1jGG*oW%!jx z_s;re$$jG{MzAq@1_QP^J^2cT)dy=Ai&sbL%l%dD zoaW>ma^6L?C>%Y~gFHIBd_5NQBz#mpO%&_VJuY`T zuWGaMdTyoc;X|IyU(@O@^A2rc%uRkdl?L`MzgHnx@b?|d%F1Hct@>Yv(0pS$a9o?6 zbg{331rV(Bx43BtF+}J@G@P~1fJ_CX9cKfyISocWpE|EU=rinnGte0uBS=#Q|3ixkWPh|!<>O^8C{ie=nMC9e%YsXQ0boc&=px(QCH2t048=Tn z^yD*N`kVq+nvg;9%ol}d&dQ@PqqcB{W|o@chEG&pplEe7Bv}%%TMlPzrdrvVcm2jg zDgjFAYUhz(pNWZ!zX2*HH66{_=jDYg+Rat9aDYA_U41+D^*lbEl-7?Q36Olgu1Bor zu)8EwfxT+EbMyCtw~T9B)?B@g`{`JRGaB>KrC-h4^dT6c5>na?J&6lri5JINR74$A zNP`|I9JhQDYLDZd&en$fFuS6n;_>$MUc0?1Ek=BMw2XgL5yZmyf-W_8CE^dUQ2Ha^ zF4KkpDdPez8JPz-2Um%hzrJo1hamTQfv#kVOZ^3miuIj49?R$w>E`zY&W;Ig0ka7xF{xoubiJg z2feaaOhSYvX(B1k#qmo(NE1ux_+Ga|^+)0|zK4g}nJ?-`*uAC`T|+>xI=uWlBAzit z<3gK3zltoqbdDz6P#B@>^Z>^gC)*&xj~xcgf$xr1)WQG|v4qT3cV@j}Hv^7G4Cz=N zF*CF4K^wv|bAl&d;J$jZ)i1t-y!P4qZ(E+u`c$#PHd_hu`IppAH8lpUB7qmX4hQ+!R$pFo{FdzPft%_KuRCVy>tzTDJXOY z*Ln{gj5#@e)p3RDxAsU5eE07dkBlVQ%VyWsu;CbxPoD06@d*RK$=*Dx)|~xtdWnea zQS`>?ICbLPTu*SXd}zXmjU5nP-81IQg0S`_VzFr^g}S{bvE@5&yVJ2SF^^K8=iSj7 z$idIGl}WbA%gYO24W0R@zh_=TE+O6eStHx@55zXZf=1MEF5?6~2{$egtdRg_n0J70 zQ%?`VqBGPa-$<1tll8onqGEpoip1$mu1mOJfZ-rZI3%(j(6G@00i`_E|Xx~!p|@jmm(6>%2wrR&0u&nWwl_$m#gz^{x6?1*2LlLmZCNlN9B)c_ zLyuu(Y^>i`j)ie_;&ha!og!j?(ij0Hhp&)vqfQ$KddH^HO*g}z`4LfpK8>ZD8^*Vk z6c9sI1Q|)+RwD?h`|)Cm-wyiTt{481YOXDT1;Apaasi&BDZ{ zzkkXx)hIvUk*n0etxUI@SX(~#NZyQZKt>pk^t!Z_nHn~gx3{PUfLhnk&#R>5H73=f z3lq)Anp0Knj-wUrv1tAX3Vz2I-$dbwCDUI(%2>&>`?;Rb4+{XN-kP1lm>e_L9?Yw3bvK$<#KuMIL#5~a7$^aYsA5h4Lj{FHnSUy zc+g5k;}Q}!{-p6!F5X`A+Zt&tW>U2~Xq*QR^&9|YR5Uc6P)oDb>V>pK4HX$30l!7V zWyAghHsxbbNJUG{z)sFouJY{?IPmtq$%V1MorohQF8W2iIlyZ9gc|mq+O_HyV4ipS zj)!CBYN2>AE?lE{a)ccV&K_D&)M>N(qKB8)c+oDbtr|SaUmJb%R80TiyaaC{;bv;7 zfwOe_#M)`eelFd(rTV@N3i(na;?`*`q`x<|@6|PwjFpckdGpD)DWtYcp2f5mSlbLU zL{CpnC3^rcu-M)0WKuf)@ks_(M z8hhpHM44=N35<9VKKk))x&hNyE>&i@G!o&3D|9q8u<#8K-{

Wjkhb3GN?;Cwr$5 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 literal 0 HcmV?d00001 diff --git a/.github/graphics/pr-close.png b/.github/graphics/pr-close.png new file mode 100644 index 0000000000000000000000000000000000000000..68eb0d29cf4173a6ba4bd0e1f70b1699cdd6f514 GIT binary patch literal 24804 zcmd43Ra6~O7bXZvkf0%0@BqQxL(t&v!QI_m6Wj^zZo%E%gS%^Rch@=mJw4OCrhE1D zTJtau2}Rwas*dfwKRGu@MoJhF4jT>v0s>J~L_iJ#;te-AzJP@W|NAfEo`4_ktwmJq zARv&sU;jbIQX%0$KzxP}75J{;ta-TXq%5yQ(0*nmGAEzty}qLOQ0Oq#g8oieO<2uH z!(m$0tfZ)R;YqblvBbjSU1d zq&*Ctq_}0v{28i&CG`Ek7Xu;W55@O-SVsBY9h`ub)fHJI1_yy3`QH%y=aNq!Z(lFS z>i*p>{CYs*|Bn0hPska*oT7jOfgr+P5#TQg#Ss4MEt=o`ig-`sd7J$E6jj2jYp(p9 z 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 E0vyNmJOBUy literal 0 HcmV?d00001 diff --git a/.github/graphics/pr-open.png b/.github/graphics/pr-open.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4bfe131b3e112b56b7ae11948df2b9b6306455 GIT binary patch literal 37619 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 literal 0 HcmV?d00001 diff --git a/.github/graphics/scheduled.png b/.github/graphics/scheduled.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f8d33f186147a83693e4528027068e4c7c847f GIT binary patch literal 21736 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�iIwc>wury60JEeHYh9G?q!&i?1x z1MsJ`R;6!IYyfY+f4zWuHmNO76%{TW1^#<3TpsA3bl}I`wYqX_wqk8}dJ=9}LyC)x zcXjUp_!&U3#3O?A&yu2RC;&iXK9uumyZx078-Xh3$XFS6f=z7_ReU&(3dPk|H4WCg+FQx^LcpfHykns6IbG z*H`Qp?YiH^%l6nc*YQ1O1!|o{l$_pZD&wxZG8G1?SoG)51*8CfD3Z&NHQEkl+B*gG zV*Tz|$$<)nD>5=$g|1lVZ;#n3#n9AL>^09@ZHt9c;kyDmKoy)_UvFI`jYJV#cHO&y z0JLEG)PIg0{T<*mi?@IKf+m;q!PiQS#=GwI*Vy~ZT}FWRr?c9|0Cd99WXxo}%e%pB zD!_gV9G8$GB`GOc>OQcVr#6WnC}oT8BmD2|9gXU>PHYalPXiv%ubz7ZBR2KKwp|jV zbLAbZRvbWCq|t4Srw|qb)zsG;|30++y}jL^Y^@2YbEcMac8}2Yfs9X+Nzs@DeE*K3 z(P$xZd$LMNMpkC}^ z4H#6SCMM*OUFy;)#o4>lIYmN*pagO`17KesJzLXnB=qhtbkncXX%A`+k*0DPQ^jG? zO%fMC%cQgAy-Gcwot^0&hg=6W*iOK14KkUI1B_y=FSkap!3r|XQ{BS-QJV|uW8r?- zGZk*9iY-zaU<6&V;-ywC57)blY5ZlBL_owTAQ)ko7HVT}54_K83Q|%j_z#MXZb724|j62x7dVRyU+U+j1oEVK3bDN`S%)63|qWQJG_Y*Jnn1MY4 z3I=FEu;DWWS>D2-M7IkfEbPoQ2N_wCbd+T)qMMA!Q)(V zswcD%FJ7N~Xxmo0nZ0!lb(o(6bHNp(G$02@hnnVQ@UWzax^X`V{nzOR33NbIBKrFJ z&f;34p-Bg$S}wr#0{p6&O8M;OoQ#n&?&`{kJSImVI-M1QQtLmK!JbjQvx&C3zf#DI zYiSt~5eYCeRSw_Um)%SHQ;*4+dM?5f!h*u$bF;pX3Qfhf2Qww5kJKsEdcb1zE44rr z&=>S?J+cE{G&eWzxIJkHirK6Mt4C*c%c2`Di`h@WV|`zyz06bG;`tFlWBlAo>(#KW z{10Fc14a!{VO*qs!5cIdcG2zc7w6=;=B$0(kEoef%Q%R`NFf*|Tc;uSx-gor&_oa= z-Qv6Zsa3_!$CiDMu)DRjHFCR7OUg%=4cNzU@MY0GdU}xN5y^K(dp86P=BvQOw(zZD z;c^I^qr~BB49Gzy^I@Z>r>FbNX)<7$it6d*w)$=cg-2yDWD^UA<}To+GF!5V#S$7D z_KN~7dl(SscTe>b=1UcnbI` zEAIx}+^vbpd&#u)OEdCSS+p+%F%6rqwzp39HsH6%HPFsr058`ZLUzKev$mGWp|6kA)tTT3IfC&^Z4`=chJhgUq{VrKJi3?|#l?lg z*l{eIjWn~2R7GXw{eAI!B`WHd=P>7?-EIBvVfwx&F2}H}}WME@81`-|i?e zJhmStC8@s<_CR*GC9)adm%u^MzWaL9RS`HchA(T+S2KE`~nW4QHbzH z09tQ$`xUmV)$_M}Cl}y*W^y{m|MoyMTP%Sal8|WeR08vV`o5BhpP89ivVYv?|Li$- zSzKIL=RN}iEc{guK2`lmoA*_^ugQi$8HrvwvT`|IjA@RgkIrD*vY5pH>`TD(J8|IG zCI2b{gbSd+9FKuYq5L5&uZfd?DnON zxE?rKs*NVmMn#H=0UAGUmTc(Yd@@I*91<8jhAhq#*B^xWk^Ut`M&wzJ12C!UrU}#BslQuU=fc3OJO8ylNm>fAc zIpwvqzKVL30VeGvmBI*LE{7aH#aAzQN*GuEi_i1TpO^@oW z3uXWp7#bfZ;is1qa=`+U2p5+ZzsARZ6vf6GH@8eA;<4c2Auc@)Tl0{-@B-(tvSLXd z+vHQUnG_&1t@HHTfAxpFn!F90@Wa^FiF5ZTGE zZEam$1FWr0fC?mHpD)N{@I@DmrE9Q7!Y&dZXxP{w5eRXmcArc#1}!cwWFT2zKBXI7?AL`-|Efp)rWj&P zAh~&XINThmFE!iB^@&EOzFzb6!i1t?Vh$GPcn<=)A8@A`EUvzYcCyD;V~ytDB6QNk z_$UJIg(6>iM6_t%a8mhVjSp`geYbS8%_@U|(ZM#d6v5+f|G+4G)(8V{MoX1SgRMcC z-PUZcI#M7xLdW=62_UxnyREdlhsU`1%+Zp#{4X@KNgka5iZ8OUW0*0OrT{7wZ0K@M z#E{hkK!pEil$$bC`XqHyty0?Rxg=eu5n_?}t8#p(OwY z{C1a<0^v}kARb5@Z~IN^BOw0aa#-RhiDU-y+hChqn#c&v9gY@jHIpL&4<0C>aVa?? zg;FU1($?be&6~xR^7r=->cStU$nh5SSCLX~E|X4U3eM{bIUlG{2R3#RZuil$F#y`m z0RRBV1n|nq@sL6^O-V8aqi+r1RmLMl>loG4&Vn`s+__+iscel!v(FY*Ap63tYn%S5P1!CMGV7 z$;!!*y9p_`vCsxwI<2D19LlZV%42n{W5X*Tn# zF>htUx+PRg%ANdW|4As|-;lz9YtJ;G$JbWT!FpmWglvBVrDt$A_oahNMZ9l(!T|+{{I95r(oaz1O!@2vh1_UaApigLMD6A!W1x10kCm%L@GB5zw0G$>l81aYkNb>Gq4Dx3hHTR2**pceg zpGFVIUr(a2>D7>*POB<}6cl2+KF_RDUFyA4`C_!~V}J(a@ZSBPNA+4jP18R!gYL&q zuRRD@83_r(LS8&;IywOEfqn(~vROst0T9*w~2+1Ya#+ zS>-oU7`6}3@d(^ToYVMT=h0+AKsE8YpVOMJ)|>#CK5e^Hcn6Ba47tpm@gW-!&ylyR zkPv53{#2<=@g7JRWtJ)R03ql8g0IsvGk@7KtHr#La6b&2?V43ra->vPv17`(Sw$r! z6`iP|wf4r-z(dAFcgLZi+{A%fi|1cFpO1)FXETlI3azeQEh@E2w$A&Hm>*LQ zJ;na3h;07CVR&S8F_2#arlQ!~rN%MGh<35s+#URh!E64ab|7v12&mXM3r#l7K^31= zG!G8rb$quF39V4X=_4!#2Ely`>`|w}G0HD92_}wkK?b4^l#>UdG`!+`b ziDdE+xzArp*kA(vjo0a@F}`OlyG|B4TdGuR3)kvQP!RblY&<2!rKb-UP$ryTUhYju zr7YGt;{k1Z_az*ioXMuwE#w11fR3%+cm)KX*CR0+6)%m+mo6aK79|LMyaMy!n(a(Jp~( zOtCG8{y?!F={zUy5ByqNXsG_#Xj9)_HITf&Pv{>HkNuar;3Go1WZ~wJY}WpZ7rjU4 zA~F`1Dxj|YfYjnho@)@Gy6Y!8K|e3OACeC&r^*lkH-dW3MOZ)&WlW=?&I)srNd5?G zUb(#0kO3Rg;B&0~dYPXeimbt={^c^(IOuK}pg{gAkw7|{gNrLJCB@Rlx53^p-CV=K z+Inn)UnEyS{d}EHPT#t+$BdCdhvWUG2yjRMtSmJkxG2_6!SxMzR3-Lc zP9iLJZ?rVw?SiF1pQwzutYq(MKG(|||LxsvfSrCFp@q=_fj$QO{ks4%wnRWo!!nzn zmo{lEgDqF3e1HD36+X~K*zWnE8UJvp(Q@0wwB8cz(&6o8zS4lBnqT!j?fmt4)!j`| z`2~FLnoe##^KEH*y0eg$U=mf`2>p#Ys=TSFy&!>pw!G3;)D@7J0DN6v2~FLX0GjSM zA1UAAi>Pa%2pT(?VSG^=nGBw$-A`vTk6$P97pJ$5R-=EvzM#9E={O-lls&}~QZHL|ptm zc|v$V0FS}eW=TcGC;r>dKp;;^S&4r}C>Z^b-Ug$gydYlmD0U*50@KCeTnV4y82 z9bLAECvUs!$xo9;{j*yNW@hN}xrlLaD9=Df-+in5XJq`Z&dy}4%GsSZGmC2SQ?+iM zhuB`rIp>$xh6`fcVPR1Pp0PTM1TH?K<0>ws{Syk$-VIVc(Uj1fPuk=IbssbCl6bs{ zWE!QwQX;p6o$nE?BTFl!)yev8MgP7w&{N%=2)-0@R$YlA?;rRZKYs@x2&Mn^0~wex zgHplMd{s;Y;_=DHKecKWi38CVOlBqtIQ+W&4H}hol3~=@D&+$c3&{0Dz~53(N)TjD z!c^3??K5K;9wqPRyyEkS5+%L9W|J-)7zVO5ttRjNWQ$2lWWM+d`rqB-B+dzG#nB|= zj*>GMO&eITWz@CFj{%QNO);f+IDHgqzz3#Ns=tmE)c@?knVm07H26^{QYzD6!Y(hy zBoGrDU&zSl^BNZcZuIA4hu= zAJTQI`xLeyy`-DBUu zL|A&EM?O0vjcwsCE+{x#j}rbWDv~`j%v{}l&h_$=UDuu`RIe_8C6VEoeP0oEbjqjn$EJaox7T}f z^nlitufUxymd%3FGJV{srU$RD{|wJW|BK2kuC}nBJ_H2^pFiKO&vg6xa%p?gj-=2T zZX1%~a5{W`^}07srq>P`P#C#`+roKW;YjZ4ipq0c&&OVMcJyVTjto1q1F9VODvf#a z(8+4$j!koVTCLrN031V*FSS4i&?_L=#R7!R(_Sa;-!{YT-qjk8W^h+SPMw9<@x&kc zh|cCcm@Q@vqX?frdp}(1Pi+oJr*i<{X2I?@%QX&oz#+kK@OR~<$-trQ-+(PS5C0oq zU((|QG<%NBC|u4uNWxHRtzk=-91#sBf?TY31QG!kgUyrM!SS_~$D?)CzEh>=k-1{= z#c+A`kMn7}?K4!9iS)uFSuG=4Ocq;uTA=0Uz53w+zWq-3x{p*!mG+wjh|jEHehKjO zVBazxAO(-sS|f*tCD}Ub!?zQSxLi+q*F%u=+uB0nVx!;c4NA?VF}u<^J3Ei2@@2(O zqv>Sw+^^`bdU-$p@%FZT;q>K0=DR`x?(0@LefRb%t+|zq9C%?N6d+0rj)NbXI&TSI zUSQ%AVB@p0#ugb3Q@MQ!B_t%qe5yM=`HQQnlJ^FA#U^w*7rU(SDxslL8T6q5|IooV z1#Uv_w|_UE-<$?`w}HjwWaXWJxj7|}uwXbYOlheSL*{$jR=j20gO3f%6`RQBv3u2R zz3uYE0oL48w5ZGR(m)2a%HJG{>^R)*;==8|u)D~+3EoGVn+FeL*D(jKEH`)e4LgoR zr2rvrO$s@_!Y z$!q)-2Xy5@1hg4rV`C*{WkoFoAv3f0AhCL__0Ecl5B&Vyj>wju`1rD$^73fZTE6>3 z!x}JP|Bb3J*492*Zh0(Gkg=M*?)XC+nc#0`$(-8Fj0NJ(KI3Q1N!r=r8P}TW)3W8i z!RPk@9wuV|+E6ODXH5H(|3=^aL3y?Kdi;31dB&R>4Qs??oM!H$6W^R`aQUmap57rot+pk3Ki=fcS=26TdsBnI@Hj_6KOzGU zQ$T?LW*8P8Zhqx?ee4N6s3J<<#SrH!?ezv!J{D0;!k}VF(By$fY%NqXJ3mSOAKJOH zxTMxS>NzwSX{Biznp0(i!!=6~kJ6|KMuAz*nTkVbI23A1b~3aavz!$*Of3z;p)_+y z&8u-z@N%66=MoVVXG7&~-|yr7-KX>R{r1ED?T7DM>%Z2w)`n$pisNJg2F$b1?!HFZ zxOX^5@Oc%j1)mr{fHRI9H)Yeyaf{@1^PCeulI(CBl16|KLMF(tET(UE}0K zKgX~z(@~6(OiF4h^ZPQyw=4g*nT_>eKwUu6NFUR6+v1Dx)q=Oj=`tfyGTg;ut>1IZ{o5YX_=6e71bG4UUVcMEu9%g8pARRka6{rlC+>K4W<5vG4lIth&8R&Y+*V2C z!YvVEPSgw2%Absxgh^mmmWPV*_Ou5g__c|NiMiH;lF)FDnZ2Ge&$;}`>gqNu7As?4 z;b|RJeo)`Jox`$-`q0Vz5duB&5TD!ORq(#*=?g}Hwud|0=a0|rri&ftamhZGukf=W zq8`eV^$1*fO*{bm82ixOF)_wMhhz+fNj=3R`vrB48E36-)UXx#0Vv+OBu;Hyn6YD4>_ZwO+f*|!?q5X{``iEZHeD0 z&~$(W&kMfvY&nTjZ;!Km>}%Y9%Zpf-m63fetLN}BWopXjV<7=I$xIyz8l=UCPHEj0 zOv6%de_3E5W<|FOx&YFEy?kZ+wz9`4yvMJiBGF_(${20o6J4NBqMpdg%HdE0UU1^n z70H_;=-fZP1+y$rz!Fnw^lkfhSm4k zR6kVK7MT{7_na!X{cCY8@rrM^{<*HP2pY)A_{Y0)8x*DFeGmkgGIG|3r7Fh1thea+ zR{}&eBWKTJI(=_ae5gu6SG&Z_VgzV*jifbI&yB`th_cqi&Wbd+Z%4JU7Dqj8|o*(y3w3 zIsNLO^_X#yQ87B3`SK`gb%w*bLdjx+T14JUPI#5zhkC|EEKR`_X2+4e`M^Z5MxS@}t}R&=QH*{?CXmSJUOflNAVKC}@Vcd;8~CFArwb*LBZR^7+dile+3 zY48U1lALVgEhE$PT$n&l9Tv*qCny5}&TsACw>b|Y90b$5z+liw%y>VHfouuQD^OH!=(JC}{7>jYuhX1*Rsy`?uQyQ>pGuCNlu0=BaLuyl+#5XBaCeDt?;XlmLNMt-wIx+>*KUCEQ3W zIsc2BYuJ*VYX&U&B~=@sS9f>nH`qkhT9TRt6^3-)Q_|r>j8muODZ4y7OgoQ4PY0@< zCA#Y#$qBjbMK_HE>&iqmCAHG^wE$QKrl^!|IZyQtDn8vHVzo(rY;24@U3cPmfbiUa z#fklfhKBJp$Nfs`E$^CbQ_|8-fgSczN$5s0C?tNGgu^i zH6Og-u=y*9THs+{O_T!)%{JDQ3-0dWYVtb)SI2kX3l|OHn-IEd-Gb=Yw2%mtSBL$i zxyKC*yrvg@feNy?MLb?7ZIV||P#9XWb9(tvlc_vUH*o*Z8*pFfNC$3afRCKD^IqQ}95556+aUStl z2z@gnC~fvpADyF}X3@t>zs}lt-bk?uZ+%Bh@;X(H zWt_a_Fm$e|WC$$Z4?s!gS#OhUC^XVK>>V4>V%mYKw*Ho8f6=25{yWGfp|$qe_}2lX zrtLu3Bd(RBdi6tiRi&Oo_XI^Yr6=EizA0v3x?;D1Iz&fH@m6dcP;V|f@ZUvbz9Sn@ zOQ41|tB+QGU%4to}s_0R{BduRz}lc$LtmCjUbzlx_p9 zD}|8PVo>}aemF6askC=x#%Upi9OHBnXuC=Mue(9RGXcL8s z4I>OHS2^lO9uD%ZJa1OoVt0!Iz3JefYNw<$!&}>r=`y-68c2{%u0QMd{M%&t+hqCw dnk=i4nmAi}`vK7=@as|;>&xg%Wf$C@{0B*RqT~Po literal 0 HcmV?d00001 diff --git a/.github/graphics/schemaspy.png b/.github/graphics/schemaspy.png new file mode 100644 index 0000000000000000000000000000000000000000..53fe254f40ba615f91e22e36864a5e50cad0bdab GIT binary patch literal 53909 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 Im94}759Pd!RR910 literal 0 HcmV?d00001 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..dcb35417 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,43 @@ + + +# Description + +Please provide a summary of the change and the issue fixed. Please include relevant context. List dependency changes. + +Fixes # (issue) + +## Type of change + +Please delete options that are not relevant. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] This change requires a documentation update + +# How Has This Been Tested? + +Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration + +- [ ] Test A +- [ ] Test B + + +## Checklist + + + + +- [ ] I have read the [CONTRIBUTING](CONTRIBUTING.md) doc +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have already been accepted and merged + + +## Further comments + + diff --git a/.github/workflows/.deployer-db.yml b/.github/workflows/.deployer-db.yml new file mode 100644 index 00000000..6ea7090e --- /dev/null +++ b/.github/workflows/.deployer-db.yml @@ -0,0 +1,159 @@ +name: .Database Deploy + +on: + workflow_call: + inputs: ### Required + directory: + description: Crunchy Chart directory + default: 'charts/crunchy' + required: false + type: string + oc_server: + default: https://api.silver.devops.gov.bc.ca:6443 + description: 'OpenShift server' + required: false + type: string + environment: + description: Environment name; omit for PRs + required: false + type: string + s3_enabled: + description: Enable S3 backups + required: false + type: boolean + values: + description: 'Values file' + default: 'values.yaml' + required: false + type: string + enabled: + description: 'Enable the deployment of the crunchy database, easy switch to turn it on/off' + default: true + required: false + type: boolean + triggers: + description: Paths used to trigger a deployment; e.g. ('./backend/' './frontend/) + required: false + type: string + + secrets: + oc_namespace: + description: OpenShift namespace + required: true + oc_token: + description: OpenShift token + required: true + s3_access_key: + description: S3 access key + required: false + s3_secret_key: + description: S3 secret key + required: false + s3_bucket: + description: S3 bucket + required: false + s3_endpoint: + description: S3 endpoint + required: false +jobs: + deploy_db: + runs-on: ubuntu-24.04 + if: ${{ inputs.enabled }} + name: Crunchy (db) + environment: ${{ inputs.environment }} + steps: + # Check triggers (omitted or matched) for deployment + - uses: bcgov-nr/action-diff-triggers@v0.2.0 + id: triggers + with: + triggers: ${{ inputs.triggers }} + + - uses: actions/checkout@v4 + if: steps.triggers.outputs.triggered == 'true' + + - name: Install CLI tools from OpenShift Mirror + if: steps.triggers.outputs.triggered == 'true' + uses: redhat-actions/openshift-tools-installer@v1 + with: + oc: "4.14.37" + + - name: Validate Inputs + if: steps.triggers.outputs.triggered == 'true' && inputs.s3_enabled + shell: bash + run: | + echo "S3 ie enabled for backups, checking for mandatory secrets" + if [ ! "${{ secrets.s3_access_key }}" ]; then + echo "S3 access key not found" + exit 1 + fi + if [ ! "${{ secrets.s3_secret_key }}" ]; then + echo "S3 secret key not found" + exit 1 + fi + if [ ! "${{ secrets.s3_bucket }}" ]; then + echo "S3 bucket not found" + exit 1 + fi + if [ ! "${{ secrets.s3_endpoint }}" ]; then + echo "S3 endpoint not found" + exit 1 + fi + + - name: OC Login + if: steps.triggers.outputs.triggered == 'true' + shell: bash + run: | + # OC Login + OC_TEMP_TOKEN=$(curl -k -X POST ${{ inputs.oc_server }}/api/v1/namespaces/${{ secrets.oc_namespace }}/serviceaccounts/pipeline/token --header "Authorization: Bearer ${{ secrets.oc_token }}" -d '{"spec": {"expirationSeconds": 600}}' -H 'Content-Type: application/json; charset=utf-8' | jq -r '.status.token' ) + + oc login --token=$OC_TEMP_TOKEN --server=${{ inputs.oc_server }} + oc project ${{ secrets.oc_namespace }} # Safeguard! + + - name: Deploy Database + if: steps.triggers.outputs.triggered == 'true' + working-directory: ${{ inputs.directory }} + shell: bash + run: | + echo 'Deploying crunchy helm chart' + if [ ${{ inputs.s3_enabled }} == true ]; then + helm upgrade --install --wait --set crunchy.pgBackRest.s3.enabled=true \ + --set-string crunchy.pgBackRest.s3.accessKey=${{ secrets.s3_access_key }} \ + --set-string crunchy.pgBackRest.s3.secretKey=${{ secrets.s3_secret_key }} \ + --set-string crunchy.pgBackRest.s3.bucket=${{ secrets.s3_bucket }} \ + --set-string crunchy.pgBackRest.s3.endpoint=${{ secrets.s3_endpoint }} \ + --values ${{ inputs.values }} postgres . + else + helm upgrade --install --wait --values ${{ inputs.values }} postgres . + fi + + - name: Add PR specific user to Crunchy DB # only for PRs + shell: bash + if: github.event_name == 'pull_request' && steps.triggers.outputs.triggered == 'true' + run: | + echo 'Adding PR specific user to Crunchy DB' + NEW_USER='{"databases":["app-${{ github.event.number }}"],"name":"app-${{ github.event.number }}"}' + CURRENT_USERS=$(oc get PostgresCluster/postgres-crunchy -o json | jq '.spec.users') + echo "${CURRENT_USERS}" + + # check if current_users already contains the new_user + if echo "${CURRENT_USERS}" | jq -e ".[] | select(.name == \"app-${{ github.event.number }}\")" > /dev/null; then + echo "User already exists" + exit 0 + fi + + UPDATED_USERS=$(echo "${CURRENT_USERS}" | jq --argjson NEW_USER "${NEW_USER}" '. + [$NEW_USER]') + PATCH_JSON=$(jq -n --argjson users "${UPDATED_USERS}" '{"spec": {"users": $users}}') + oc patch PostgresCluster/postgres-crunchy --type=merge -p "${PATCH_JSON}" + + # wait for sometime as it takes time to create the user, query the secret and check if it is created, otherwise wait in a loop for 5 rounds + for i in {1..5}; do + if oc get secret postgres-crunchy-pguser-app-${{ github.event.number }} -o jsonpath='{.metadata.name}' > /dev/null; then + echo "Secret created" + break + else + echo "Secret not created, waiting for 60 seconds" + sleep 60 + fi + done + + diff --git a/.github/workflows/.deployer.yml b/.github/workflows/.deployer.yml new file mode 100644 index 00000000..89001327 --- /dev/null +++ b/.github/workflows/.deployer.yml @@ -0,0 +1,205 @@ +name: .Helm Deployer + +on: + workflow_call: + inputs: + ### Required + # Only secrets! + + ### Typical / recommended + atomic: + description: Atomic deployment? That means fail all or nothing + default: true + required: false + type: string + directory: + description: Chart directory + default: 'charts/app' + required: false + type: string + environment: + description: Environment name; omit for PRs + required: false + type: string + oc_server: + default: https://api.silver.devops.gov.bc.ca:6443 + description: 'OpenShift server' + required: false + type: string + params: + description: 'Extra parameters to pass to helm upgrade' + default: '' + required: false + type: string + tag: + description: Specify a tag to deploy; defaults to PR number + required: false + type: string + triggers: + description: Paths used to trigger a deployment; e.g. ('./backend/' './frontend/) + required: false + type: string + db_user: + description: The database user + required: false + type: string + + ### Usually a bad idea / not recommended + timeout-minutes: + description: 'Timeout minutes' + default: 10 + required: false + type: number + values: + description: 'Values file' + default: 'values.yaml' + required: false + type: string + + outputs: + triggered: + description: 'Has a deployment has been triggered?' + value: ${{ jobs.deployer.outputs.triggered }} + + secrets: + oc_namespace: + description: OpenShift namespace + required: true + oc_token: + description: OpenShift token + required: true + +jobs: + deployer-db: + name: Database + uses: ./.github/workflows/.deployer-db.yml + secrets: + oc_namespace: ${{ secrets.OC_NAMESPACE }} + oc_token: ${{ secrets.OC_TOKEN }} + with: + environment: ${{ inputs.environment }} + triggers: ${{ inputs.triggers }} + + deployer: + name: Stack + needs: deployer-db + environment: ${{ inputs.environment }} + runs-on: ubuntu-24.04 + outputs: + triggered: ${{ steps.triggers.outputs.triggered }} + steps: + ### Triggers, tag and release + + # Check triggers (omitted or matched) for deployment + - uses: bcgov-nr/action-diff-triggers@v0.2.0 + id: triggers + with: + triggers: ${{ inputs.triggers }} + + # Variables + - if: ${{ steps.triggers.outputs.triggered == 'true' && inputs.tag == '' }} + id: pr + uses: bcgov-nr/action-get-pr@v0.0.1 + - if: steps.triggers.outputs.triggered == 'true' + id: vars + run: | + # Vars: tag and release + + # Tag defaults to PR number, but can be overridden by inputs.tag + tag=${{ inputs.tag || steps.pr.outputs.pr }} + + # Release name includes run numbers to ensure uniqueness + release=${{ github.event.repository.name }}-${{ inputs.environment || steps.pr.outputs.pr || inputs.tag }} + + # version, to support helm packaging for non-pr based releases (workflow_dispatch). default to 1.0.0+github run number + version=1.0.0+${{ github.run_number }} + + # Summary + echo "tag=${tag}" + echo "release=${release}" + echo "version=${version}" + + # Output + echo "tag=${tag}" >> $GITHUB_OUTPUT + echo "release=${release}" >> $GITHUB_OUTPUT + echo "version=${version}" >> $GITHUB_OUTPUT + + ### Deploy + - name: Install CLI tools from OpenShift Mirror + if: steps.triggers.outputs.triggered == 'true' + uses: redhat-actions/openshift-tools-installer@v1 + with: + oc: "4" + + # OC login and acquire short lived token + - if: steps.triggers.outputs.triggered == 'true' + shell: bash + run: | + # OC Login + OC_TEMP_TOKEN=$(curl -k -X POST ${{ inputs.oc_server }}/api/v1/namespaces/${{ secrets.oc_namespace }}/serviceaccounts/pipeline/token --header "Authorization: Bearer ${{ secrets.oc_token }}" -d '{"spec": {"expirationSeconds": 600}}' -H 'Content-Type: application/json; charset=utf-8' | jq -r '.status.token' ) + + oc login --token=$OC_TEMP_TOKEN --server=${{ inputs.oc_server }} + oc project ${{ secrets.oc_namespace }} # Safeguard! + + # Only stop pre-existing deployments on PRs (status = pending-upgrade) + - if: steps.triggers.outputs.triggered == 'true' && github.event_name == 'pull_request' + run: | + # Interrupt any previous deployments (PR only) + PREVIOUS=$(helm status ${{ steps.vars.outputs.release }} -o json | jq .info.status || true) + if [[ ${PREVIOUS} =~ pending ]]; then + echo "Rollback triggered" + helm rollback ${{ steps.vars.outputs.release }} || \ + helm uninstall ${{ steps.vars.outputs.release }} + fi + + # Package Helm chart + - if: steps.triggers.outputs.triggered == 'true' + uses: actions/checkout@v4 + - if: steps.triggers.outputs.triggered == 'true' + working-directory: ${{ inputs.directory }} + run: | + # Helm package + sed -i 's/^name:.*/name: ${{ github.event.repository.name }}/' Chart.yaml + helm package -u . --app-version="tag-${{ steps.vars.outputs.tag }}_run-${{ github.run_number }}" --version=${{ steps.pr.outputs.pr || steps.vars.outputs.version }} + + # Deploy Helm chart as atomic, with timeout + - if: steps.triggers.outputs.triggered == 'true' && inputs.atomic != 'false' + working-directory: ${{ inputs.directory }} + run: | + # Helm upgrade/rollout - atomic, timeout + helm upgrade \ + --set-string global.repository=${{ github.repository }} \ + --set-string global.tag=${{ steps.vars.outputs.tag }} \ + --set-string global.config.databaseUser=${{ inputs.db_user }} \ + ${{ inputs.params }} \ + --install --wait --atomic ${{ steps.vars.outputs.release }} \ + --timeout ${{ inputs.timeout-minutes }}m \ + --values ${{ inputs.values }} \ + ./${{ github.event.repository.name }}-${{ steps.pr.outputs.pr || steps.vars.outputs.version }}.tgz + + # Deploy Helm chart without atomic or timeout + - if: steps.triggers.outputs.triggered == 'true' && inputs.atomic == 'false' + working-directory: ${{ inputs.directory }} + run: | + # Helm upgrade/rollout - non-atomic, no timeout + helm upgrade \ + --set-string global.repository=${{ github.repository }} \ + --set-string global.tag=${{ steps.vars.outputs.tag }} \ + ${{ inputs.params }} \ + ${{ steps.vars.outputs.release }} \ + --install --wait --values ${{ inputs.values }} \ + ./${{ github.event.repository.name }}-${{ steps.pr.outputs.pr || steps.vars.outputs.version }}.tgz + + # Helm release history + - if: steps.triggers.outputs.triggered == 'true' + run: | + # Helm release history + helm history ${{ steps.vars.outputs.release }} + + ### Cleanup + + # Completed pod cleanup + - if: steps.triggers.outputs.triggered == 'true' + run: | + # Completed pod cleanup + oc delete po --field-selector=status.phase==Succeeded || true diff --git a/.github/workflows/.tests.yml b/.github/workflows/.tests.yml new file mode 100644 index 00000000..6bbf53c1 --- /dev/null +++ b/.github/workflows/.tests.yml @@ -0,0 +1,100 @@ +name: .Tests + +on: + workflow_call: + inputs: + ### Required + target: + description: PR number, test or prod + required: true + type: string + + ### Typical / recommended + triggers: + description: Bash array to diff for build triggering; omit to always fire + required: false + type: string + +env: + DOMAIN: apps.silver.devops.gov.bc.ca + PREFIX: ${{ github.event.repository.name }}-${{ inputs.target }} + +jobs: + integration-tests: + name: Integration + runs-on: ubuntu-24.04 + timeout-minutes: 1 + steps: + - uses: actions/checkout@v4 + - id: cache-npm + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-build-cache-node-modules-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-cache-node-modules- + ${{ runner.os }}-build- + ${{ runner.os }}- + + - env: + API_NAME: nest + BASE_URL: https://${{ github.event.repository.name }}-${{ inputs.target }}-frontend.${{ env.DOMAIN }} + run: | + cd tests/integration + npm ci + node src/main.js + + e2e-tests: + name: E2E + defaults: + run: + working-directory: frontend + runs-on: ubuntu-24.04 + timeout-minutes: 5 + strategy: + matrix: + project: [ chromium, Google Chrome, firefox, safari, Microsoft Edge ] + steps: + - uses: actions/checkout@v4 + name: Checkout + - uses: actions/setup-node@v4 + name: Setup Node + with: + node-version: 20 + cache: 'npm' + cache-dependency-path: frontend/package-lock.json + - name: Install dependencies + run: | + npm ci + npx playwright install --with-deps + + - name: Run Tests + env: + E2E_BASE_URL: https://${{ github.event.repository.name }}-${{ inputs.target }}-frontend.${{ env.DOMAIN }}/ + CI: 'true' + run: | + npx playwright test --project="${{ matrix.project }}" --reporter=html + + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + name: upload results + with: + name: playwright-report-${{ matrix.project }} + path: "./frontend/playwright-report" # path from current folder + retention-days: 7 + + load-tests: + name: Load + runs-on: ubuntu-24.04 + strategy: + matrix: + name: [backend, frontend] + steps: + - uses: actions/checkout@v4 + - uses: grafana/k6-action@v0.3.1 + env: + BACKEND_URL: https://${{ env.PREFIX }}-frontend.${{ env.DOMAIN }}/api + FRONTEND_URL: https://${{ env.PREFIX }}-frontend.${{ env.DOMAIN }} + with: + filename: ./tests/load/${{ matrix.name }}-test.js + flags: --vus 10 --duration 30s diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml new file mode 100644 index 00000000..82dd03b3 --- /dev/null +++ b/.github/workflows/analysis.yml @@ -0,0 +1,91 @@ +name: Analysis + +on: + push: + branches: [main] + pull_request: + types: [opened, reopened, synchronize, ready_for_review, converted_to_draft] + schedule: + - cron: "0 11 * * 0" # 3 AM PST = 12 PM UDT, runs sundays + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + tests: + name: Tests + if: ${{ ! github.event.pull_request.draft }} + runs-on: ubuntu-24.04 + timeout-minutes: 5 + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: postgres + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + strategy: + matrix: + dir: [backend, frontend] + include: + - dir: backend + token: SONAR_TOKEN_BACKEND + - dir: frontend + token: SONAR_TOKEN_FRONTEND + steps: + - uses: bcgov-nr/action-test-and-analyse@v1.2.1 + with: + commands: | + npm ci + npm run test:cov + dir: ${{ matrix.dir }} + node_version: "22" + sonar_args: > + -Dsonar.exclusions=**/coverage/**,**/node_modules/**,**/*spec.ts + -Dsonar.organization=bcgov-sonarcloud + -Dsonar.projectKey=quickstart-openshift_${{ matrix.dir }} + -Dsonar.sources=src + -Dsonar.tests.inclusions=**/*spec.ts + -Dsonar.javascript.lcov.reportPaths=./coverage/lcov.info + sonar_token: ${{ secrets[matrix.token] }} + triggers: ('${{ matrix.dir }}/') + + # https://github.com/marketplace/actions/aqua-security-trivy + trivy: + name: Trivy Security Scan + if: ${{ ! github.event.pull_request.draft }} + runs-on: ubuntu-24.04 + timeout-minutes: 1 + steps: + - uses: actions/checkout@v4 + - name: Run Trivy vulnerability scanner in repo mode + uses: aquasecurity/trivy-action@0.29.0 + with: + format: "sarif" + output: "trivy-results.sarif" + ignore-unfixed: true + scan-type: "fs" + scanners: "vuln,secret,config" + severity: "CRITICAL,HIGH" + + - name: Upload Trivy scan results to GitHub Security tab + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: "trivy-results.sarif" + + results: + name: Analysis Results + needs: [tests] # Restore trivy when/if fixed + if: always() + runs-on: ubuntu-24.04 + steps: + - if: contains(needs.*.result, 'failure')||contains(needs.*.result, 'canceled') + run: echo "At least one job has failed." && exit 1 + - run: echo "Success!" diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml new file mode 100644 index 00000000..49203cd8 --- /dev/null +++ b/.github/workflows/demo.yml @@ -0,0 +1,41 @@ +name: DEMO Route + +on: + pull_request: + types: [labeled] + workflow_dispatch: + inputs: + target: + description: 'PR number to receive DEMO URL routing' + required: true + type: number + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +jobs: + demo-routing: + name: DEMO Routing + if: ${{ github.event_name == 'workflow_dispatch' || github.event.label.name == 'demo' }} + env: + DEST: demo + DOMAIN: apps.silver.devops.gov.bc.ca + REPO: ${{ github.event.repository.name }} + runs-on: ubuntu-latest + steps: + - name: Point DEMO URL to Existing Service + run: | + # Set Up Routing + + # OC Login + OC_TEMP_TOKEN=$(curl -k -X POST ${{ vars.oc_server }}/api/v1/namespaces/${{ secrets.oc_namespace }}/serviceaccounts/pipeline/token --header "Authorization: Bearer ${{ secrets.oc_token }}" -d '{"spec": {"expirationSeconds": 600}}' -H 'Content-Type: application/json; charset=utf-8' | jq -r '.status.token' ) + + oc login --token=$OC_TEMP_TOKEN --server=${{ vars.oc_server }} + oc project ${{ secrets.oc_namespace }} #Safeguard! + + # Delete and replace route + oc delete route/${{ env.REPO }}-${{ env.DEST }} --ignore-not-found=true + oc create route edge ${{ env.REPO }}-${{ env.DEST }} \ + --hostname=${{ env.REPO }}-${{ env.DEST }}.${{ env.DOMAIN }} \ + --service=${{ env.REPO }}-${{ github.event.number || inputs.target }}-frontend diff --git a/.github/workflows/merge.yml b/.github/workflows/merge.yml new file mode 100644 index 00000000..9ebd34b8 --- /dev/null +++ b/.github/workflows/merge.yml @@ -0,0 +1,88 @@ +name: Merge + +on: + push: + branches: [main] + paths-ignore: + - '*.md' + - '.github/**' + - '.github/graphics/**' + - '!.github/workflows/**' + workflow_dispatch: + inputs: + tag: + description: "Image tag set to deploy; e.g. PR number or prod" + type: string + default: 'prod' + +concurrency: + # Do not interrupt previous workflows + group: ${{ github.workflow }} + cancel-in-progress: false + +jobs: + vars: + name: Set Variables + outputs: + tag: ${{ steps.tag.outputs.tag }} + runs-on: ubuntu-24.04 + timeout-minutes: 1 + steps: + # Get PR number for squash merges to main + - name: PR Number + if: ${{ ! inputs.tag }} + id: pr + uses: bcgov-nr/action-get-pr@v0.0.1 + + - name: Set Tag + id: tag + run: echo "tag=${{ inputs.tag || steps.pr.outputs.pr }}" >> $GITHUB_OUTPUT + + # https://github.com/bcgov/quickstart-openshift-helpers + deploy-test: + name: Deploy (test, tag=${{ needs.vars.outputs.tag }}) + needs: [vars] + uses: ./.github/workflows/.deployer.yml + secrets: + oc_namespace: ${{ secrets.OC_NAMESPACE }} + oc_token: ${{ secrets.OC_TOKEN }} + with: + environment: test + db_user: app + tag: ${{ needs.vars.outputs.tag }} + + deploy-prod: + name: Deploy (prod, tag=${{ needs.vars.outputs.tag }}) + needs: [deploy-test, vars] + uses: ./.github/workflows/.deployer.yml + secrets: + oc_namespace: ${{ secrets.OC_NAMESPACE }} + oc_token: ${{ secrets.OC_TOKEN }} + with: + environment: prod + db_user: app + params: + --set backend.deploymentStrategy=RollingUpdate + --set frontend.deploymentStrategy=RollingUpdate + --set global.autoscaling=true + --set frontend.pdb.enabled=true + --set backend.pdb.enabled=true + tag: ${{ needs.vars.outputs.tag }} + + promote: + name: Promote Images + needs: [deploy-prod, vars] + runs-on: ubuntu-24.04 + permissions: + packages: write + strategy: + matrix: + package: [migrations, backend, frontend] + timeout-minutes: 1 + steps: + - uses: shrink/actions-docker-registry-tag@v4 + with: + registry: ghcr.io + repository: ${{ github.repository }}/${{ matrix.package }} + target: ${{ needs.vars.outputs.tag }} + tags: prod diff --git a/.github/workflows/notifications.yml b/.github/workflows/notifications.yml new file mode 100644 index 00000000..cce7c1db --- /dev/null +++ b/.github/workflows/notifications.yml @@ -0,0 +1,72 @@ +name: Notifications +on: + workflow_run: + workflows: [PR,Merge] + types: + - completed +jobs: + troubleshoot: + runs-on: ubuntu-24.04 + steps: + - run: echo "${{ vars.MS_TEAMS_WEBHOOK_URI }}" + + notify-teams-pr: + if: ${{github.event.workflow_run.event == 'pull_request' && vars.MS_TEAMS_WEBHOOK_URI != null}} + runs-on: ubuntu-24.04 + steps: + - uses: simbo/msteams-message-card-action@latest + if: ${{ vars.MS_TEAMS_WEBHOOK_URI != null}} + with: + webhook: ${{ vars.MS_TEAMS_WEBHOOK_URI }} + title: "${{github.event.workflow_run.head_commit.message}}" + message: "${{github.event.workflow_run.head_commit.message}}" + color: 'dodger blue' + buttons: | + Pull Request ${{github.event.workflow_run.pull_requests[0].number}} ${{github.event.workflow_run.repository.html_url}}/pull/${{github.event.workflow_run.pull_requests[0].number}} + Diff ${{github.event.workflow_run.repository.html_url}}/pull/${{github.event.workflow_run.pull_requests[0].number}}/files + sections: | + - + activity: + title: ${{github.event.workflow_run.head_commit.committer.name}} + subtitle: ${{github.event.workflow_run.head_commit.timestamp}} + image: ${{github.event.workflow_run.head_repository.owner.avatar_url}} + text: PR Opened + notify-teams-merged: + if: ${{github.event.workflow_run.event == 'push' && vars.MS_TEAMS_WEBHOOK_URI != null}} + runs-on: ubuntu-24.04 + steps: + - name: PR Number + if: ${{ vars.MS_TEAMS_WEBHOOK_URI != null }} + id: pr + shell: bash + run: | + pr=$(\ + curl -sL -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${{ github.repository }}/commits/${{ github.event.workflow_run.head_sha }}/pulls \ + | jq .[0].number + ) + if [ -z "${pr}" ] + then + echo "No PR number found. Was this push triggered by a squashed PR merge?" + pr="" + fi + echo "pr=${pr}" >> $GITHUB_OUTPUT + - uses: simbo/msteams-message-card-action@latest + if: ${{ vars.MS_TEAMS_WEBHOOK_URI }} + with: + webhook: ${{ vars.MS_TEAMS_WEBHOOK_URI != null }} + title: "${{github.event.workflow_run.head_commit.message}}" + message: "${{github.event.workflow_run.head_commit.message}}" + color: 'dark orange' + summary: "${{github.event.workflow_run.event}}-${{github.event.workflow_run.status}}" + buttons: | + Pull Request ${{steps.pr.outputs.pr}} ${{github.event.workflow_run.repository.html_url}}/pull/${{steps.pr.outputs.pr}} + Diff ${{github.event.workflow_run.repository.html_url}}/pull/${{steps.pr.outputs.pr}}/files + sections: | + - + activity: + title: ${{github.event.workflow_run.head_commit.committer.name}} + subtitle: ${{github.event.workflow_run.head_commit.timestamp}} + image: ${{github.event.workflow_run.head_repository.owner.avatar_url}} + text: Merged diff --git a/.github/workflows/pr-close.yml b/.github/workflows/pr-close.yml new file mode 100644 index 00000000..17b4d248 --- /dev/null +++ b/.github/workflows/pr-close.yml @@ -0,0 +1,74 @@ +name: PR Closed + +on: + pull_request: + types: [closed] + +concurrency: + # PR open and close use the same group, allowing only one at a time + group: ${{ github.event.number }} + cancel-in-progress: true + +jobs: + cleanup: + name: Cleanup and Images + uses: bcgov/quickstart-openshift-helpers/.github/workflows/.pr-close.yml@v0.8.3 + secrets: + oc_namespace: ${{ secrets.OC_NAMESPACE }} + oc_token: ${{ secrets.OC_TOKEN }} + with: + cleanup: helm + packages: backend frontend migrations + + cleanup_db: # TODO move it off to another action later. + name: Remove DB User from crunchy + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - name: Install CLI tools from OpenShift Mirror + uses: redhat-actions/openshift-tools-installer@v1 + with: + oc: "4.14.37" + + - name: OC Login + shell: bash + run: | + # OC Login + OC_TEMP_TOKEN=$(curl -k -X POST https://api.silver.devops.gov.bc.ca:6443/api/v1/namespaces/${{ secrets.oc_namespace }}/serviceaccounts/pipeline/token --header "Authorization: Bearer ${{ secrets.oc_token }}" -d '{"spec": {"expirationSeconds": 600}}' -H 'Content-Type: application/json; charset=utf-8' | jq -r '.status.token' ) + + oc login --token=$OC_TEMP_TOKEN --server=https://api.silver.devops.gov.bc.ca:6443 + oc project ${{ secrets.oc_namespace }} # Safeguard! + + - name: Remove PR user and database from crunchy + shell: bash + run: | + # check if postgres-crunchy exists or else exit + oc get PostgresCluster/postgres-crunchy || exit 0 + + # Remove the user from the crunchy cluster yaml and apply the changes + USER_TO_REMOVE='{"databases":["app-${{ github.event.number }}"],"name":"app-${{ github.event.number }}"}' + + echo 'getting current users from crunchy' + CURRENT_USERS=$(oc get PostgresCluster/postgres-crunchy -o json | jq '.spec.users') + echo "${CURRENT_USERS}" + + # Remove the user from the list, + UPDATED_USERS=$(echo "${CURRENT_USERS}" | jq --argjson user "${USER_TO_REMOVE}" 'map(select(. != $user))') + + PATCH_JSON=$(jq -n --argjson users "${UPDATED_USERS}" '{"spec": {"users": $users}}') + oc patch PostgresCluster/postgres-crunchy --type=merge -p "${PATCH_JSON}" + + # get primary crunchy pod and remove the role and db + CRUNCHY_PG_PRIMARY_POD_NAME=$(oc get pods -l postgres-operator.crunchydata.com/role=master -o json | jq -r '.items[0].metadata.name') + + echo "${CRUNCHY_PG_PRIMARY_POD_NAME}" + # Terminate all connections to the database before trying terminate + oc exec "${CRUNCHY_PG_PRIMARY_POD_NAME}" -- psql -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'app-${{ github.event.number }}' AND pid <> pg_backend_pid();" + + # Drop the database and role + oc exec "${CRUNCHY_PG_PRIMARY_POD_NAME}" -- psql -c "DROP DATABASE \"app-${{ github.event.number }}\" --cascade" + oc exec "${CRUNCHY_PG_PRIMARY_POD_NAME}" -- psql -c "DROP ROLE \"app-${{ github.event.number }}\" --cascade" + echo 'database and role deleted' + + exit 0 + diff --git a/.github/workflows/pr-open.yml b/.github/workflows/pr-open.yml new file mode 100644 index 00000000..f4b7134e --- /dev/null +++ b/.github/workflows/pr-open.yml @@ -0,0 +1,58 @@ +name: PR + +on: + pull_request: + +concurrency: + # Cancel in progress for PR open and close + group: ${{ github.event.number }} + cancel-in-progress: true + +jobs: + # https://github.com/bcgov-nr/action-builder-ghcr + builds: + name: Builds + runs-on: ubuntu-24.04 + strategy: + matrix: + package: [backend, frontend, migrations] + timeout-minutes: 10 + steps: + - uses: bcgov-nr/action-builder-ghcr@v2.3.0 + with: + keep_versions: 50 + package: ${{ matrix.package }} + tag: ${{ github.event.number }} + tag_fallback: latest + triggers: ('${{ matrix.package }}/') + + # https://github.com/bcgov/quickstart-openshift-helpers + deploys: + name: Deploys (${{ github.event.number }}) + needs: [builds] + uses: ./.github/workflows/.deployer.yml + secrets: + oc_namespace: ${{ secrets.OC_NAMESPACE }} + oc_token: ${{ secrets.OC_TOKEN }} + with: + triggers: ('backend/' 'frontend/' 'migrations/' 'charts/') + db_user: app-${{github.event.number}} + params: --set global.secrets.persist=false + + tests: + name: Tests (${{ github.event.number }}) + if: needs.deploys.outputs.triggered == 'true' + needs: [deploys] + uses: ./.github/workflows/.tests.yml + with: + target: ${{ github.event.number }} + + results: + name: PR Results + needs: [builds, deploys, tests] + if: always() + runs-on: ubuntu-24.04 + steps: + - if: contains(needs.*.result, 'failure')||contains(needs.*.result, 'canceled') + run: echo "At least one job has failed." && exit 1 + - run: echo "Success!" diff --git a/.github/workflows/pr-validate.yml b/.github/workflows/pr-validate.yml new file mode 100644 index 00000000..bc444044 --- /dev/null +++ b/.github/workflows/pr-validate.yml @@ -0,0 +1,27 @@ +name: PR Validate + +on: + pull_request: + types: [edited, opened, synchronize, reopened, ready_for_review] + +concurrency: + group: ${{ github.workflow }}-edit-${{ github.event.number }} + cancel-in-progress: true + +jobs: + validate: + name: Validate PR + if: (! github.event.pull_request.draft) + uses: bcgov/quickstart-openshift-helpers/.github/workflows/.pr-validate.yml@v0.8.3 + with: + markdown_links: | + - [Frontend](https://${{ github.event.repository.name }}-${{ github.event.number }}-frontend.apps.silver.devops.gov.bc.ca) + - [Backend](https://${{ github.event.repository.name }}-${{ github.event.number }}-frontend.apps.silver.devops.gov.bc.ca/api) + + results: + name: Validate Results + if: always() + needs: [validate] + runs-on: ubuntu-24.04 + steps: + - run: echo "Success!" diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml new file mode 100644 index 00000000..4509f477 --- /dev/null +++ b/.github/workflows/scheduled.yml @@ -0,0 +1,93 @@ +name: Scheduled + +on: + schedule: [cron: "0 11 * * 6"] # 3 AM PST = 12 PM UDT, Saturdays + workflow_dispatch: + workflow_call: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + ageOutPRs: + name: PR Env Purge + env: + # https://tecadmin.net/getting-yesterdays-date-in-bash/ + CUTOFF: "1 week ago" + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Clean up Helm Releases + run: | + # OC Login + OC_TEMP_TOKEN=$(curl -k -X POST ${{ vars.oc_server }}/api/v1/namespaces/${{ secrets.oc_namespace }}/serviceaccounts/pipeline/token --header "Authorization: Bearer ${{ secrets.oc_token }}" -d '{"spec": {"expirationSeconds": 600}}' -H 'Content-Type: application/json; charset=utf-8' | jq -r '.status.token' ) + + oc login --token=$OC_TEMP_TOKEN --server=${{ vars.oc_server }} + oc project ${{ secrets.OC_NAMESPACE }} # Safeguard! + + # Catch errors, unset variables, and pipe failures (e.g. grep || true ) + set -euo pipefail + + # Echos + echo "Delete stale Helm releases" + echo "Cutoff: ${{ env.CUTOFF }}" + + # Before date, list of releases + BEFORE=$(date +%s -d "${{ env.CUTOFF }}") + RELEASES=$(helm ls -aq | grep ${{ github.event.repository.name }} || :) + + # If releases, then iterate + [ -z "${RELEASES}" ]|| for r in ${RELEASES[@]}; do + + # Get last update and convert the date + UPDATED=$(date "+%s" -d <<< echo $(helm status $r -o json | jq -r .info.last_deployed)) + + # Compare to cutoff and delete as necessary + if [[ ${UPDATED} < ${BEFORE} ]]; then + echo -e "\nOlder than cutoff: ${r}" + helm uninstall --no-hooks ${r} + oc delete pvc/${r}-bitnami-pg-0 || true + else + echo -e "\nNewer than cutoff: ${r}" + echo "No need to delete" + fi + done + + # https://github.com/bcgov/quickstart-openshift-helpers + schema-spy: + name: SchemaSpy Documentation + uses: bcgov/quickstart-openshift-helpers/.github/workflows/.schema-spy.yml@v0.9.0 + + + tests: + name: Tests + uses: ./.github/workflows/.tests.yml + with: + target: test + + # Run sequentially to reduce chances of rate limiting + zap_scan: + runs-on: ubuntu-latest + name: ZAP Scans + env: + DOMAIN: apps.silver.devops.gov.bc.ca + PREFIX: ${{ github.event.repository.name }}-test + steps: + - name: ZAP Scan + uses: zaproxy/action-full-scan@v0.12.0 + with: + allow_issue_writing: true + artifact_name: "zap_backend" + cmd_options: "-a" + issue_title: "ZAP: Backend" + target: https://${{ env.PREFIX }}-frontend.${{ env.DOMAIN }}/api + + - name: ZAP Scan - Frontend + uses: zaproxy/action-full-scan@v0.12.0 + with: + allow_issue_writing: true + artifact_name: "zap_frontend" + cmd_options: "-a" + issue_title: "ZAP: Frontend" + target: https://${{ env.PREFIX }}-frontend.${{ env.DOMAIN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..4ab6b31c --- /dev/null +++ b/.gitignore @@ -0,0 +1,367 @@ +### Generated ### +# Created by https://www.toptal.com/developers/gitignore/api/node,java,python,go +# Edit at https://www.toptal.com/developers/gitignore?templates=node,java,python,go + +### Go ### +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* + +### Node ### +# Logs +logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov +lcov.* + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test +.vscode/ + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### Python Patch ### +# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration +poetry.toml + +# ruff +.ruff_cache/ + +# LSP config files +pyrightconfig.json + +# End of https://www.toptal.com/developers/gitignore/api/node,java,python,go +.idea +*.key +*.pem +*.pub \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..6f5be045 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,132 @@ +# Contributor Covenant Code of Conduct + +## Overview + +Act in the best interests of the community, the government of British Columbia and your fellow collaborators. We welcome and appreciate your contributions, in any capacity. + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +derek.roberts@gmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/COMPLIANCE.yaml b/COMPLIANCE.yaml new file mode 100644 index 00000000..f18d0a7a --- /dev/null +++ b/COMPLIANCE.yaml @@ -0,0 +1,11 @@ +name: compliance +description: | + This document is used to track a projects PIA and STRA + compliance. +spec: + - name: PIA + status: not-required + last-updated: '2022-01-26T23:07:19.992Z' + - name: STRA + status: not-required + last-updated: '2022-01-26T23:07:19.992Z' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..5628e47a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# How to contribute + +Government employees, public and members of the private sector are encouraged to contribute to the repository by **creating a branch and submitting a pull request**. Outside forks come with permissions complications, but can still be accepted. + +(If you are new to GitHub, you might start with a [basic tutorial](https://help.github.com/articles/set-up-git) and check out a more detailed guide to [pull requests](https://help.github.com/articles/using-pull-requests/).) + +Pull requests will be evaluated by the repository guardians on a schedule and if deemed beneficial will be committed to the main branch. + +All contributors retain the original copyright to their stuff, but by contributing to this project, you grant a world-wide, royalty-free, perpetual, irrevocable, non-exclusive, transferable license to all users **under the terms of the [license](./LICENSE.md) under which this project is distributed**. diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..fe0c038e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2024 Province of British Columbia + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 00000000..322f4b80 --- /dev/null +++ b/README.md @@ -0,0 +1,399 @@ +[![MIT License](https://img.shields.io/github/license/bcgov/quickstart-openshift.svg)](/LICENSE) +[![Lifecycle](https://img.shields.io/badge/Lifecycle-Experimental-339999)](https://github.com/bcgov/repomountie/blob/master/doc/lifecycle-badges.md) + +[![Merge](https://github.com/bcgov/quickstart-openshift/actions/workflows/merge.yml/badge.svg)](https://github.com/bcgov/quickstart-openshift/actions/workflows/merge.yml) +[![Analysis](https://github.com/bcgov/quickstart-openshift/actions/workflows/analysis.yml/badge.svg)](https://github.com/bcgov/quickstart-openshift/actions/workflows/analysis.yml) +[![Scheduled](https://github.com/bcgov/quickstart-openshift/actions/workflows/scheduled.yml/badge.svg)](https://github.com/bcgov/quickstart-openshift/actions/workflows/scheduled.yml) + +Frontend (JavaScript/TypeScript) + +[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=bugs)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=coverage)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Duplicated Lines](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_frontend&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_frontend) + +Backend (JavaScript/TypeScript) + +[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=bugs)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=coverage)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Duplicated Lines](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=quickstart-openshift_backend&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=quickstart-openshift_backend) + +# QuickStart for OpenShift + +## Pull Request-Based Workflows with Sample Stack + +The is a fully functional set of [GitHub Actions](https://github.com/bcgov/quickstart-openshift/actions) workflows and a starter application stack intended to help Agile teams hit the ground running. + +Features: +* Pull Request-based pipeline +* Sandboxed development environments +* Gateable production deployments +* Container publishing (ghcr.io) and importing (OpenShift) +* Security, vulnerability, infrastructure, and container scan tools +* Automatic dependency patching available from [bcgov/renovate-config](https://github.com/bcgov/renovate-config) +* Enforced code reviews and workflow jobs (pass|fail) +* Helm Package Manager for atomic deployments +* Prometheus Metrics export from Backend/Frontend +* Resource Tuning with Horizontal Pod Autoscaler (TEST/PROD only) +* Affinity and anti-affinity for Scheduling on different worker nodes +* Rolling updates with zero downtime in PROD +* Database Migrations with Flyway +* Pod disruption budgets for high availability +* Self-healing through with probes/checks (startup, readiness, liveness) +* Point the long-lived DEMO route to PRs by using the `demo` label +* Sample application stack: + * Database: Crunchy(Postgres, PostGIS), backups, Flyway + * Frontend: TypeScript, Caddy Server + * Backend: TypeScript, Nest.js + * Alternative backend examples - see [Alternative Backends](#alternative-backends) + +# Setup + +Initial setup is intended to take an hour or less. This depends greatly on intended complexity, features selected/excluded and outside cooperation. + +## Prerequisites + +The following are required: + +* BC Government IDIR accounts for anyone submitting requests +* [GitHub accounts](https://github.com/signup) for all participating team members +* Membership in the BCGov GitHub organization + * Provide GitHub IDs to [BCGov's Just Ask](https://just-ask.developer.gov.bc.ca/) +* OpenShift project namespaces: + * [BCGov signup](https://registry.developer.gov.bc.ca) + +## Using this Template + +Create a new repository using this repository as a template. + +* Verify bcgov/quickstart-openshift is selected under Repository template + +![](./.github/graphics/template.png) + +## Secrets and Variables + +Variables and secrets are consumed by workflows. Environments provide their own values, overriding default sets. + +Secrets are hidden from logs and outputs, while variables are visible. Using secrets exclusively can make troubeshooting more difficult. + +Note: Dependabot, which we don't recommend as highly as Renovate, requires its own set of variables. + +### Secrets Values + +> Click Settings > Secrets and Variables > Actions > Secrets > New repository secret + +**OC_TOKEN** + +OpenShift token, different for every project/namespace. This guide assumes your OpenShift platform team has provisioned a pipeline account. + +* Consume: `{{ secrets.OC_TOKEN }}` + +Locate an OpenShift pipeline token: + +1. Login to your OpenShift cluster, e.g.: [Gold](https://console.apps.gold.devops.gov.bc.ca/) or [Silver](https://console.apps.silver.devops.gov.bc.ca/) +2. Select your DEV namespace +3. Click Workloads > Secrets (under Workloads for Administrator view) +4. Select `pipeline-token-...` or a similarly privileged token +5. Under Data, copy `token` +6. Paste into the GitHub Secret `OC_TOKEN` + +**OC_NAMESPACE** + +OpenShift project/namespace. Provided by your OpenShift platform team. + +* Consume: `{{ secrets.OC_NAMESPACE }}` +* Value: format `abc123-dev | test | prod` + +**SONAR_TOKEN(s)** + +If SonarCloud is being used each application will have its own token. Single-application repositories typically use `${{ secrets.SONAR_TOKEN }}`, while monorepos use similar names. + +E.g.: +* `${{ secrets.SONAR_TOKEN_BACKEND }}` +* `${{ secrets.SONAR_TOKEN_FRONTEND }}` + +BC Government employees can request SonarCloud projects by creating an [issue](https://github.com/BCDevOps/devops-requests/issues/new/choose) with BCDevOps. Please make sure to request a monorepo with component names (e.g. backend, frontend), which may not be explained in their directions. + +### Variable Values + +> Click Settings > Secrets and Variables > Actions > Variables > New repository variable + +**OC_SERVER** + +OpenShift server address. +* Consume: `{{ vars.OC_SERVER }}` +* Value: `https://api.gold.devops.gov.bc.ca:6443` or `https://api.silver.devops.gov.bc.ca:6443` + +**MS_TEAMS_WEBHOOK_URI** +* Consume: `{{ vars.MS_TEAMS_WEBHOOK_URI }}` +* Value: ![https://learn.microsoft.com/en-us/microsoftteams/platform/assets/images/create-incoming-webhook.gif](https://learn.microsoft.com/en-us/microsoftteams/platform/assets/images/create-incoming-webhook.gif) +* Refrence: 'https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet' & 'https://learn.microsoft.com/en-us/outlook/actionable-messages/message-card-reference' + +## Environments + +Environments are groups of secrets and variables that can be gatekept. This includes limting access to certain users or requiring manual approval before a requesting workflow can run. Environment values override any default values. + +For pull requests and development surrounding lower-level, sandboxed environments it is best not to use an environment at all. Higher level environments, like TEST and PROD, will override those values as necessary. + +> Click Settings > Environments > New environment + +Environments provide a [number of features](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment), including: + +* Required reviewers +* Wait timer +* Deployment branches + +## Updating Dependencies + +Dependabot and Mend Renovate can both provide dependency updates using pull requests. Dependabot is simpler to configure, while Renovate is much more configurable and lighter on resources. + +### Renovate + +A config file (`renovate.json`) is included with this template. It can source config from our [renovate repository](https://github.com/bcgov/renovate-config). Renovate can be [self-hosted](https://github.com/renovatebot/github-action) or run using the GitHub App managed at the organization level. For BC Government the OCIO controls this application, so please opt in with them using a GitHub issue. + +To opt-in: +* Visit the [Renovate GitHub App](https://github.com/apps/renovate/) +* Click `Configure` and set up your repository +* Visit [BCDevOps Requests](https://github.com/BCDevOps/devops-requests) +* Select [Issues](https://github.com/BCDevOps/devops-requests/issues) +* Select [New Issue](https://github.com/BCDevOps/devops-requests/issues/new/choose) +* Select [Request for integrating a GitHub App](https://github.com/BCDevOps/devops-requests/issues/new?assignees=MonicaG%2C+oomIRL%2C+SHIHO-I&labels=github-app%2C+pending&projects=&template=github_integration_request.md&title=) +* Create a meaningful title, e.g. `Request to add X repo to Renovate App` +* Fill out the description providing a repository name +* Select "Submit new issue" +* Wait for Renovate to start sending pull requests to your repository + +### Dependabot + +Dependabot is no longer recommended as an alternative to Renovate for generating security, vulnerability and dependency pull requests. It can still be used to generate warnings under the GitHub Security tab, which is only viewable by repository administrators. + +## Repository Configuration + +### Pull Request Handling + +Squash merging is recommended for simplified history and ease of rollback. Cleaning up merged branches is recommended for your DevOps Specialist's fragile sanity. + +> Click Settings > General (selected automatically) + +Pull Requests: + +* `[uncheck] Allow merge commits` +* `[check] Allow squash merging` + * `Default to pull request title` +* `[uncheck] Allow rebase merging` +* `[check] Always suggest updating pull request branches` +* `[uncheck] Allow auto-merge` +* `[check] Automatically delete head branches` + +### Packages + +Packages are available from your repository (link on right). All should have visibility set to public for the workflows to run successfully. + +E.g. https://github.com/bcgov/quickstart-openshift/packages + +### Branch Protection Rules + +This is required to prevent direct pushes and merges to the default branch. These steps must be run after one full pull request pipeline has been run to populate the required status checks. + +1. Select `Settings` (gear, top right) > `Rules` > `Rulesets` (under Code and Automation) +2. Click `New ruleset` > `New branch ruleset` +3. Setup Ruleset: + * Ruleset Name: `main` + * Enforcement status: `Active` + * Bypass list: + * Click `+ Add bypass` + * Check `[x] Repository admin` + * Click `Add selected` + * Target branches: + * Click `Add target` + * Select `Add default branch` + * Branch protections: + * `[x] Restrict deletions` + * `[x] Require linear history` + * `[x] Require a pull request before merging` + * Additional settings: + * `Require approvals: 1` (or more!) + * `[x] Require conversation resolution before merging` + * `[x] Require status checks to pass` + * `[x] Require branches to be up to date before merging` + * Required checks: *These will be populated after a full pull request pipeline run!* + * Click `+Add checks` + * This is our default set, yours may differ: + * `Analysis Results` + * `PR Results` + * `Validate Results` + * `[x] Block force pushes` + * `[x] Require code scanning results` + * Click `+ Add tool` + * This is our default set, yours may differ: + * `CodeQL` + * `Trivy` + * Click `Create` + +#### Status checks example +![](./.github/graphics/branch-protection.png) + +#### Required tools and alerts example +![](./.github/graphics/branch-code-results.png) + + +### Adding Team Members + +Don't forget to add your team members! + +1. Select Settings (gear, top right) *> Collaborators and teams (under `Access`) +2. Click `Add people` or `Add teams` +3. Use the search box to find people or teams +4. Choose a role (read, triage, write, maintain, admin) +5. Click Add + +# Workflows + +## Pull Request + +Runs on pull request submission. + +* Provides safe, sandboxed deployment environments +* Build action pushes to GitHub Container Registry (ghcr.io) +* Build triggers select new builds vs reusing builds +* Deploy only when changes are made +* Deployment includes curl checks and optional penetration tests +* Run tests (e2e, load, integration) when changes are made +* Other checks and updates as required + +![](.github/graphics/pr-open.png) + +## Validation + +Runs on pull request submission. + +* Enforces conventional commits in PR title +* Adds greetings/directions to PR descriptions + +![](.github/graphics/pr-validate.png) + + +## Analysis + +Runs on pull request submission or merge to the default branch. + +* Unit tests (should include coverage) +* CodeQL/GitHub security reporting (now handled as GitHub default!) +* Trivy password, vulnerability and security scanning + +![](.github/graphics/analysis.png) + +## Pull Request Closed + +Runs on pull request close or merge. + +* Cleans up OpenShift objects/artifacts +* Merge retags successful build images as `latest` + +![](.github/graphics/pr-close.png) + +## Merge + +Runs on merge to main branch. + +* Code scanning and reporting to GitHub Security overview +* Zero-downtime* TEST deployment +* Penetration tests on TEST deployment (optional) +* Zero-downtime* PROD deployment +* Labels successful deployment images as PROD + +\* excludes database changes + +![](.github/graphics/merge.png) + +## Scheduled + +Runs on scheduled job (cronjob) or workflow dispatch. + +* PR environment purge +* Generate SchemaSpy documentation +* Tests (e2e, load, integration) on TEST deployment + +![](.github/graphics/scheduled.png) + +## DEMO Routing + +There is a long-lived custom route available to be assigned to specific Pull Request deployments. Add the label `demo` to that pull request or run the `DEMO Route` workflow. + +Typical route: `https://-demo.apps.silver.devops.gov.bc.ca` + +#### PR Label + +Please note that the label must be manually created using GitHub's web interface. + +![](.github/graphics/demo-label.png) + +#### Workflow +![](.github/graphics/workflow.png) + + +# App Stack + +## Starter + +The starter stack includes a frontend (React, MUI, Vite, Caddy), backend (Nest/Node) and postgres or postgis database. See subfolder for source, including Dockerfiles and OpenShift templates. Alternative backends are available. + +Features: +* [TypeScript](https://www.typescriptlang.org/) strong-typing for JavaScript +* [NestJS](https://docs.nestjs.com) Nest/Node backend and frontend +* [Flyway](https://flywaydb.org/) database migrations +* [Crunchy](https://www.crunchydata.com/products/crunchy-postgresql-for-kubernetes) Postgres/Postgis Database + +Postgis is default. Switch to Postgres by removing the image names in [crunchy helm chart values](./charts/crunchy/values.yaml) + +## Crunchy + +Crunchy is the default choice for HA postgres/postgis DB in BCGov. provided chart is to get up and going fast, it is upto teams to fine tune resource allocation and patroni parameters of crunchy DB to get the best out of database. + +* For specifying different resources for different envs, just add values-test.yml and values-prod.yml , then provide them to the [DB Deployer in GHA](.github/workflows/.deployer-db.yml#L24). +* For enabling S3 backups/recovery, please enable in [values file](./charts/crunchy/values.yaml#L62), and in the [DB Deployer in GHA](.github/workflows/.deployer-db.yml#L20), then provide necessary secret values which are prefixed with `s3` [DB Deployer in GHA](.github/workflows/.deployer-db.yml#L36) +* To disable crunchy deployment, make the following changes + * make crunchy enabled to false in [values.yaml](./charts/app/values.yaml#L117) + * make bitnami postgis enabled to true in [values.yaml](./charts/app/values.yaml#L120) + * make the db-deployer false in gha workflow [.deployer-db.yaml](./.github/workflows/.deployer-db.yml#L31) + +## Alternative Backends + +The sample Java, Python and Go backends repository has been archived, but we have lots of other great examples of active projects you can learn from! + +* [NR-RFC-AlertAuthoring - Python with FastAPI and Alembic](https://github.com/bcgov/nr-rfc-alertauthoring) +* [QuickStart OpenShift Backends](https://github.com/bcgov/quickstart-openshift-backends) + +## SchemaSpy + +The database documentation is created and deployed to GitHub pages. See [here](https://bcgov.github.io/quickstart-openshift/schemaspy/index.html). + +After a full workflow run and merge can been run, please do the following: + +1. Select Settings (gear, top right) *> Pages (under `Code and automation`) +2. Click `Branch` or `Add teams` +3. Select `gh-pages` +4. Click `Save` + +![img.png](.github/graphics/schemaspy.png) + +# Resources + +This repository is provided by NRIDS Architecture and Forestry Digital Services, courtesy of the Government of British Columbia. + +* NRID's [Kickstarter Guide](https://bcgov.github.io/nr-architecture-patterns-library/docs/Agile%20Team%20Kickstarter) (via. Confluence, links may be internal) + +# Contributing + +Please contribute your ideas! [Issues](/../../issues) and [Pull Requests](/../../pulls) are appreciated. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..d45a1626 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,10 @@ +# Security Policy + +## Supported Versions + +This product currently has no support and is experimental. That could change in future. + + +## Reporting a Vulnerability + +Please report any issues or vulerabilities with an [issue](https://github.com/bcgov/quickstart-openshift/issues). diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 00000000..daff023b --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,24 @@ +# Standard exclusions +*.md +.git +.github +.idea +.vscode +Dockerfile +CODE_OF_CONDUCT* +CONTRIBUTING* +LICENSE* +SECURITY* + +# Node exclusions +dist +node_modules + +# App-specific exclusions +coverage +cypress +e2e +migrations +output +test +tests diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 00000000..2daf5417 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,37 @@ +# Build +FROM node:22.12.0-slim AS build + +# Copy, build static files; see .dockerignore for exclusions +WORKDIR /app +COPY . ./ +ENV PRISMA_CLI_BINARY_TARGETS=debian-openssl-3.0.x +RUN npm run deploy + +# Dependencies +FROM node:22.12.0-slim AS dependencies + +# Copy, build static files; see .dockerignore for exclusions +WORKDIR /app +COPY . ./ +ENV PRISMA_CLI_BINARY_TARGETS=debian-openssl-3.0.x +RUN npm ci --ignore-scripts --no-update-notifier --omit=dev + +# Deploy using minimal Distroless image +FROM gcr.io/distroless/nodejs22-debian12:nonroot +ENV NODE_ENV=production + +# Copy app and dependencies +WORKDIR /app +COPY --from=dependencies /app/node_modules ./node_modules +COPY --from=build /app/node_modules/@prisma ./node_modules/@prisma +COPY --from=build /app/node_modules/.prisma ./node_modules/.prisma +COPY --from=build /app/node_modules/prisma ./node_modules/prisma +COPY --from=build /app/dist ./dist + +# Boilerplate, not used in OpenShift/Kubernetes +EXPOSE 3000 +HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000/api + +# Nonroot user, limit heap size to 50 MB +USER nonroot +CMD ["--max-old-space-size=50", "/app/dist/main"] diff --git a/backend/nest-cli.json b/backend/nest-cli.json new file mode 100644 index 00000000..0a947a58 --- /dev/null +++ b/backend/nest-cli.json @@ -0,0 +1,8 @@ +{ + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "builder": "swc", + "typeCheck": true + } +} diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 00000000..7e799851 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,12614 @@ +{ + "name": "backend", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "license": "Apache-2.0", + "dependencies": { + "@nestjs/cli": "^10.4.9", + "@nestjs/common": "^10.4.15", + "@nestjs/config": "^3.3.0", + "@nestjs/core": "^10.4.15", + "@nestjs/platform-express": "^10.4.15", + "@nestjs/schematics": "^10.2.3", + "@nestjs/swagger": "^8.1.0", + "@nestjs/terminus": "^10.2.3", + "@nestjs/testing": "^10.4.15", + "@prisma/client": "^5.7.0", + "dotenv": "^16.0.1", + "express-prom-bundle": "^8.0.0", + "helmet": "^8.0.0", + "nest-winston": "^1.9.7", + "nestjs-prisma": "^0.23.0", + "pg": "^8.11.3", + "prom-client": "^15.1.0", + "reflect-metadata": "^0.2.0", + "rimraf": "^6.0.0", + "rxjs": "^7.8.0", + "swagger-ui-express": "^5.0.0", + "winston": "^3.17.0" + }, + "devDependencies": { + "@swc/cli": "^0.5.0", + "@swc/core": "^1.9.1", + "@types/express": "^5.0.0", + "@types/node": "^22.0.0", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "@vitest/coverage-v8": "^2.1.8", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-promise": "^6.1.1", + "istanbul-badges-readme": "^1.9.0", + "lint-staged": "^15.2.4", + "prettier": "^3.0.3", + "prisma": "^5.7.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-loader": "^9.5.0", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.2.2", + "unplugin-swc": "^1.5.1", + "vitest": "^2.1.8", + "vitest-sonar-reporter": "^2.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.3.11", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.8", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli": { + "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.11.tgz", + "integrity": "sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "ansi-colors": "4.1.3", + "inquirer": "9.2.15", + "symbol-observable": "4.0.0", + "yargs-parser": "21.1.1" + }, + "bin": { + "schematics": "bin/schematics.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { + "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", + "license": "MIT", + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@angular-devkit/schematics-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@ljharb/through": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", + "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "license": "MIT" + }, + "node_modules/@napi-rs/nice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", + "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", + "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", + "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", + "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", + "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", + "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nestjs/cli": { + "version": "10.4.9", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.9.tgz", + "integrity": "sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "@angular-devkit/schematics-cli": "17.3.11", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.6.0", + "cli-table3": "0.6.5", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "9.0.2", + "glob": "10.4.5", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.2.0", + "typescript": "5.7.2", + "webpack": "5.97.1", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16.14" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.15.tgz", + "integrity": "sha512-vaLg1ZgwhG29BuLDxPA9OAcIlgqzp9/N8iG0wGapyUNTf4IY4O6zAHgN6QalwLhFxq7nOI021vdRojR1oF3bqg==", + "license": "MIT", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.3.0.tgz", + "integrity": "sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==", + "license": "MIT", + "dependencies": { + "dotenv": "16.4.5", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/core": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.15.tgz", + "integrity": "sha512-UBejmdiYwaH6fTsz2QFBlC1cJHM+3UDeLZN+CiP9I1fRv2KlBZsmozGLbV5eS1JAVWJB4T5N5yQ0gjN8ZvcS2w==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.3.0", + "tslib": "2.8.1", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12 || ^0.2.0", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/mapped-types": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.6.tgz", + "integrity": "sha512-84ze+CPfp1OWdpRi1/lOu59hOhTz38eVzJvRKrg9ykRFwDz+XleKfMsG0gUqNZYFa6v53XYzeD+xItt8uDW7NQ==", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.15.tgz", + "integrity": "sha512-63ZZPkXHjoDyO7ahGOVcybZCRa7/Scp6mObQKjcX/fTEq1YJeU75ELvMsuQgc8U2opMGOBD7GVuc4DV0oeDHoA==", + "license": "MIT", + "dependencies": { + "body-parser": "1.20.3", + "cors": "2.8.5", + "express": "4.21.2", + "multer": "1.4.4-lts.1", + "tslib": "2.8.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.3.11", + "@angular-devkit/schematics": "17.3.11", + "comment-json": "4.2.5", + "jsonc-parser": "3.3.1", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/@nestjs/swagger": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-8.1.0.tgz", + "integrity": "sha512-8hzH+r/31XshzXHC9vww4T0xjDAxMzvOaT1xAOvvY1LtXTWyNRCUP2iQsCYJOnnMrR+vydWjvRZiuB3hdvaHxA==", + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "^0.15.0", + "@nestjs/mapped-types": "2.0.6", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.3.0", + "swagger-ui-dist": "5.18.2" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0 || ^7.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/terminus": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/terminus/-/terminus-10.2.3.tgz", + "integrity": "sha512-iX7gXtAooePcyQqFt57aDke5MzgdkBeYgF5YsFNNFwOiAFdIQEhfv3PR0G+HlH9F6D7nBCDZt9U87Pks/qHijg==", + "license": "MIT", + "dependencies": { + "boxen": "5.1.2", + "check-disk-space": "3.4.0" + }, + "peerDependencies": { + "@grpc/grpc-js": "*", + "@grpc/proto-loader": "*", + "@mikro-orm/core": "*", + "@mikro-orm/nestjs": "*", + "@nestjs/axios": "^1.0.0 || ^2.0.0 || ^3.0.0", + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "@nestjs/microservices": "^9.0.0 || ^10.0.0", + "@nestjs/mongoose": "^9.0.0 || ^10.0.0", + "@nestjs/sequelize": "^9.0.0 || ^10.0.0", + "@nestjs/typeorm": "^9.0.0 || ^10.0.0", + "@prisma/client": "*", + "mongoose": "*", + "reflect-metadata": "0.1.x || 0.2.x", + "rxjs": "7.x", + "sequelize": "*", + "typeorm": "*" + }, + "peerDependenciesMeta": { + "@grpc/grpc-js": { + "optional": true + }, + "@grpc/proto-loader": { + "optional": true + }, + "@mikro-orm/core": { + "optional": true + }, + "@mikro-orm/nestjs": { + "optional": true + }, + "@nestjs/axios": { + "optional": true + }, + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/mongoose": { + "optional": true + }, + "@nestjs/sequelize": { + "optional": true + }, + "@nestjs/typeorm": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "mongoose": { + "optional": true + }, + "sequelize": { + "optional": true + }, + "typeorm": { + "optional": true + } + } + }, + "node_modules/@nestjs/testing": { + "version": "10.4.15", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.15.tgz", + "integrity": "sha512-eGlWESkACMKti+iZk1hs6FUY/UqObmMaa8HAN9JLnaYkoLf1Jeh+EuHlGnfqo/Rq77oznNLIyaA3PFjrFDlNUg==", + "license": "MIT", + "dependencies": { + "tslib": "2.8.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@prisma/client": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.22.0.tgz", + "integrity": "sha512-M0SVXfyHnQREBKxCgyo7sffrKttwE6R8PMq330MIUF0pTwjUhLbW84pFDlf06B27XyCR++VtjugEnIHdr07SVA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.22.0.tgz", + "integrity": "sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.22.0.tgz", + "integrity": "sha512-UNjfslWhAt06kVL3CjkuYpHAWSO6L4kDCVPegV6itt7nD1kSJavd3vhgAEhjglLJJKEdJ7oIqDJ+yHk6qO8gPA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.22.0", + "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "@prisma/fetch-engine": "5.22.0", + "@prisma/get-platform": "5.22.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2.tgz", + "integrity": "sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.22.0.tgz", + "integrity": "sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.22.0", + "@prisma/engines-version": "5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2", + "@prisma/get-platform": "5.22.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.22.0.tgz", + "integrity": "sha512-pHhpQdr1UPFpt+zFfnPazhulaZYCUqeIcPpJViYoq9R+D/yw4fjE+CtnsnKzPYm0ddUbeXUzjGVGIRVgPDCk4Q==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.22.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", + "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", + "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", + "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", + "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", + "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", + "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", + "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", + "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", + "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", + "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", + "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", + "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", + "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", + "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", + "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", + "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", + "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", + "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, + "node_modules/@schematics/angular": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.11.tgz", + "integrity": "sha512-imKBnKYEse0SBVELZO/753nkpt3eEgpjrYkB+AFWF9YfO/4RGnYXDHoH8CFkzxPH9QQCgNrmsVFNiYGS+P/S1A==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "@angular-devkit/schematics": "13.3.11", + "jsonc-parser": "3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "license": "MIT", + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@schematics/angular/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "license": "MIT" + }, + "node_modules/@schematics/angular/node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/@schematics/angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@schematics/angular/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@schematics/angular/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@swc/cli": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.5.1.tgz", + "integrity": "sha512-sxSXyjqFImYrqjhZSPymjmM/9V6auZG67UsDwbe7FZaBlyfW8ka3QG/zRjpJJ9+8Ahns/kKb8bXPKQq7V2MtBw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@swc/counter": "^0.1.3", + "@xhmikosr/bin-wrapper": "^13.0.5", + "commander": "^8.3.0", + "fast-glob": "^3.2.5", + "minimatch": "^9.0.3", + "piscina": "^4.3.0", + "semver": "^7.3.8", + "slash": "3.0.0", + "source-map": "^0.7.3" + }, + "bin": { + "spack": "bin/spack.js", + "swc": "bin/swc.js", + "swcx": "bin/swcx.js" + }, + "engines": { + "node": ">= 16.14.0" + }, + "peerDependencies": { + "@swc/core": "^1.2.66", + "chokidar": "^3.5.1" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@swc/cli/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@swc/core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.9.3.tgz", + "integrity": "sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg==", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.17" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.9.3", + "@swc/core-darwin-x64": "1.9.3", + "@swc/core-linux-arm-gnueabihf": "1.9.3", + "@swc/core-linux-arm64-gnu": "1.9.3", + "@swc/core-linux-arm64-musl": "1.9.3", + "@swc/core-linux-x64-gnu": "1.9.3", + "@swc/core-linux-x64-musl": "1.9.3", + "@swc/core-win32-arm64-msvc": "1.9.3", + "@swc/core-win32-ia32-msvc": "1.9.3", + "@swc/core-win32-x64-msvc": "1.9.3" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz", + "integrity": "sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.9.3.tgz", + "integrity": "sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.3.tgz", + "integrity": "sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.3.tgz", + "integrity": "sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.3.tgz", + "integrity": "sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz", + "integrity": "sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz", + "integrity": "sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.3.tgz", + "integrity": "sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.3.tgz", + "integrity": "sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.3.tgz", + "integrity": "sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", + "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.2.tgz", + "integrity": "sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/qs": { + "version": "6.9.17", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", + "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.8.tgz", + "integrity": "sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.8", + "vitest": "2.1.8" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-v8/node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.8", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.8", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xhmikosr/archive-type": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/archive-type/-/archive-type-7.0.0.tgz", + "integrity": "sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "file-type": "^19.0.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/@xhmikosr/bin-check": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-check/-/bin-check-7.0.3.tgz", + "integrity": "sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "isexe": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/bin-wrapper": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@xhmikosr/bin-wrapper/-/bin-wrapper-13.0.5.tgz", + "integrity": "sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/bin-check": "^7.0.3", + "@xhmikosr/downloader": "^15.0.1", + "@xhmikosr/os-filter-obj": "^3.0.0", + "bin-version-check": "^5.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress/-/decompress-10.0.1.tgz", + "integrity": "sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/decompress-tar": "^8.0.1", + "@xhmikosr/decompress-tarbz2": "^8.0.1", + "@xhmikosr/decompress-targz": "^8.0.1", + "@xhmikosr/decompress-unzip": "^7.0.0", + "graceful-fs": "^4.2.11", + "make-dir": "^4.0.0", + "strip-dirs": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress-tar": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tar/-/decompress-tar-8.0.1.tgz", + "integrity": "sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "file-type": "^19.0.0", + "is-stream": "^2.0.1", + "tar-stream": "^3.1.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress-tarbz2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-tarbz2/-/decompress-tarbz2-8.0.1.tgz", + "integrity": "sha512-OF+6DysDZP5YTDO8uHuGG6fMGZjc+HszFPBkVltjoje2Cf60hjBg/YP5OQndW1hfwVWOdP7f3CnJiPZHJUTtEg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/decompress-tar": "^8.0.1", + "file-type": "^19.0.0", + "is-stream": "^2.0.1", + "seek-bzip": "^2.0.0", + "unbzip2-stream": "^1.4.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress-targz": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-targz/-/decompress-targz-8.0.1.tgz", + "integrity": "sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/decompress-tar": "^8.0.1", + "file-type": "^19.0.0", + "is-stream": "^2.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/decompress-unzip": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/decompress-unzip/-/decompress-unzip-7.0.0.tgz", + "integrity": "sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "file-type": "^19.0.0", + "get-stream": "^6.0.1", + "yauzl": "^3.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/downloader": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@xhmikosr/downloader/-/downloader-15.0.1.tgz", + "integrity": "sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@xhmikosr/archive-type": "^7.0.0", + "@xhmikosr/decompress": "^10.0.1", + "content-disposition": "^0.5.4", + "defaults": "^3.0.0", + "ext-name": "^5.0.0", + "file-type": "^19.0.0", + "filenamify": "^6.0.0", + "get-stream": "^6.0.1", + "got": "^13.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@xhmikosr/os-filter-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@xhmikosr/os-filter-obj/-/os-filter-obj-3.0.0.tgz", + "integrity": "sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "arch": "^3.0.0" + }, + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/arch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-3.0.0.tgz", + "integrity": "sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bin-version": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz", + "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "find-versions": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bin-version-check": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", + "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "bin-version": "^6.0.0", + "semver": "^7.5.3", + "semver-truncate": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bintrees": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", + "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/check-disk-space": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/check-disk-space/-/check-disk-space-3.4.0.tgz", + "integrity": "sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-3.0.0.tgz", + "integrity": "sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.67", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", + "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-prom-bundle": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/express-prom-bundle/-/express-prom-bundle-8.0.0.tgz", + "integrity": "sha512-UHdpaMks6Z/tvxQsNzhsE7nkdXb4/zEh/jwN0tfZSZOEF+aD0dlfl085EU4jveOq09v01c5sIUfjV4kJODZ2eQ==", + "license": "MIT", + "dependencies": { + "@types/express": "^5.0.0", + "on-finished": "^2.3.0", + "url-value-parser": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "prom-client": ">=15.0.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-type": { + "version": "19.6.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", + "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "get-stream": "^9.0.1", + "strtok3": "^9.0.1", + "token-types": "^6.0.0", + "uint8array-extras": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-type/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filename-reserved-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filenamify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-6.0.0.tgz", + "integrity": "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^3.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^8.2.0", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/formidable": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz", + "integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^2.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", + "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.0.0.tgz", + "integrity": "sha512-VyusHLEIIO5mjQPUI1wpOAEu+wl6Q0998jzTxqUYGE45xCIcAxy3MsbEK/yyJUJ3ADeMoB6MornPH6GMWAf+Pw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/hexoid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz", + "integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "devOptional": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inspect-with-kind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", + "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "kind-of": "^6.0.2" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-badges-readme": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/istanbul-badges-readme/-/istanbul-badges-readme-1.9.0.tgz", + "integrity": "sha512-sD9lTsFajcfK07euJReQ0C9dy0VmXViMDJk67EZseGRC+jv+esxt5I3Viqoi1b43m5in5ek5b+0rpxJi41bJVw==", + "dev": true, + "license": "MIT", + "bin": { + "istanbul-badges-readme": "lib/index.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.6", + "execa": "~8.0.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.5.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", + "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4-lts.1.tgz", + "integrity": "sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/nest-winston": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/nest-winston/-/nest-winston-1.9.7.tgz", + "integrity": "sha512-pTTgImRgv7urojsDvaTlenAjyJNLj7ywamfjzrhWKhLhp80AKLYNwf103dVHeqZWe+nzp/vd9DGRs/UN/YadOQ==", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.1.1" + }, + "peerDependencies": { + "@nestjs/common": "^5.0.0 || ^6.6.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "winston": "^3.0.0" + } + }, + "node_modules/nestjs-prisma": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/nestjs-prisma/-/nestjs-prisma-0.23.0.tgz", + "integrity": "sha512-0pIMDasayP+vMFSztcs85zu4WSPTKM85F8vIrqn7GsUBboEcKhI8eCeVghhNyKDGzEBaNAYNJlo2MAWdNuN7Tw==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "^13.3.0", + "@angular-devkit/schematics": "^13.3.0", + "@schematics/angular": "~13.3.0" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "@prisma/client": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "prisma": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/nestjs-prisma/node_modules/@angular-devkit/core": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz", + "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==", + "license": "MIT", + "dependencies": { + "ajv": "8.9.0", + "ajv-formats": "2.1.1", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.7", + "source-map": "0.7.3" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nestjs-prisma/node_modules/@angular-devkit/schematics": { + "version": "13.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.11.tgz", + "integrity": "sha512-ben+EGXpCrClnIVAAnEQmhQdKmnnqFhMp5BqMxgOslSYBAmCutLA6rBu5vsc8kZcGian1wt+lueF7G1Uk5cGBg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "13.3.11", + "jsonc-parser": "3.0.0", + "magic-string": "0.25.7", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^12.20.0 || ^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/nestjs-prisma/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/nestjs-prisma/node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "license": "MIT" + }, + "node_modules/nestjs-prisma/node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/nestjs-prisma/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/nestjs-prisma/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/nestjs-prisma/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/peek-readable": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz", + "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/pg": { + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/piscina": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.7.0.tgz", + "integrity": "sha512-b8hvkpp9zS0zsfa939b/jXbe64Z2gZv0Ha7FYPNUiDIB1y2AtxcOZdfP8xN8HFjUaqQiT9gRlfjAsoL8vdJ1Iw==", + "devOptional": true, + "license": "MIT", + "optionalDependencies": { + "@napi-rs/nice": "^1.0.1" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prisma": { + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.22.0.tgz", + "integrity": "sha512-vtpjW3XuYCSnMsNVBjLMNkTj6OZbudcPPTPYHqX0CJfpcdWciI1dM8uHETwmDxxiqEwCIE6WvXucWUetJgfu/A==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "5.22.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prom-client": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", + "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.4.0", + "tdigest": "^0.1.1" + }, + "engines": { + "node": "^16 || ^18 || >=20" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "devOptional": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/seek-bzip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-2.0.0.tgz", + "integrity": "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "commander": "^6.0.0" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-truncate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", + "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/streamx": { + "version": "2.20.2", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.2.tgz", + "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-3.0.0.tgz", + "integrity": "sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "inspect-with-kind": "^1.0.5", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strtok3": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", + "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.3.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^3.5.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/supertest": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.0.0.tgz", + "integrity": "sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^9.0.1" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz", + "integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==", + "license": "Apache-2.0", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, + "node_modules/swagger-ui-express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "license": "MIT", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tdigest": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", + "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "license": "MIT", + "dependencies": { + "bintrees": "1.0.2" + } + }, + "node_modules/terser": { + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", + "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tapable": "^2.2.1", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "license": "MIT", + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uint8array-extras": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", + "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.0.tgz", + "integrity": "sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin-swc": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/unplugin-swc/-/unplugin-swc-1.5.1.tgz", + "integrity": "sha512-/ZLrPNjChhGx3Z95pxJ4tQgfI6rWqukgYHKflrNB4zAV1izOQuDhkTn55JWeivpBxDCoK7M/TStb2aS/14PS/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "load-tsconfig": "^0.2.5", + "unplugin": "^1.11.0" + }, + "peerDependencies": { + "@swc/core": "^1.2.108" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-value-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/url-value-parser/-/url-value-parser-2.2.0.tgz", + "integrity": "sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest-sonar-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vitest-sonar-reporter/-/vitest-sonar-reporter-2.0.0.tgz", + "integrity": "sha512-LorC3NnmrBrryx4+l3BEsNQjD0Y7wfmrD1y/+tHDuZUuVj7w8nOxRXCBSppDfmgfpToOhwchh0JcL4IGMKUKDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "vitest": ">=1" + } + }, + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/wcwidth/node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.0.tgz", + "integrity": "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 00000000..c680ef59 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,85 @@ +{ + "author": "BC Government Forestry Suite of Applications Starter Template", + "license": "Apache-2.0", + "main": "index.js", + "scripts": { + "prisma-generate": "prisma generate", + "prebuild": "rimraf dist", + "build": "prisma generate && nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "deploy": "npm ci --ignore-scripts --no-update-notifier && npm run build", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "lint:staged": "./node_modules/.bin/lint-staged", + "make-badges": "istanbul-badges-readme --logo=vitest --exitCode=1", + "make-badges:ci": "npm run make-badges -- --ci", + "test": "vitest --dir src", + "test:cov": "vitest run --coverage", + "test:e2e": "vitest --dir test" + }, + "dependencies": { + "@nestjs/cli": "^10.4.9", + "@nestjs/common": "^10.4.15", + "@nestjs/config": "^3.3.0", + "@nestjs/core": "^10.4.15", + "@nestjs/platform-express": "^10.4.15", + "@nestjs/schematics": "^10.2.3", + "@nestjs/swagger": "^8.1.0", + "@nestjs/terminus": "^10.2.3", + "@nestjs/testing": "^10.4.15", + "@prisma/client": "^5.7.0", + "dotenv": "^16.0.1", + "express-prom-bundle": "^8.0.0", + "helmet": "^8.0.0", + "nest-winston": "^1.9.7", + "nestjs-prisma": "^0.23.0", + "pg": "^8.11.3", + "prom-client": "^15.1.0", + "reflect-metadata": "^0.2.0", + "rimraf": "^6.0.0", + "rxjs": "^7.8.0", + "swagger-ui-express": "^5.0.0", + "winston": "^3.17.0" + }, + "devDependencies": { + "@swc/cli": "^0.5.0", + "@swc/core": "^1.9.1", + "@types/express": "^5.0.0", + "@types/node": "^22.0.0", + "@types/supertest": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/parser": "^7.0.0", + "@vitest/coverage-v8": "^2.1.8", + "eslint": "^8.57.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-promise": "^6.1.1", + "istanbul-badges-readme": "^1.9.0", + "lint-staged": "^15.2.4", + "prettier": "^3.0.3", + "prisma": "^5.7.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-loader": "^9.5.0", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.2.2", + "unplugin-swc": "^1.5.1", + "vitest": "^2.1.8", + "vitest-sonar-reporter": "^2.0.0" + }, + "lint-staged": { + "*.{js,ts}": "./node_modules/.bin/eslint --cache --fix" + }, + "overrides": { + "minimist@<1.2.6": "1.2.6", + "reflect-metadata": "^0.2.0" + } +} diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma new file mode 100644 index 00000000..313b0378 --- /dev/null +++ b/backend/prisma/schema.prisma @@ -0,0 +1,16 @@ +generator client { + provider = "prisma-client-js" + previewFeatures = ["metrics"] + binaryTargets = ["native", "debian-openssl-3.0.x"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model users { + id Decimal @id(map: "USER_PK") @default(dbgenerated("nextval('\"USER_SEQ\"'::regclass)")) @db.Decimal + name String @db.VarChar(200) + email String @db.VarChar(200) +} diff --git a/backend/src/app.controller.spec.ts b/backend/src/app.controller.spec.ts new file mode 100644 index 00000000..722af674 --- /dev/null +++ b/backend/src/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello Backend!"', () => { + expect(appController.getHello()).toBe('Hello Backend!'); + }); + }); +}); diff --git a/backend/src/app.controller.ts b/backend/src/app.controller.ts new file mode 100644 index 00000000..cce879ee --- /dev/null +++ b/backend/src/app.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + constructor(private readonly appService: AppService) {} + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts new file mode 100644 index 00000000..472e5da0 --- /dev/null +++ b/backend/src/app.module.ts @@ -0,0 +1,57 @@ +import "dotenv/config"; +import { Logger, MiddlewareConsumer, Module, RequestMethod } from "@nestjs/common"; +import { HTTPLoggerMiddleware } from "./middleware/req.res.logger"; +import { loggingMiddleware, PrismaModule } from "nestjs-prisma"; +import { ConfigModule } from "@nestjs/config"; +import { UsersModule } from "./users/users.module"; +import { AppService } from "./app.service"; +import { AppController } from "./app.controller"; +import { MetricsController } from "./metrics.controller"; +import { TerminusModule } from '@nestjs/terminus'; +import { HealthController } from "./health.controller"; + +const DB_HOST = process.env.POSTGRES_HOST || "localhost"; +const DB_USER = process.env.POSTGRES_USER || "postgres"; +const DB_PWD = encodeURIComponent(process.env.POSTGRES_PASSWORD || "default"); // this needs to be encoded, if the password contains special characters it will break connection string. +const DB_PORT = process.env.POSTGRES_PORT || 5432; +const DB_NAME = process.env.POSTGRES_DATABASE || "postgres"; +const DB_SCHEMA = process.env.DB_SCHEMA || "users"; +const dataSourceURL = `postgresql://${DB_USER}:${DB_PWD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=${DB_SCHEMA}&connection_limit=5`; +function getMiddlewares() { + if (process.env.PRISMA_LOGGING) { + return [ + // configure your prisma middleware + loggingMiddleware({ + logger: new Logger("PrismaMiddleware"), + logLevel: "debug" + }) + ]; + } + return []; +} + +@Module({ + imports: [ + ConfigModule.forRoot(), + TerminusModule, + PrismaModule.forRoot({ + isGlobal: true, + prismaServiceOptions:{ + prismaOptions:{ + log: ["error", "warn"], + errorFormat: "pretty", + datasourceUrl: `postgresql://${DB_USER}:${DB_PWD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=${DB_SCHEMA}&connection_limit=5`, + }, + middlewares: getMiddlewares(), + }, + }), + UsersModule + ], + controllers: [AppController,MetricsController, HealthController], + providers: [AppService] +}) +export class AppModule { // let's add a middleware on all routes + configure(consumer: MiddlewareConsumer) { + consumer.apply(HTTPLoggerMiddleware).exclude({ path: 'metrics', method: RequestMethod.ALL }, { path: 'health', method: RequestMethod.ALL }).forRoutes('*'); + } +} diff --git a/backend/src/app.service.ts b/backend/src/app.service.ts new file mode 100644 index 00000000..8ce0cf3b --- /dev/null +++ b/backend/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from "@nestjs/common"; + +@Injectable() +export class AppService { + getHello(): string { + return "Hello Backend!"; + } +} diff --git a/backend/src/app.spec.ts b/backend/src/app.spec.ts new file mode 100644 index 00000000..d15daaff --- /dev/null +++ b/backend/src/app.spec.ts @@ -0,0 +1,29 @@ +import { NestExpressApplication } from "@nestjs/platform-express"; +import { bootstrap } from "./app"; + +vi.mock("prom-client", () => ({ + Registry: vi.fn().mockImplementation(() => ({})), + collectDefaultMetrics: vi.fn().mockImplementation(() => ({})), +})); +vi.mock("express-prom-bundle", () => ({ + default: vi.fn().mockImplementation(() => ({})), +})); +vi.mock("./prom", () => ({ + metricsMiddleware: vi.fn().mockImplementation((_req, _res, next) => next()), +})); + +describe("main", () => { + let app: NestExpressApplication; + + beforeAll(async () => { + app = await bootstrap(); + }); + + afterAll(async () => { + await app.close(); + }); + + it("should start the application", async () => { + expect(app).toBeDefined(); + }); +}); diff --git a/backend/src/app.ts b/backend/src/app.ts new file mode 100644 index 00000000..7a109bbd --- /dev/null +++ b/backend/src/app.ts @@ -0,0 +1,38 @@ +import { NestFactory } from '@nestjs/core'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import { AppModule } from './app.module'; +import { customLogger } from './common/logger.config'; +import { NestExpressApplication } from '@nestjs/platform-express'; +import helmet from 'helmet'; +import { VersioningType } from '@nestjs/common'; +import { metricsMiddleware } from "./prom"; + +/** + * + */ +export async function bootstrap() { + const app: NestExpressApplication = + await NestFactory.create(AppModule, { + logger: customLogger, + }); + app.use(helmet()); + app.enableCors(); + app.set("trust proxy", 1); + app.use(metricsMiddleware); + app.enableShutdownHooks(); + app.setGlobalPrefix("api"); + app.enableVersioning({ + type: VersioningType.URI, + prefix: "v", + }); + const config = new DocumentBuilder() + .setTitle("Users example") + .setDescription("The user API description") + .setVersion("1.0") + .addTag("users") + .build(); + + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup("/api/docs", app, document); + return app; +} diff --git a/backend/src/common/logger.config.spec.ts b/backend/src/common/logger.config.spec.ts new file mode 100644 index 00000000..9f4e89bc --- /dev/null +++ b/backend/src/common/logger.config.spec.ts @@ -0,0 +1,14 @@ +import { customLogger } from "./logger.config"; + +describe("CustomLogger", () => { + it("should be defined", () => { + expect(customLogger).toBeDefined(); + }); + + it("should log a message", () => { + const spy = vi.spyOn(customLogger, "verbose"); + customLogger.verbose("Test message"); + expect(spy).toHaveBeenCalledWith("Test message"); + spy.mockRestore(); + }); +}); diff --git a/backend/src/common/logger.config.ts b/backend/src/common/logger.config.ts new file mode 100644 index 00000000..ae35cca6 --- /dev/null +++ b/backend/src/common/logger.config.ts @@ -0,0 +1,26 @@ +import {WinstonModule, utilities} from 'nest-winston'; +import * as winston from 'winston'; +import {LoggerService} from "@nestjs/common"; + +const globalLoggerFormat: winston.Logform.Format = winston.format.timestamp({format: "YYYY-MM-DD hh:mm:ss.SSS"}); + +const localLoggerFormat: winston.Logform.Format = winston.format.combine( + winston.format.colorize(), + winston.format.align(), + utilities.format.nestLike('Backend', {prettyPrint: true}) +); + + +export const customLogger: LoggerService = WinstonModule.createLogger({ + transports: [ + new winston.transports.Console({ + level: 'silly', + format: winston.format.combine( + globalLoggerFormat, + localLoggerFormat, + winston.format.colorize({ level: true }) + ), + }), + ], + exitOnError: false, +}); diff --git a/backend/src/health.controller.ts b/backend/src/health.controller.ts new file mode 100644 index 00000000..c58c3a83 --- /dev/null +++ b/backend/src/health.controller.ts @@ -0,0 +1,19 @@ +import { Controller, Get } from "@nestjs/common"; +import { HealthCheckService, HealthCheck, PrismaHealthIndicator } from "@nestjs/terminus"; +import { PrismaService } from "nestjs-prisma"; +@Controller("health") +export class HealthController { + constructor( + private health: HealthCheckService, + private prisma: PrismaHealthIndicator, + private readonly prismaService: PrismaService, + ) {} + + @Get() + @HealthCheck() + check() { + return this.health.check([ + () => this.prisma.pingCheck('prisma', this.prismaService), + ]); + } +} diff --git a/backend/src/main.ts b/backend/src/main.ts new file mode 100644 index 00000000..f5c2cba2 --- /dev/null +++ b/backend/src/main.ts @@ -0,0 +1,11 @@ +import {NestExpressApplication} from "@nestjs/platform-express"; +import {bootstrap} from "./app"; +import {Logger} from "@nestjs/common"; +const logger = new Logger('NestApplication'); +bootstrap().then(async (app: NestExpressApplication) => { + await app.listen(3000); + logger.log(`Listening on ${await app.getUrl()}`); + logger.log(`Process start up took ${process.uptime()} seconds`); +}).catch(err=>{ + logger.error(err); +}); diff --git a/backend/src/metrics.controller.ts b/backend/src/metrics.controller.ts new file mode 100644 index 00000000..62bc71d2 --- /dev/null +++ b/backend/src/metrics.controller.ts @@ -0,0 +1,15 @@ +import { Controller, Get, Res } from "@nestjs/common"; +import { Response } from "express"; +import { register } from "./prom"; +import { PrismaService } from "nestjs-prisma"; +@Controller("metrics") +export class MetricsController { + constructor(private prisma: PrismaService) {} + + @Get() + async getMetrics(@Res() res: Response) { + const prismaMetrics = await this.prisma.$metrics.prometheus(); + const appMetrics = await register.metrics(); + res.end(prismaMetrics + appMetrics); + } +} diff --git a/backend/src/middleware/req.res.logger.spec.ts b/backend/src/middleware/req.res.logger.spec.ts new file mode 100644 index 00000000..ccceaa39 --- /dev/null +++ b/backend/src/middleware/req.res.logger.spec.ts @@ -0,0 +1,43 @@ +import { Test } from "@nestjs/testing"; +import { HTTPLoggerMiddleware } from "./req.res.logger"; +import { Request, Response } from "express"; +import { Logger } from "@nestjs/common"; + +describe("HTTPLoggerMiddleware", () => { + let middleware: HTTPLoggerMiddleware; + let logger: Logger; + + beforeEach(async () => { + const module = await Test.createTestingModule({ + providers: [HTTPLoggerMiddleware, Logger], + }).compile(); + + middleware = module.get(HTTPLoggerMiddleware); + logger = module.get(Logger); + }); + it("should log the correct information", () => { + const request: Request = { + method: "GET", + originalUrl: "/test", + get: () => "Test User Agent", + } as unknown as Request; + + const response: Response = { + statusCode: 200, + get: () => "100", + on: (event: string, cb: () => void) => { + if (event === "finish") { + cb(); + } + }, + } as unknown as Response; + + const loggerSpy = vi.spyOn(middleware["logger"], "log"); + + middleware.use(request, response, () => {}); + + expect(loggerSpy).toHaveBeenCalledWith( + `GET /test 200 100 - Test User Agent`, + ); + }); +}); diff --git a/backend/src/middleware/req.res.logger.ts b/backend/src/middleware/req.res.logger.ts new file mode 100644 index 00000000..90878377 --- /dev/null +++ b/backend/src/middleware/req.res.logger.ts @@ -0,0 +1,21 @@ +import { Request, Response, NextFunction } from "express"; +import { Injectable, NestMiddleware, Logger } from "@nestjs/common"; + +@Injectable() +export class HTTPLoggerMiddleware implements NestMiddleware { + private logger = new Logger("HTTP"); + + use(request: Request, response: Response, next: NextFunction): void { + const { method, originalUrl } = request; + + response.on("finish", () => { + const { statusCode } = response; + const contentLength = response.get("content-length") || "-"; + const hostedHttpLogFormat = `${method} ${originalUrl} ${statusCode} ${contentLength} - ${request.get( + "user-agent", + )}`; + this.logger.log(hostedHttpLogFormat); + }); + next(); + } +} diff --git a/backend/src/prom.ts b/backend/src/prom.ts new file mode 100644 index 00000000..5e3b9a23 --- /dev/null +++ b/backend/src/prom.ts @@ -0,0 +1,11 @@ +import * as prom from 'prom-client'; +import promBundle from 'express-prom-bundle'; +const register = new prom.Registry(); +prom.collectDefaultMetrics({ register }); +const metricsMiddleware = promBundle({ + includeMethod: true, + includePath: true, + metricsPath: '/prom-metrics', + promRegistry: register, +}); +export { metricsMiddleware, register }; diff --git a/backend/src/users/dto/create-user.dto.ts b/backend/src/users/dto/create-user.dto.ts new file mode 100644 index 00000000..039e11df --- /dev/null +++ b/backend/src/users/dto/create-user.dto.ts @@ -0,0 +1,7 @@ +import { PickType } from '@nestjs/swagger'; +import { UserDto } from './user.dto'; + +export class CreateUserDto extends PickType(UserDto, [ + 'email', + 'name', +] as const) {} diff --git a/backend/src/users/dto/update-user.dto.ts b/backend/src/users/dto/update-user.dto.ts new file mode 100644 index 00000000..9b35b94b --- /dev/null +++ b/backend/src/users/dto/update-user.dto.ts @@ -0,0 +1,3 @@ +import { CreateUserDto } from './create-user.dto'; + +export class UpdateUserDto extends CreateUserDto {} diff --git a/backend/src/users/dto/user.dto.ts b/backend/src/users/dto/user.dto.ts new file mode 100644 index 00000000..89eb7f0d --- /dev/null +++ b/backend/src/users/dto/user.dto.ts @@ -0,0 +1,21 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class UserDto { + @ApiProperty({ + description: 'The ID of the user', + // default: '9999', + }) + id: number; + + @ApiProperty({ + description: 'The name of the user', + // default: 'username', + }) + name: string; + + @ApiProperty({ + description: 'The contact email of the user', + default: '', + }) + email: string; +} diff --git a/backend/src/users/users.controller.spec.ts b/backend/src/users/users.controller.spec.ts new file mode 100644 index 00000000..8d80f47d --- /dev/null +++ b/backend/src/users/users.controller.spec.ts @@ -0,0 +1,186 @@ +import { Test, TestingModule } from "@nestjs/testing"; +import { UsersController } from "./users.controller"; +import { UsersService } from "./users.service"; +import request from "supertest"; +import { HttpException, INestApplication } from "@nestjs/common"; +import { CreateUserDto } from "./dto/create-user.dto"; +import { UpdateUserDto } from "./dto/update-user.dto"; +import { UserDto } from "./dto/user.dto"; +import { PrismaService } from "nestjs-prisma"; + +describe("UserController", () => { + let controller: UsersController; + let usersService: UsersService; + let app: INestApplication; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [UsersController], + providers: [ + UsersService, + { + provide: PrismaService, + useValue: {}, + }, + ], + }).compile(); + usersService = module.get(UsersService); + controller = module.get(UsersController); + app = module.createNestApplication(); + await app.init(); + }); + // Close the app after each test + afterEach(async () => { + await app.close(); + }); + + it("should be defined", () => { + expect(controller).toBeDefined(); + }); + + describe("create", () => { + it("should call the service create method with the given dto and return the result", async () => { + // Arrange + const createUserDto: CreateUserDto = { + email: "test@example.com", + name: "Test User", + }; + const expectedResult = { + id: 1, + ...createUserDto, + }; + vi.spyOn(usersService, "create").mockResolvedValue(expectedResult); + + // Act + const result = await controller.create(createUserDto); + + // Assert + expect(usersService.create).toHaveBeenCalledWith(createUserDto); + expect(result).toEqual(expectedResult); + }); + }); + describe("findAll", () => { + it("should return an array of users", async () => { + const result = []; + result.push({ id: 1, name: "Alice", email: "test@gmail.com" }); + vi.spyOn(usersService, "findAll").mockResolvedValue(result); + expect(await controller.findAll()).toBe(result); + }); + }); + describe("findOne", () => { + it("should return a user object", async () => { + const result: UserDto = { + id: 1, + name: "john", + email: "John_Doe@gmail.com", + }; + vi.spyOn(usersService, "findOne").mockResolvedValue(result); + expect(await controller.findOne("1")).toBe(result); + }); + it("should throw error if user not found", async () => { + vi.spyOn(usersService, "findOne").mockResolvedValue(undefined); + try { + await controller.findOne("1"); + } catch (e) { + expect(e).toBeInstanceOf(HttpException); + expect(e.message).toBe("User not found."); + } + }); + }); + describe("update", () => { + it("should update and return a user object", async () => { + const id = "1"; + const updateUserDto: UpdateUserDto = { + email: "johndoe@example.com", + name: "John Doe", + }; + const userDto: UserDto = { + id: 1, + name: "John Doe", + email: "johndoe@example.com", + }; + vi.spyOn(usersService, "update").mockResolvedValue(userDto); + + expect(await controller.update(id, updateUserDto)).toBe(userDto); + expect(usersService.update).toHaveBeenCalledWith(+id, updateUserDto); + }); + }); + describe("remove", () => { + it("should remove a user", async () => { + const id = "1"; + vi.spyOn(usersService, "remove").mockResolvedValue(undefined); + + expect(await controller.remove(id)).toBeUndefined(); + expect(usersService.remove).toHaveBeenCalledWith(+id); + }); + }); + // Test the GET /users/search endpoint + describe("GET /users/search", () => { + // Test with valid query parameters + it("given valid query parameters_should return an array of users with pagination metadata", async () => { + // Mock the usersService.searchUsers method to return a sample result + const result = { + users: [ + { id: 1, name: "Alice", email: "alice@example.com" }, + { id: 2, name: "Adam", email: "Adam@example.com" }, + ], + page: 1, + limit: 10, + sort: '{"name":"ASC"}', + filter: '[{"key":"name","operation":"like","value":"A"}]', + total: 2, + totalPages: 1, + }; + vi.spyOn(usersService, "searchUsers").mockImplementation( + async () => result, + ); + + // Make a GET request with query parameters and expect a 200 status code and the result object + return request(app.getHttpServer()) + .get("/users/search") + .query({ + page: 1, + limit: 10, + sort: '{"name":"ASC"}', + filter: '[{"key":"name","operation":"like","value":"A"}]', + }) + .expect(200) + .expect(result); + }); + + // Test with invalid query parameters + it("given invalid query parameters_should return a 400 status code with an error message", async () => { + // Make a GET request with invalid query parameters and expect a 400 status code and an error message + return request(app.getHttpServer()) + .get("/users/search") + .query({ + page: "invalid", + limit: "invalid", + }) + .expect(400) + .expect({ + statusCode: 400, + message: "Invalid query parameters", + }); + }); + it("given sort and filter as invalid query parameters_should return a 400 status code with an error message", async () => { + // Make a GET request with invalid query parameters and expect a 400 status code and an error message + vi.spyOn(usersService, "searchUsers").mockImplementation(async () => { + throw new HttpException("Invalid query parameters", 400); + }); + return request(app.getHttpServer()) + .get("/users/search") + .query({ + page: 1, + limit: 10, + sort: "invalid", + filter: "invalid", + }) + .expect(400) + .expect({ + statusCode: 400, + message: "Invalid query parameters", + }); + }); + }); +}); diff --git a/backend/src/users/users.controller.ts b/backend/src/users/users.controller.ts new file mode 100644 index 00000000..36fd258f --- /dev/null +++ b/backend/src/users/users.controller.ts @@ -0,0 +1,65 @@ +import { + Controller, + Get, + Post, + Body, + Put, + Param, + Delete, Query, HttpException, +} from "@nestjs/common"; +import {ApiTags} from "@nestjs/swagger"; +import {UsersService} from "./users.service"; +import {CreateUserDto} from "./dto/create-user.dto"; +import {UpdateUserDto} from "./dto/update-user.dto"; +import { UserDto } from "./dto/user.dto"; + +@ApiTags("users") +@Controller({path: "users", version: "1"}) +export class UsersController { + constructor(private readonly usersService: UsersService) { + } + + @Post() + create(@Body() createUserDto: CreateUserDto) { + return this.usersService.create(createUserDto); + } + + @Get() + findAll() : Promise { + return this.usersService.findAll(); + } + + @Get("search") // it must be ahead of the below Get(":id") to avoid conflict + async searchUsers( + @Query("page") page: number, + @Query("limit") limit: number, + @Query("sort") sort: string, // JSON string to store sort key and sort value, ex: {name: "ASC"} + @Query("filter") filter: string // JSON array for key, operation and value, ex: [{key: "name", operation: "like", value: "Peter"}] + ) { + if (isNaN(page) || isNaN(limit)) { + throw new HttpException("Invalid query parameters", 400); + } + return this.usersService.searchUsers(page, limit, sort, filter); + } + + @Get(":id") + async findOne(@Param("id") id: string) { + const user = await this.usersService.findOne(+id); + if (!user) { + throw new HttpException("User not found.", 404); + } + return user; + } + + @Put(":id") + update(@Param("id") id: string, @Body() updateUserDto: UpdateUserDto) { + return this.usersService.update(+id, updateUserDto); + } + + @Delete(":id") + remove(@Param("id") id: string) { + return this.usersService.remove(+id); + } + + +} diff --git a/backend/src/users/users.module.ts b/backend/src/users/users.module.ts new file mode 100644 index 00000000..d71b73d9 --- /dev/null +++ b/backend/src/users/users.module.ts @@ -0,0 +1,10 @@ +import { Module } from "@nestjs/common"; +import { UsersService } from "./users.service"; +import { UsersController } from "./users.controller"; + +@Module({ + controllers: [UsersController], + providers: [UsersService] +}) +export class UsersModule { +} diff --git a/backend/src/users/users.service.spec.ts b/backend/src/users/users.service.spec.ts new file mode 100644 index 00000000..9cf16291 --- /dev/null +++ b/backend/src/users/users.service.spec.ts @@ -0,0 +1,241 @@ +import type { TestingModule } from "@nestjs/testing"; +import { Test } from "@nestjs/testing"; +import { UsersService } from "./users.service"; +import { PrismaService } from "nestjs-prisma"; +import { Prisma } from "@prisma/client"; + +describe("UserService", () => { + let service: UsersService; + let prisma: PrismaService; + + const savedUser1 = { + id: new Prisma.Decimal(1), + name: "Test Numone", + email: "numone@test.com", + }; + const savedUser2 = { + id: new Prisma.Decimal(2), + name: "Test Numtwo", + email: "numtwo@test.com", + }; + const oneUser = { + id: 1, + name: "Test Numone", + email: "numone@test.com", + }; + const updateUser = { + id: 1, + name: "Test Numone update", + email: "numoneupdate@test.com", + }; + const updatedUser = { + id: new Prisma.Decimal(1), + name: "Test Numone update", + email: "numoneupdate@test.com", + }; + + const twoUser = { + id: 2, + name: "Test Numtwo", + email: "numtwo@test.com", + }; + + const userArray = [oneUser, twoUser]; + const savedUserArray = [savedUser1, savedUser2]; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + UsersService, + { + provide: PrismaService, + useValue: { + users: { + findMany: vi.fn().mockResolvedValue(savedUserArray), + findUnique: vi.fn().mockResolvedValue(savedUser1), + create: vi.fn().mockResolvedValue(savedUser1), + update: vi.fn().mockResolvedValue(updatedUser), + delete: vi.fn().mockResolvedValue(true), + count: vi.fn(), + }, + }, + }, + ], + }).compile(); + + service = module.get(UsersService); + prisma = module.get(PrismaService); + }); + + it("should be defined", () => { + expect(service).toBeDefined(); + }); + + describe("createOne", () => { + it("should successfully add a user", async () => { + await expect(service.create(oneUser)).resolves.toEqual(oneUser); + expect(prisma.users.create).toBeCalledTimes(1); + }); + }); + + describe("findAll", () => { + it("should return an array of users", async () => { + const users = await service.findAll(); + expect(users).toEqual(userArray); + }); + }); + + describe("findOne", () => { + it("should get a single user", async () => { + await expect(service.findOne(1)).resolves.toEqual(oneUser); + }); + }); + + describe("update", () => { + it("should call the update method", async () => { + const user = await service.update(1, updateUser); + expect(user).toEqual(updateUser); + expect(prisma.users.update).toBeCalledTimes(1); + }); + }); + + describe("remove", () => { + it("should return {deleted: true}", async () => { + await expect(service.remove(2)).resolves.toEqual({ deleted: true }); + }); + it("should return {deleted: false, message: err.message}", async () => { + const repoSpy = vi + .spyOn(prisma.users, "delete") + .mockRejectedValueOnce(new Error("Bad Delete Method.")); + await expect(service.remove(-1)).resolves.toEqual({ + deleted: false, + message: "Bad Delete Method.", + }); + expect(repoSpy).toBeCalledTimes(1); + }); + }); + + describe("searchUsers", () => { + it("should return a list of users with pagination and filtering", async () => { + const page = 1; + const limit = 10; + const sortObject: Prisma.SortOrder = "asc"; + const sort: any = `[{ "name": "${sortObject}" }]`; + const filter: any = '[{ "name": { "equals": "Peter" } }]'; + + vi.spyOn(prisma.users, "findMany").mockResolvedValue([]); + vi.spyOn(prisma.users, "count").mockResolvedValue(0); + const result = await service.searchUsers(page, limit, sort, filter); + + expect(result).toEqual({ + users: [], + page, + limit, + total: 0, + totalPages: 0, + }); + }); + + it("given no page should return a list of users with pagination and filtering with default page 1", async () => { + const limit = 10; + const sortObject: Prisma.SortOrder = "asc"; + const sort: any = `[{ "name": "${sortObject}" }]`; + const filter: any = '[{ "name": { "equals": "Peter" } }]'; + + vi.spyOn(prisma.users, "findMany").mockResolvedValue([]); + vi.spyOn(prisma.users, "count").mockResolvedValue(0); + const result = await service.searchUsers(null, limit, sort, filter); + + expect(result).toEqual({ + users: [], + page: 1, + limit, + total: 0, + totalPages: 0, + }); + }); + it("given no limit should return a list of users with pagination and filtering with default limit 10", async () => { + const page = 1; + const sortObject: Prisma.SortOrder = "asc"; + const sort: any = `[{ "name": "${sortObject}" }]`; + const filter: any = '[{ "name": { "equals": "Peter" } }]'; + + vi.spyOn(prisma.users, "findMany").mockResolvedValue([]); + vi.spyOn(prisma.users, "count").mockResolvedValue(0); + const result = await service.searchUsers(page, null, sort, filter); + + expect(result).toEqual({ + users: [], + page: 1, + limit: 10, + total: 0, + totalPages: 0, + }); + }); + + it("given limit greater than 200 should return a list of users with pagination and filtering with default limit 10", async () => { + const page = 1; + const limit = 201; + const sortObject: Prisma.SortOrder = "asc"; + const sort: any = `[{ "name": "${sortObject}" }]`; + const filter: any = '[{ "name": { "equals": "Peter" } }]'; + + vi.spyOn(prisma.users, "findMany").mockResolvedValue([]); + vi.spyOn(prisma.users, "count").mockResolvedValue(0); + const result = await service.searchUsers(page, limit, sort, filter); + + expect(result).toEqual({ + users: [], + page: 1, + limit: 10, + total: 0, + totalPages: 0, + }); + }); + it("given invalid JSON should throw error", async () => { + const page = 1; + const limit = 201; + const sortObject: Prisma.SortOrder = "asc"; + const sort: any = `[{ "name" "${sortObject}" }]`; + const filter: any = '[{ "name": { "equals": "Peter" } }]'; + try { + await service.searchUsers(page, limit, sort, filter); + } catch (e) { + expect(e).toEqual(new Error("Invalid query parameters")); + } + }); + }); + describe("convertFiltersToPrismaFormat", () => { + it("should convert input filters to prisma's filter format", () => { + const inputFilter = [ + { key: "a", operation: "like", value: "1" }, + { key: "b", operation: "eq", value: "2" }, + { key: "c", operation: "neq", value: "3" }, + { key: "d", operation: "gt", value: "4" }, + { key: "e", operation: "gte", value: "5" }, + { key: "f", operation: "lt", value: "6" }, + { key: "g", operation: "lte", value: "7" }, + { key: "h", operation: "in", value: ["8"] }, + { key: "i", operation: "notin", value: ["9"] }, + { key: "j", operation: "isnull", value: "10" }, + ]; + + const expectedOutput = { + a: { contains: "1" }, + b: { equals: "2" }, + c: { not: { equals: "3" } }, + d: { gt: "4" }, + e: { gte: "5" }, + f: { lt: "6" }, + g: { lte: "7" }, + h: { in: ["8"] }, + i: { not: { in: ["9"] } }, + j: { equals: null }, + }; + + expect(service.convertFiltersToPrismaFormat(inputFilter)).toStrictEqual( + expectedOutput, + ); + }); + }); +}); diff --git a/backend/src/users/users.service.ts b/backend/src/users/users.service.ts new file mode 100644 index 00000000..e04d825b --- /dev/null +++ b/backend/src/users/users.service.ts @@ -0,0 +1,156 @@ +import { Injectable } from "@nestjs/common"; +import { PrismaService } from "nestjs-prisma"; + +import { CreateUserDto } from "./dto/create-user.dto"; +import { UpdateUserDto } from "./dto/update-user.dto"; +import { UserDto } from "./dto/user.dto"; +import { Prisma } from "@prisma/client"; + +@Injectable() +export class UsersService { + constructor( + private prisma: PrismaService + ) { + } + + async create(user: CreateUserDto): Promise { + const savedUser = await this.prisma.users.create({ + data: { + name: user.name, + email: user.email + } + }); + + return { + id: savedUser.id.toNumber(), + name: savedUser.name, + email: savedUser.email + }; + } + + async findAll(): Promise { + const users = await this.prisma.users.findMany(); + return users.flatMap(user => { + const userDto: UserDto = { + id: user.id.toNumber(), + name: user.name, + email: user.email + }; + return userDto; + }); + } + + async findOne(id: number): Promise { + const user = await this.prisma.users.findUnique({ + where: { + id: new Prisma.Decimal(id) + } + }); + return { + id: user.id.toNumber(), + name: user.name, + email: user.email + }; + } + + async update(id: number, updateUserDto: UpdateUserDto): Promise { + const user = await this.prisma.users.update({ + where: { + id: new Prisma.Decimal(id) + }, + data: { + name: updateUserDto.name, + email: updateUserDto.email + } + }); + return { + id: user.id.toNumber(), + name: user.name, + email: user.email + }; + } + + async remove(id: number): Promise<{ deleted: boolean; message?: string }> { + try { + await this.prisma.users.delete({ + where: { + id: new Prisma.Decimal(id) + } + }); + return { deleted: true }; + } catch (err) { + return { deleted: false, message: err.message }; + } + } + + async searchUsers(page: number, + limit: number, + sort: string, // JSON string to store sort key and sort value, ex: [{"name":"desc"},{"email":"asc"}] + filter: string // JSON array for key, operation and value, ex: [{"key": "name", "operation": "like", "value": "Jo"}] + ): Promise { + + page = page || 1; + if (!limit || limit > 200) { + limit = 10; + } + + let sortObj=[]; + let filterObj = {}; + try { + sortObj = JSON.parse(sort); + filterObj = JSON.parse(filter); + } catch (e) { + throw new Error("Invalid query parameters"); + } + const users = await this.prisma.users.findMany({ + skip: (page - 1) * limit, + take: parseInt(String(limit)), + orderBy: sortObj, + where: this.convertFiltersToPrismaFormat(filterObj) + }); + + const count = await this.prisma.users.count({ + orderBy: sortObj, + where: this.convertFiltersToPrismaFormat(filterObj) + }); + + return { + users, + page, + limit, + total: count, + totalPages: Math.ceil(count / limit) + }; + } + + public convertFiltersToPrismaFormat(filterObj): any { + + let prismaFilterObj = {}; + + for (const item of filterObj) { + + if (item.operation === "like") { + prismaFilterObj[item.key] = { contains: item.value }; + } else if (item.operation === "eq") { + prismaFilterObj[item.key] = { equals: item.value }; + } else if (item.operation === "neq") { + prismaFilterObj[item.key] = { not: { equals: item.value } }; + } else if (item.operation === "gt") { + prismaFilterObj[item.key] = { gt: item.value }; + } else if (item.operation === "gte") { + prismaFilterObj[item.key] = { gte: item.value }; + } else if (item.operation === "lt") { + prismaFilterObj[item.key] = { lt: item.value }; + } else if (item.operation === "lte") { + prismaFilterObj[item.key] = { lte: item.value }; + } else if (item.operation === "in") { + prismaFilterObj[item.key] = { in: item.value }; + } else if (item.operation === "notin") { + prismaFilterObj[item.key] = { not: { in: item.value } }; + } else if (item.operation === "isnull") { + prismaFilterObj[item.key] = { equals: null }; + } + } + return prismaFilterObj; + } +} diff --git a/backend/test/app.e2e-spec.ts b/backend/test/app.e2e-spec.ts new file mode 100644 index 00000000..50d1cace --- /dev/null +++ b/backend/test/app.e2e-spec.ts @@ -0,0 +1,20 @@ +import request from "supertest"; +import { Test } from "@nestjs/testing"; +import { INestApplication } from "@nestjs/common"; +import { AppModule } from "../src/app.module"; + +describe("AppController (e2e)", () => { + let app: INestApplication; + + beforeAll(async () => { + const moduleFixture = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it("/ (GET)", () => + request(app.getHttpServer()).get("/").expect(200).expect("Hello Backend!")); +}); diff --git a/backend/tsconfig.build.json b/backend/tsconfig.build.json new file mode 100644 index 00000000..2fe1df27 --- /dev/null +++ b/backend/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "dist", "test", "**/*spec.ts"] +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 00000000..ae53b5e6 --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": false, + "noUncheckedIndexedAccess": true, + "moduleDetection": "force", + "resolveJsonModule": true, + "allowJs": true, + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "es2022", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "lib": ["es2022"], + "types": ["vitest/globals", "node"] + }, + "include": ["src/**/*.ts", "test/**/*.ts"], +} diff --git a/backend/vitest.config.mts b/backend/vitest.config.mts new file mode 100644 index 00000000..d9f48653 --- /dev/null +++ b/backend/vitest.config.mts @@ -0,0 +1,20 @@ +import { defineConfig } from "vitest/config"; +import swc from "unplugin-swc"; + +// https://vitejs.dev/config/ +export default defineConfig({ + test: { + include: ["**/*.e2e-spec.ts", "**/*.spec.ts"], + exclude: ["**/node_modules/**"], + globals: true, + environment: "node", + coverage: { + provider: "v8", + reporter: ["text-summary", "text", "json", "html"], + }, + reporters: process.env.GITHUB_ACTIONS + ? [["vitest-sonar-reporter", { outputFile: "test-report.xml" }]] + : [], + }, + plugins: [swc.vite()], +}); diff --git a/charts/app/.helmignore b/charts/app/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/charts/app/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/app/Chart.lock b/charts/app/Chart.lock new file mode 100644 index 00000000..17a61ea8 --- /dev/null +++ b/charts/app/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 16.2.5 +digest: sha256:db734ef7469da875946b3890550e4aa833db013d6d2d7179bdc9bcd2b2808ae2 +generated: "2024-12-11T09:44:55.590303022Z" diff --git a/charts/app/Chart.yaml b/charts/app/Chart.yaml new file mode 100644 index 00000000..cff391b0 --- /dev/null +++ b/charts/app/Chart.yaml @@ -0,0 +1,37 @@ +apiVersion: v2 +name: quickstart-openshift +description: A Helm chart for Kubernetes deployment. +icon: https://www.nicepng.com/png/detail/521-5211827_bc-icon-british-columbia-government-logo.png + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" + +dependencies: + - name: postgresql + condition: bitnamipg.enabled + version: 16.2.5 + repository: https://charts.bitnami.com/bitnami + alias: bitnamipg +maintainers: + - name: Om Mishra + email: omprakash.2.mishra@gov.bc.ca + - name: Derek Roberts + email: derek.roberts@gov.bc.ca diff --git a/charts/app/README.md b/charts/app/README.md new file mode 100644 index 00000000..9e072a05 --- /dev/null +++ b/charts/app/README.md @@ -0,0 +1,5228 @@ +# quickstart-openshift + +A Helm chart for Kubernetes deployment. + +![Version: 0.1.0](https://img.shields.io/badge/Version-0.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.16.0](https://img.shields.io/badge/AppVersion-1.16.0-informational?style=flat-square) + +## Maintainers + +| Name | Email | Url | +| ---- | ------ | --- | +| Om Mishra | | | +| Derek Roberts | | | + +## Requirements + +| Repository | Name | Version | +|------------|------|---------| +| https://bcgov.github.io/helm-service | backend(component) | 0.2.3 | +| https://bcgov.github.io/helm-service | frontend(component) | 0.2.3 | +| https://bcgov.github.io/helm-service | backup(component) | 0.2.3 | +| https://charts.bitnami.com/bitnami | bitnami-pg(postgresql) | 13.2.23 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyTypeDefaultDescription
backend.affinityobject
+{}
+
+
backend.autoscaling.behavior.scaleDown.policies[0].periodSecondsint
+60
+
+
backend.autoscaling.behavior.scaleDown.policies[0].typestring
+"Percent"
+
+
backend.autoscaling.behavior.scaleDown.policies[0].valueint
+10
+
+
backend.autoscaling.behavior.scaleDown.policies[1].periodSecondsint
+60
+
+
backend.autoscaling.behavior.scaleDown.policies[1].typestring
+"Pods"
+
+
backend.autoscaling.behavior.scaleDown.policies[1].valueint
+2
+
+
backend.autoscaling.behavior.scaleDown.selectPolicystring
+"Min"
+
+
backend.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint
+300
+
+
backend.autoscaling.behavior.scaleUp.policies[0].periodSecondsint
+30
+
+
backend.autoscaling.behavior.scaleUp.policies[0].typestring
+"Percent"
+
+
backend.autoscaling.behavior.scaleUp.policies[0].valueint
+100
+
+
backend.autoscaling.behavior.scaleUp.policies[1].periodSecondsint
+30
+
+
backend.autoscaling.behavior.scaleUp.policies[1].typestring
+"Pods"
+
+
backend.autoscaling.behavior.scaleUp.policies[1].valueint
+2
+
+
backend.autoscaling.behavior.scaleUp.selectPolicystring
+"Max"
+
+
backend.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint
+0
+
+
backend.autoscaling.enabledbool
+true
+
+
backend.autoscaling.maxReplicasint
+7
+
+
backend.autoscaling.minReplicasint
+3
+
+
backend.autoscaling.targetCPUUtilizationPercentageint
+80
+
+
backend.containers[0].env.fromGlobalSecret[0].keystring
+"password"
+
+
backend.containers[0].env.fromGlobalSecret[0].namestring
+"POSTGRES_PASSWORD"
+
+
backend.containers[0].env.fromGlobalSecret[1].keystring
+"databaseUser"
+
+
backend.containers[0].env.fromGlobalSecret[1].namestring
+"POSTGRES_USER"
+
+
backend.containers[0].env.fromGlobalSecret[2].keystring
+"databaseName"
+
+
backend.containers[0].env.fromGlobalSecret[2].namestring
+"POSTGRES_DATABASE"
+
+
backend.containers[0].env.fromValues[0].namestring
+"POSTGRES_HOST"
+
+
backend.containers[0].env.fromValues[0].valuestring
+"{{ .Release.Name }}-{{.Values.global.databaseAlias}}"
+
+
backend.containers[0].imagestring
+"backend"
+
+
backend.containers[0].livenessProbe.failureThresholdint
+3
+
+
backend.containers[0].livenessProbe.httpGet.pathstring
+"/api"
+
+
backend.containers[0].livenessProbe.httpGet.portint
+3000
+
+
backend.containers[0].livenessProbe.httpGet.schemestring
+"HTTP"
+
+
backend.containers[0].livenessProbe.initialDelaySecondsint
+15
+
+
backend.containers[0].livenessProbe.periodSecondsint
+30
+
+
backend.containers[0].livenessProbe.successThresholdint
+1
+
+
backend.containers[0].livenessProbe.timeoutSecondsint
+5
+
+
backend.containers[0].namestring
+"backend"
+
+
backend.containers[0].ports[0].containerPortint
+3000
+
+
backend.containers[0].ports[0].namestring
+"http"
+
+
backend.containers[0].ports[0].protocolstring
+"TCP"
+
+
backend.containers[0].readinessProbe.failureThresholdint
+30
+
+
backend.containers[0].readinessProbe.httpGet.pathstring
+"/api"
+
+
backend.containers[0].readinessProbe.httpGet.portint
+3000
+
+
backend.containers[0].readinessProbe.httpGet.schemestring
+"HTTP"
+
+
backend.containers[0].readinessProbe.initialDelaySecondsint
+5
+
+
backend.containers[0].readinessProbe.periodSecondsint
+2
+
+
backend.containers[0].readinessProbe.successThresholdint
+1
+
+
backend.containers[0].readinessProbe.timeoutSecondsint
+2
+
+
backend.containers[0].registrystring
+"{{ .Values.global.registry }}"
+
+
backend.containers[0].repositorystring
+"{{ .Values.global.repository }}"
+
+
backend.containers[0].resources.limits.cpustring
+"250m"
+
+
backend.containers[0].resources.limits.memorystring
+"250Mi"
+
+
backend.containers[0].resources.requests.cpustring
+"100m"
+
+
backend.containers[0].resources.requests.memorystring
+"150Mi"
+
+
backend.containers[0].tagstring
+"{{ .Values.global.tag }}"
+
+
backend.deployment.enabledbool
+true
+
+
backend.deploymentStrategy.typestring
+"Recreate"
+
+
backend.enabledbool
+true
+
+
backend.initContainers[0].env.fromGlobalSecret[0].keystring
+"databasePassword"
+
+
backend.initContainers[0].env.fromGlobalSecret[0].namestring
+"FLYWAY_PASSWORD"
+
+
backend.initContainers[0].env.fromGlobalSecret[1].keystring
+"databaseJDBCURLNoCreds"
+
+
backend.initContainers[0].env.fromGlobalSecret[1].namestring
+"FLYWAY_URL"
+
+
backend.initContainers[0].env.fromGlobalSecret[2].keystring
+"databaseUser"
+
+
backend.initContainers[0].env.fromGlobalSecret[2].namestring
+"FLYWAY_USER"
+
+
backend.initContainers[0].env.fromValues[0].namestring
+"FLYWAY_BASELINE_ON_MIGRATE"
+
+
backend.initContainers[0].env.fromValues[0].valuestring
+"true"
+
+
backend.initContainers[0].env.fromValues[1].namestring
+"FLYWAY_DEFAULT_SCHEMA"
+
+
backend.initContainers[0].env.fromValues[1].valuestring
+"USERS"
+
+
backend.initContainers[0].env.fromValues[2].namestring
+"FLYWAY_CONNECT_RETRIES"
+
+
backend.initContainers[0].env.fromValues[2].valuestring
+"30"
+
+
backend.initContainers[0].imagestring
+"migrations"
+
+
backend.initContainers[0].namestring
+"database-migrations"
+
+
backend.initContainers[0].registrystring
+"{{ .Values.global.registry }}"
+
+
backend.initContainers[0].repositorystring
+"{{ .Values.global.repository }}"
+
+
backend.initContainers[0].resources.limits.cpustring
+"500m"
+
+
backend.initContainers[0].resources.limits.memorystring
+"250Mi"
+
+
backend.initContainers[0].resources.requests.cpustring
+"200m"
+
+
backend.initContainers[0].resources.requests.memorystring
+"150Mi"
+
+
backend.initContainers[0].tagstring
+"{{ .Values.global.tag }}"
+
+
backend.nodeSelectorobject
+{}
+
+
backend.service.enabledbool
+true
+
+
backend.service.ports[0].namestring
+"http"
+
+
backend.service.ports[0].portint
+80
+
+
backend.service.ports[0].protocolstring
+"TCP"
+
+
backend.service.ports[0].targetPortint
+3000
+
+
backend.service.typestring
+"ClusterIP"
+
+
backend.tolerationslist
+[]
+
+
backend.vault.enabledbool
+false
+
+
backend.vault.resources.limits.cpustring
+"50m"
+
+
backend.vault.resources.limits.memorystring
+"50Mi"
+
+
backend.vault.resources.requests.cpustring
+"50m"
+
+
backend.vault.resources.requests.memorystring
+"25Mi"
+
+
backend.vault.rolestring
+null
+
+
backend.vault.secretPaths[0]string
+"dev/api-1"
+
+
backend.vault.secretPaths[1]string
+"dev/api-2"
+
+
backend.vault.secretPaths[2]string
+"test/api-1"
+
+
backend.vault.secretPaths[3]string
+"test/api-2"
+
+
backend.vault.secretPaths[4]string
+"prod/api-1"
+
+
backend.vault.secretPaths[5]string
+"prod/api-2"
+
+
backup.containers[0].command[0]string
+"/bin/bash"
+
+
backup.containers[0].command[1]string
+"-c"
+
+
backup.containers[0].command[2]string
+"/backup.sh -1"
+
+
backup.containers[0].env.fromGlobalSecret[0].keystring
+"password"
+
+
backup.containers[0].env.fromGlobalSecret[0].namestring
+"DATABASE_PASSWORD"
+
+
backup.containers[0].env.fromGlobalSecret[1].keystring
+"databaseName"
+
+
backup.containers[0].env.fromGlobalSecret[1].namestring
+"POSTGRESQL_DATABASE"
+
+
backup.containers[0].env.fromGlobalSecret[2].keystring
+"databaseUser"
+
+
backup.containers[0].env.fromGlobalSecret[2].namestring
+"DATABASE_USER"
+
+
backup.containers[0].env.fromValues[0].namestring
+"BACKUP_DIR"
+
+
backup.containers[0].env.fromValues[0].valuestring
+"/backups/"
+
+
backup.containers[0].env.fromValues[1].namestring
+"BACKUP_STRATEGY"
+
+
backup.containers[0].env.fromValues[1].valuestring
+"rolling"
+
+
backup.containers[0].env.fromValues[2].namestring
+"NUM_BACKUPS"
+
+
backup.containers[0].env.fromValues[2].valuestring
+"5"
+
+
backup.containers[0].env.fromValues[3].namestring
+"DAILY_BACKUPS"
+
+
backup.containers[0].env.fromValues[3].valuestring
+"7"
+
+
backup.containers[0].env.fromValues[4].namestring
+"WEEKLY_BACKUPS"
+
+
backup.containers[0].env.fromValues[4].valuestring
+"4"
+
+
backup.containers[0].env.fromValues[5].namestring
+"MONTHLY_BACKUPS"
+
+
backup.containers[0].env.fromValues[5].valuestring
+"1"
+
+
backup.containers[0].env.fromValues[6].namestring
+"DATABASE_SERVICE_NAME"
+
+
backup.containers[0].env.fromValues[6].valuestring
+"{{.Release.Name}}-{{.Values.global.databaseAlias}}"
+
+
backup.containers[0].env.fromValues[7].namestring
+"DEFAULT_PORT"
+
+
backup.containers[0].env.fromValues[7].valuestring
+"5432"
+
+
backup.containers[0].imagestring
+"backup-container"
+
+
backup.containers[0].namestring
+"backup"
+
+
backup.containers[0].registrystring
+"docker.io"
+
+
backup.containers[0].repositorystring
+"bcgovimages"
+
+
backup.containers[0].resources.limits.cpustring
+"50m"
+
+
backup.containers[0].resources.limits.memorystring
+"256Mi"
+
+
backup.containers[0].resources.requests.cpustring
+"20m"
+
+
backup.containers[0].resources.requests.memorystring
+"128Mi"
+
+
backup.containers[0].tagstring
+"latest"
+
+
backup.containers[0].volumeMounts[0].mountPathstring
+"/backups/"
+
+
backup.containers[0].volumeMounts[0].namestring
+"{{.Release.Name}}-backup"
+
+
backup.cronjob.concurrencyPolicystring
+"Replace"
+
+
backup.cronjob.enabledbool
+true
+
+
backup.cronjob.failedJobsHistoryLimitint
+7
+
+
backup.cronjob.restartPolicystring
+"Never"
+
+
backup.cronjob.schedulestring
+"0 0 * * *"
+
+
backup.cronjob.startingDeadlineSecondsint
+3600
+
+
backup.cronjob.successfulJobsHistoryLimitint
+30
+
+
backup.cronjob.volumes[0].namestring
+"{{.Release.Name}}-backup"
+
+
backup.cronjob.volumes[0].persistentVolumeClaim.claimNamestring
+"{{.Release.Name}}-backup"
+
+
backup.enabledbool
+true
+
+
backup.pvc.accessModesstring
+"ReadWriteOnce"
+
+
backup.pvc.enabledbool
+true
+
+
backup.pvc.sizestring
+"256Mi"
+
+
backup.pvc.storageClassNamestring
+"netapp-file-standard"
+
+
bitnami-pg.auth.databasestring
+"quickstart"
+
+
bitnami-pg.auth.existingSecretstring
+"{{ .Release.Name }}"
+
+
bitnami-pg.auth.usernamestring
+"quickstart"
+
+
bitnami-pg.backup.cronjob.containerSecurityContextobject
+{}
+
+
bitnami-pg.backup.cronjob.podSecurityContext.enabledbool
+false
+
+
bitnami-pg.backup.cronjob.storage.sizestring
+"200Mi"
+
+
bitnami-pg.backup.enabledbool
+false
+
+
bitnami-pg.enabledbool
+true
+
+
bitnami-pg.image.registrystring
+"ghcr.io"
+
+
bitnami-pg.image.repositorystring
+"bcgov/nr-containers/bitnami/postgresql"
+
+
bitnami-pg.image.tagstring
+"15.5.0"
+
+
bitnami-pg.primary.containerSecurityContext.enabledbool
+false
+
+
bitnami-pg.primary.initdb.scripts."postgis.sh"string
+"#!/bin/sh\nPGPASSWORD=$POSTGRES_PASSWORD psql -U postgres -d postgres -c \"CREATE EXTENSION postgis;\"\n"
+
+
bitnami-pg.primary.persistence.accessModes[0]string
+"ReadWriteOnce"
+
+
bitnami-pg.primary.persistence.enabledbool
+true
+
+
bitnami-pg.primary.persistence.sizestring
+"100Mi"
+
+
bitnami-pg.primary.persistence.storageClassstring
+"netapp-file-standard"
+
+
bitnami-pg.primary.podSecurityContext.enabledbool
+false
+
+
bitnami-pg.primary.resources.limits.cpustring
+"150m"
+
+
bitnami-pg.primary.resources.limits.memorystring
+"250Mi"
+
+
bitnami-pg.primary.resources.requests.cpustring
+"50m"
+
+
bitnami-pg.primary.resources.requests.memorystring
+"150Mi"
+
+
bitnami-pg.shmVolume.enabledbool
+false
+
+
crunchy.crunchyImagestring
+"artifacts.developer.gov.bc.ca/bcgov-docker-local/crunchy-postgres-gis:ubi8-15.2-3.3-0"
+
+
crunchy.enabledbool
+false
+
+
crunchy.imagePullPolicystring
+"Always"
+
+
crunchy.instances.dataVolumeClaimSpec.storagestring
+"120Mi"
+
+
crunchy.instances.dataVolumeClaimSpec.storageClassNamestring
+"netapp-block-standard"
+
+
crunchy.instances.limits.cpustring
+"100m"
+
+
crunchy.instances.limits.memorystring
+"512Mi"
+
+
crunchy.instances.metadata.annotations."prometheus.io/port"string
+"9187"
+
+
crunchy.instances.metadata.annotations."prometheus.io/scrape"string
+"true"
+
+
crunchy.instances.namestring
+"ha"
+
+
crunchy.instances.replicaCertCopy.limits.cpustring
+"50m"
+
+
crunchy.instances.replicaCertCopy.limits.memorystring
+"64Mi"
+
+
crunchy.instances.replicaCertCopy.requests.cpustring
+"1m"
+
+
crunchy.instances.replicaCertCopy.requests.memorystring
+"32Mi"
+
+
crunchy.instances.replicasint
+1
+
+
crunchy.instances.requests.cpustring
+"25m"
+
+
crunchy.instances.requests.memorystring
+"256Mi"
+
+
crunchy.patroni.postgresql.parameters.max_slot_wal_keep_sizestring
+"128MB"
+
+
crunchy.patroni.postgresql.parameters.max_wal_sizestring
+"64MB"
+
+
crunchy.patroni.postgresql.parameters.min_wal_sizestring
+"32MB"
+
+
crunchy.patroni.postgresql.parameters.shared_buffersstring
+"16MB"
+
+
crunchy.patroni.postgresql.parameters.wal_buffersstring
+"64kB"
+
+
crunchy.patroni.postgresql.pg_hbastring
+"host all all 0.0.0.0/0 md5"
+
+
crunchy.pgBackRest.enabledbool
+false
+
+
crunchy.pgBackRest.imagestring
+null
+
+
crunchy.pgBackRest.repoHost.limits.cpustring
+"50m"
+
+
crunchy.pgBackRest.repoHost.limits.memorystring
+"128Mi"
+
+
crunchy.pgBackRest.repoHost.requests.cpustring
+"1m"
+
+
crunchy.pgBackRest.repoHost.requests.memorystring
+"64Mi"
+
+
crunchy.pgBackRest.repos.schedules.fullstring
+"0 8 * * *"
+
+
crunchy.pgBackRest.repos.schedules.incrementalstring
+"0 0,4,12,16,20 * * *"
+
+
crunchy.pgBackRest.repos.volume.accessModesstring
+"ReadWriteOnce"
+
+
crunchy.pgBackRest.repos.volume.storagestring
+"64Mi"
+
+
crunchy.pgBackRest.repos.volume.storageClassNamestring
+"netapp-file-backup"
+
+
crunchy.pgBackRest.retentionstring
+"1"
+
+
crunchy.pgBackRest.retentionFullTypestring
+"count"
+
+
crunchy.pgBackRest.sidecars.limits.cpustring
+"50m"
+
+
crunchy.pgBackRest.sidecars.limits.memorystring
+"128Mi"
+
+
crunchy.pgBackRest.sidecars.requests.cpustring
+"1m"
+
+
crunchy.pgBackRest.sidecars.requests.memorystring
+"64Mi"
+
+
crunchy.pgmonitor.enabledbool
+false
+
+
crunchy.pgmonitor.exporter.imagestring
+null
+
+
crunchy.pgmonitor.exporter.limits.cpustring
+"50m"
+
+
crunchy.pgmonitor.exporter.limits.memorystring
+"128Mi"
+
+
crunchy.pgmonitor.exporter.requests.cpustring
+"1m"
+
+
crunchy.pgmonitor.exporter.requests.memorystring
+"64Mi"
+
+
crunchy.postGISVersionstring
+"3.3"
+
+
crunchy.postgresVersionint
+15
+
+
crunchy.proxy.pgBouncer.imagestring
+null
+
+
crunchy.proxy.pgBouncer.limits.cpustring
+"50m"
+
+
crunchy.proxy.pgBouncer.limits.memorystring
+"128Mi"
+
+
crunchy.proxy.pgBouncer.replicasint
+1
+
+
crunchy.proxy.pgBouncer.requests.cpustring
+"1m"
+
+
crunchy.proxy.pgBouncer.requests.memorystring
+"64Mi"
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].periodSecondsint
+60
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].typestring
+"Percent"
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].valueint
+10
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].periodSecondsint
+60
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].typestring
+"Pods"
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].valueint
+2
+
+
frontend.autoscaling.behavior.scaleDown.selectPolicystring
+"Min"
+
+
frontend.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint
+300
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].periodSecondsint
+30
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].typestring
+"Percent"
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].valueint
+100
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].periodSecondsint
+30
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].typestring
+"Pods"
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].valueint
+2
+
+
frontend.autoscaling.behavior.scaleUp.selectPolicystring
+"Max"
+
+
frontend.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint
+0
+
+
frontend.autoscaling.enabledbool
+true
+
+
frontend.autoscaling.maxReplicasint
+7
+
+
frontend.autoscaling.minReplicasint
+3
+
+
frontend.autoscaling.targetCPUUtilizationPercentageint
+80
+
+
frontend.configmapobject
+{
+  "data": {
+    "config.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"{{ .Release.Name }}-{{ .Release.Namespace }}\"\n  };\n})();",
+    "config.prod.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"static\"\n  };\n})();"
+  },
+  "enabled": true
+}
+
+
the configmap specific to the component.
frontend.configmap.dataobject
+{
+  "config.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"{{ .Release.Name }}-{{ .Release.Namespace }}\"\n  };\n})();",
+  "config.prod.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"static\"\n  };\n})();"
+}
+
+
dat contains key value pairs for the configmap. can contain multiple files. value can be piped as string.
frontend.configmap.enabledbool
+true
+
+
enable or disable the configmap.
frontend.containerslist
+[
+  {
+    "env": {
+      "fromLocalConfigmap": [
+        {
+          "key": "config.js",
+          "name": "frontend-configmap"
+        },
+        {
+          "key": "config.prod.js",
+          "name": "frontend-prod-configmap"
+        }
+      ],
+      "fromValues": [
+        {
+          "name": "BACKEND_URL",
+          "value": "http://{{ .Release.Name }}-backend"
+        },
+        {
+          "name": "LOG_LEVEL",
+          "value": "info"
+        }
+      ]
+    },
+    "image": "frontend",
+    "livenessProbe": {
+      "failureThreshold": 3,
+      "httpGet": {
+        "path": "/health",
+        "port": 3001,
+        "scheme": "HTTP"
+      },
+      "initialDelaySeconds": 15,
+      "periodSeconds": 30,
+      "successThreshold": 1,
+      "timeoutSeconds": 5
+    },
+    "name": "frontend",
+    "ports": [
+      {
+        "containerPort": 3000,
+        "name": "http",
+        "protocol": "TCP"
+      },
+      {
+        "containerPort": 3001,
+        "name": "http2",
+        "protocol": "TCP"
+      }
+    ],
+    "readinessProbe": {
+      "failureThreshold": 30,
+      "httpGet": {
+        "path": "/health",
+        "port": 3001,
+        "scheme": "HTTP"
+      },
+      "initialDelaySeconds": 5,
+      "periodSeconds": 2,
+      "successThreshold": 1,
+      "timeoutSeconds": 2
+    },
+    "registry": "{{ .Values.global.registry }}",
+    "repository": "{{ .Values.global.repository }}",
+    "resources": {
+      "limits": {
+        "cpu": "100m",
+        "memory": "150Mi"
+      },
+      "requests": {
+        "cpu": "30m",
+        "memory": "50Mi"
+      }
+    },
+    "securityContext": {
+      "capabilities": {
+        "add": [
+          "NET_BIND_SERVICE"
+        ]
+      }
+    },
+    "tag": "{{ .Values.global.tag }}"
+  }
+]
+
+
the containers specific to the component. one or many containers can be defined.
frontend.deploymentobject
+{
+  "enabled": true
+}
+
+
can be either a statefulSet or a deployment not both. TBD (StatefulSet)
frontend.deploymentStrategyobject
+{
+  "type": "Recreate"
+}
+
+
the deployment strategy, can be "Recreate" or "RollingUpdate"
frontend.enabledbool
+true
+
+
enable or disable a component deployment.
frontend.route.enabledbool
+true
+
+
frontend.route.hoststring
+"{{ .Release.Name }}-frontend.{{ .Values.global.domain }}"
+
+
frontend.route.targetPortstring
+"http"
+
+
frontend.service.enabledbool
+true
+
+
frontend.service.ports[0].namestring
+"http"
+
+
frontend.service.ports[0].portint
+80
+
+
frontend.service.ports[0].protocolstring
+"TCP"
+
+
frontend.service.ports[0].targetPortint
+3000
+
+
frontend.service.typestring
+"ClusterIP"
+
+
global.autoscalingbool
+true
+
+
global.databaseAliasstring
+"bitnami-pg"
+
+
global.domainstring
+"apps.silver.devops.gov.bc.ca"
+
+
global.openshiftImageRegistrystring
+"image-registry.openshift-image-registry.svc:5000"
+
+
global.podAnnotationsstring
+"app.kubernetes.io/timestamp: {{now | toString }}\n"
+
+
global.registrystring
+"ghcr.io"
+
+
global.repositorystring
+null
+
+
global.secrets.annotation."helm.sh/policy"string
+"keep"
+
+
global.secrets.databaseNamestring
+null
+
+
global.secrets.databasePasswordstring
+null
+
+
global.secrets.databaseUserstring
+null
+
+
global.secrets.enabledbool
+true
+
+
global.tagstring
+null
+
+
+ + +## Values + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyTypeDefaultDescription
backend.affinityobject
+{}
+
+
backend.autoscaling.behavior.scaleDown.policies[0].periodSecondsint
+60
+
+
backend.autoscaling.behavior.scaleDown.policies[0].typestring
+"Percent"
+
+
backend.autoscaling.behavior.scaleDown.policies[0].valueint
+10
+
+
backend.autoscaling.behavior.scaleDown.policies[1].periodSecondsint
+60
+
+
backend.autoscaling.behavior.scaleDown.policies[1].typestring
+"Pods"
+
+
backend.autoscaling.behavior.scaleDown.policies[1].valueint
+2
+
+
backend.autoscaling.behavior.scaleDown.selectPolicystring
+"Min"
+
+
backend.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint
+300
+
+
backend.autoscaling.behavior.scaleUp.policies[0].periodSecondsint
+30
+
+
backend.autoscaling.behavior.scaleUp.policies[0].typestring
+"Percent"
+
+
backend.autoscaling.behavior.scaleUp.policies[0].valueint
+100
+
+
backend.autoscaling.behavior.scaleUp.policies[1].periodSecondsint
+30
+
+
backend.autoscaling.behavior.scaleUp.policies[1].typestring
+"Pods"
+
+
backend.autoscaling.behavior.scaleUp.policies[1].valueint
+2
+
+
backend.autoscaling.behavior.scaleUp.selectPolicystring
+"Max"
+
+
backend.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint
+0
+
+
backend.autoscaling.enabledbool
+true
+
+
backend.autoscaling.maxReplicasint
+7
+
+
backend.autoscaling.minReplicasint
+3
+
+
backend.autoscaling.targetCPUUtilizationPercentageint
+80
+
+
backend.containers[0].env.fromGlobalSecret[0].keystring
+"password"
+
+
backend.containers[0].env.fromGlobalSecret[0].namestring
+"POSTGRES_PASSWORD"
+
+
backend.containers[0].env.fromGlobalSecret[1].keystring
+"databaseUser"
+
+
backend.containers[0].env.fromGlobalSecret[1].namestring
+"POSTGRES_USER"
+
+
backend.containers[0].env.fromGlobalSecret[2].keystring
+"databaseName"
+
+
backend.containers[0].env.fromGlobalSecret[2].namestring
+"POSTGRES_DATABASE"
+
+
backend.containers[0].env.fromValues[0].namestring
+"POSTGRES_HOST"
+
+
backend.containers[0].env.fromValues[0].valuestring
+"{{ .Release.Name }}-{{.Values.global.databaseAlias}}"
+
+
backend.containers[0].imagestring
+"backend"
+
+
backend.containers[0].livenessProbe.failureThresholdint
+3
+
+
backend.containers[0].livenessProbe.httpGet.pathstring
+"/api"
+
+
backend.containers[0].livenessProbe.httpGet.portint
+3000
+
+
backend.containers[0].livenessProbe.httpGet.schemestring
+"HTTP"
+
+
backend.containers[0].livenessProbe.initialDelaySecondsint
+15
+
+
backend.containers[0].livenessProbe.periodSecondsint
+30
+
+
backend.containers[0].livenessProbe.successThresholdint
+1
+
+
backend.containers[0].livenessProbe.timeoutSecondsint
+5
+
+
backend.containers[0].namestring
+"backend"
+
+
backend.containers[0].ports[0].containerPortint
+3000
+
+
backend.containers[0].ports[0].namestring
+"http"
+
+
backend.containers[0].ports[0].protocolstring
+"TCP"
+
+
backend.containers[0].readinessProbe.failureThresholdint
+30
+
+
backend.containers[0].readinessProbe.httpGet.pathstring
+"/api"
+
+
backend.containers[0].readinessProbe.httpGet.portint
+3000
+
+
backend.containers[0].readinessProbe.httpGet.schemestring
+"HTTP"
+
+
backend.containers[0].readinessProbe.initialDelaySecondsint
+5
+
+
backend.containers[0].readinessProbe.periodSecondsint
+2
+
+
backend.containers[0].readinessProbe.successThresholdint
+1
+
+
backend.containers[0].readinessProbe.timeoutSecondsint
+2
+
+
backend.containers[0].registrystring
+"{{ .Values.global.registry }}"
+
+
backend.containers[0].repositorystring
+"{{ .Values.global.repository }}"
+
+
backend.containers[0].resources.limits.cpustring
+"250m"
+
+
backend.containers[0].resources.limits.memorystring
+"250Mi"
+
+
backend.containers[0].resources.requests.cpustring
+"100m"
+
+
backend.containers[0].resources.requests.memorystring
+"150Mi"
+
+
backend.containers[0].tagstring
+"{{ .Values.global.tag }}"
+
+
backend.deployment.enabledbool
+true
+
+
backend.deploymentStrategy.typestring
+"Recreate"
+
+
backend.enabledbool
+true
+
+
backend.initContainers[0].env.fromGlobalSecret[0].keystring
+"databasePassword"
+
+
backend.initContainers[0].env.fromGlobalSecret[0].namestring
+"FLYWAY_PASSWORD"
+
+
backend.initContainers[0].env.fromGlobalSecret[1].keystring
+"databaseJDBCURLNoCreds"
+
+
backend.initContainers[0].env.fromGlobalSecret[1].namestring
+"FLYWAY_URL"
+
+
backend.initContainers[0].env.fromGlobalSecret[2].keystring
+"databaseUser"
+
+
backend.initContainers[0].env.fromGlobalSecret[2].namestring
+"FLYWAY_USER"
+
+
backend.initContainers[0].env.fromValues[0].namestring
+"FLYWAY_BASELINE_ON_MIGRATE"
+
+
backend.initContainers[0].env.fromValues[0].valuestring
+"true"
+
+
backend.initContainers[0].env.fromValues[1].namestring
+"FLYWAY_DEFAULT_SCHEMA"
+
+
backend.initContainers[0].env.fromValues[1].valuestring
+"USERS"
+
+
backend.initContainers[0].env.fromValues[2].namestring
+"FLYWAY_CONNECT_RETRIES"
+
+
backend.initContainers[0].env.fromValues[2].valuestring
+"30"
+
+
backend.initContainers[0].imagestring
+"migrations"
+
+
backend.initContainers[0].namestring
+"database-migrations"
+
+
backend.initContainers[0].registrystring
+"{{ .Values.global.registry }}"
+
+
backend.initContainers[0].repositorystring
+"{{ .Values.global.repository }}"
+
+
backend.initContainers[0].resources.limits.cpustring
+"500m"
+
+
backend.initContainers[0].resources.limits.memorystring
+"250Mi"
+
+
backend.initContainers[0].resources.requests.cpustring
+"200m"
+
+
backend.initContainers[0].resources.requests.memorystring
+"150Mi"
+
+
backend.initContainers[0].tagstring
+"{{ .Values.global.tag }}"
+
+
backend.nodeSelectorobject
+{}
+
+
backend.service.enabledbool
+true
+
+
backend.service.ports[0].namestring
+"http"
+
+
backend.service.ports[0].portint
+80
+
+
backend.service.ports[0].protocolstring
+"TCP"
+
+
backend.service.ports[0].targetPortint
+3000
+
+
backend.service.typestring
+"ClusterIP"
+
+
backend.tolerationslist
+[]
+
+
backend.vault.enabledbool
+false
+
+
backend.vault.resources.limits.cpustring
+"50m"
+
+
backend.vault.resources.limits.memorystring
+"50Mi"
+
+
backend.vault.resources.requests.cpustring
+"50m"
+
+
backend.vault.resources.requests.memorystring
+"25Mi"
+
+
backend.vault.rolestring
+null
+
+
backend.vault.secretPaths[0]string
+"dev/api-1"
+
+
backend.vault.secretPaths[1]string
+"dev/api-2"
+
+
backend.vault.secretPaths[2]string
+"test/api-1"
+
+
backend.vault.secretPaths[3]string
+"test/api-2"
+
+
backend.vault.secretPaths[4]string
+"prod/api-1"
+
+
backend.vault.secretPaths[5]string
+"prod/api-2"
+
+
backup.containers[0].command[0]string
+"/bin/bash"
+
+
backup.containers[0].command[1]string
+"-c"
+
+
backup.containers[0].command[2]string
+"/backup.sh -1"
+
+
backup.containers[0].env.fromGlobalSecret[0].keystring
+"password"
+
+
backup.containers[0].env.fromGlobalSecret[0].namestring
+"DATABASE_PASSWORD"
+
+
backup.containers[0].env.fromGlobalSecret[1].keystring
+"databaseName"
+
+
backup.containers[0].env.fromGlobalSecret[1].namestring
+"POSTGRESQL_DATABASE"
+
+
backup.containers[0].env.fromGlobalSecret[2].keystring
+"databaseUser"
+
+
backup.containers[0].env.fromGlobalSecret[2].namestring
+"DATABASE_USER"
+
+
backup.containers[0].env.fromValues[0].namestring
+"BACKUP_DIR"
+
+
backup.containers[0].env.fromValues[0].valuestring
+"/backups/"
+
+
backup.containers[0].env.fromValues[1].namestring
+"BACKUP_STRATEGY"
+
+
backup.containers[0].env.fromValues[1].valuestring
+"rolling"
+
+
backup.containers[0].env.fromValues[2].namestring
+"NUM_BACKUPS"
+
+
backup.containers[0].env.fromValues[2].valuestring
+"5"
+
+
backup.containers[0].env.fromValues[3].namestring
+"DAILY_BACKUPS"
+
+
backup.containers[0].env.fromValues[3].valuestring
+"7"
+
+
backup.containers[0].env.fromValues[4].namestring
+"WEEKLY_BACKUPS"
+
+
backup.containers[0].env.fromValues[4].valuestring
+"4"
+
+
backup.containers[0].env.fromValues[5].namestring
+"MONTHLY_BACKUPS"
+
+
backup.containers[0].env.fromValues[5].valuestring
+"1"
+
+
backup.containers[0].env.fromValues[6].namestring
+"DATABASE_SERVICE_NAME"
+
+
backup.containers[0].env.fromValues[6].valuestring
+"{{.Release.Name}}-{{.Values.global.databaseAlias}}"
+
+
backup.containers[0].env.fromValues[7].namestring
+"DEFAULT_PORT"
+
+
backup.containers[0].env.fromValues[7].valuestring
+"5432"
+
+
backup.containers[0].imagestring
+"backup-container"
+
+
backup.containers[0].namestring
+"backup"
+
+
backup.containers[0].registrystring
+"docker.io"
+
+
backup.containers[0].repositorystring
+"bcgovimages"
+
+
backup.containers[0].resources.limits.cpustring
+"50m"
+
+
backup.containers[0].resources.limits.memorystring
+"256Mi"
+
+
backup.containers[0].resources.requests.cpustring
+"20m"
+
+
backup.containers[0].resources.requests.memorystring
+"128Mi"
+
+
backup.containers[0].tagstring
+"latest"
+
+
backup.containers[0].volumeMounts[0].mountPathstring
+"/backups/"
+
+
backup.containers[0].volumeMounts[0].namestring
+"{{.Release.Name}}-backup"
+
+
backup.cronjob.concurrencyPolicystring
+"Replace"
+
+
backup.cronjob.enabledbool
+true
+
+
backup.cronjob.failedJobsHistoryLimitint
+7
+
+
backup.cronjob.restartPolicystring
+"Never"
+
+
backup.cronjob.schedulestring
+"0 0 * * *"
+
+
backup.cronjob.startingDeadlineSecondsint
+3600
+
+
backup.cronjob.successfulJobsHistoryLimitint
+30
+
+
backup.cronjob.volumes[0].namestring
+"{{.Release.Name}}-backup"
+
+
backup.cronjob.volumes[0].persistentVolumeClaim.claimNamestring
+"{{.Release.Name}}-backup"
+
+
backup.enabledbool
+true
+
+
backup.pvc.accessModesstring
+"ReadWriteOnce"
+
+
backup.pvc.enabledbool
+true
+
+
backup.pvc.sizestring
+"256Mi"
+
+
backup.pvc.storageClassNamestring
+"netapp-file-standard"
+
+
bitnami-pg.auth.databasestring
+"quickstart"
+
+
bitnami-pg.auth.existingSecretstring
+"{{ .Release.Name }}"
+
+
bitnami-pg.auth.usernamestring
+"quickstart"
+
+
bitnami-pg.backup.cronjob.containerSecurityContextobject
+{}
+
+
bitnami-pg.backup.cronjob.podSecurityContext.enabledbool
+false
+
+
bitnami-pg.backup.cronjob.storage.sizestring
+"200Mi"
+
+
bitnami-pg.backup.enabledbool
+false
+
+
bitnami-pg.enabledbool
+true
+
+
bitnami-pg.image.registrystring
+"ghcr.io"
+
+
bitnami-pg.image.repositorystring
+"bcgov/nr-containers/bitnami/postgresql"
+
+
bitnami-pg.image.tagstring
+"15.5.0"
+
+
bitnami-pg.primary.containerSecurityContext.enabledbool
+false
+
+
bitnami-pg.primary.initdb.scripts."postgis.sh"string
+"#!/bin/sh\nPGPASSWORD=$POSTGRES_PASSWORD psql -U postgres -d postgres -c \"CREATE EXTENSION postgis;\"\n"
+
+
bitnami-pg.primary.persistence.accessModes[0]string
+"ReadWriteOnce"
+
+
bitnami-pg.primary.persistence.enabledbool
+true
+
+
bitnami-pg.primary.persistence.sizestring
+"100Mi"
+
+
bitnami-pg.primary.persistence.storageClassstring
+"netapp-file-standard"
+
+
bitnami-pg.primary.podSecurityContext.enabledbool
+false
+
+
bitnami-pg.primary.resources.limits.cpustring
+"150m"
+
+
bitnami-pg.primary.resources.limits.memorystring
+"250Mi"
+
+
bitnami-pg.primary.resources.requests.cpustring
+"50m"
+
+
bitnami-pg.primary.resources.requests.memorystring
+"150Mi"
+
+
bitnami-pg.shmVolume.enabledbool
+false
+
+
crunchy.crunchyImagestring
+"artifacts.developer.gov.bc.ca/bcgov-docker-local/crunchy-postgres-gis:ubi8-15.2-3.3-0"
+
+
crunchy.enabledbool
+false
+
+
crunchy.imagePullPolicystring
+"Always"
+
+
crunchy.instances.dataVolumeClaimSpec.storagestring
+"120Mi"
+
+
crunchy.instances.dataVolumeClaimSpec.storageClassNamestring
+"netapp-block-standard"
+
+
crunchy.instances.limits.cpustring
+"100m"
+
+
crunchy.instances.limits.memorystring
+"512Mi"
+
+
crunchy.instances.metadata.annotations."prometheus.io/port"string
+"9187"
+
+
crunchy.instances.metadata.annotations."prometheus.io/scrape"string
+"true"
+
+
crunchy.instances.namestring
+"ha"
+
+
crunchy.instances.replicaCertCopy.limits.cpustring
+"50m"
+
+
crunchy.instances.replicaCertCopy.limits.memorystring
+"64Mi"
+
+
crunchy.instances.replicaCertCopy.requests.cpustring
+"1m"
+
+
crunchy.instances.replicaCertCopy.requests.memorystring
+"32Mi"
+
+
crunchy.instances.replicasint
+1
+
+
crunchy.instances.requests.cpustring
+"25m"
+
+
crunchy.instances.requests.memorystring
+"256Mi"
+
+
crunchy.patroni.postgresql.parameters.max_slot_wal_keep_sizestring
+"128MB"
+
+
crunchy.patroni.postgresql.parameters.max_wal_sizestring
+"64MB"
+
+
crunchy.patroni.postgresql.parameters.min_wal_sizestring
+"32MB"
+
+
crunchy.patroni.postgresql.parameters.shared_buffersstring
+"16MB"
+
+
crunchy.patroni.postgresql.parameters.wal_buffersstring
+"64kB"
+
+
crunchy.patroni.postgresql.pg_hbastring
+"host all all 0.0.0.0/0 md5"
+
+
crunchy.pgBackRest.enabledbool
+false
+
+
crunchy.pgBackRest.imagestring
+null
+
+
crunchy.pgBackRest.repoHost.limits.cpustring
+"50m"
+
+
crunchy.pgBackRest.repoHost.limits.memorystring
+"128Mi"
+
+
crunchy.pgBackRest.repoHost.requests.cpustring
+"1m"
+
+
crunchy.pgBackRest.repoHost.requests.memorystring
+"64Mi"
+
+
crunchy.pgBackRest.repos.schedules.fullstring
+"0 8 * * *"
+
+
crunchy.pgBackRest.repos.schedules.incrementalstring
+"0 0,4,12,16,20 * * *"
+
+
crunchy.pgBackRest.repos.volume.accessModesstring
+"ReadWriteOnce"
+
+
crunchy.pgBackRest.repos.volume.storagestring
+"64Mi"
+
+
crunchy.pgBackRest.repos.volume.storageClassNamestring
+"netapp-file-backup"
+
+
crunchy.pgBackRest.retentionstring
+"1"
+
+
crunchy.pgBackRest.retentionFullTypestring
+"count"
+
+
crunchy.pgBackRest.sidecars.limits.cpustring
+"50m"
+
+
crunchy.pgBackRest.sidecars.limits.memorystring
+"128Mi"
+
+
crunchy.pgBackRest.sidecars.requests.cpustring
+"1m"
+
+
crunchy.pgBackRest.sidecars.requests.memorystring
+"64Mi"
+
+
crunchy.pgmonitor.enabledbool
+false
+
+
crunchy.pgmonitor.exporter.imagestring
+null
+
+
crunchy.pgmonitor.exporter.limits.cpustring
+"50m"
+
+
crunchy.pgmonitor.exporter.limits.memorystring
+"128Mi"
+
+
crunchy.pgmonitor.exporter.requests.cpustring
+"1m"
+
+
crunchy.pgmonitor.exporter.requests.memorystring
+"64Mi"
+
+
crunchy.postGISVersionstring
+"3.3"
+
+
crunchy.postgresVersionint
+15
+
+
crunchy.proxy.pgBouncer.imagestring
+null
+
+
crunchy.proxy.pgBouncer.limits.cpustring
+"50m"
+
+
crunchy.proxy.pgBouncer.limits.memorystring
+"128Mi"
+
+
crunchy.proxy.pgBouncer.replicasint
+1
+
+
crunchy.proxy.pgBouncer.requests.cpustring
+"1m"
+
+
crunchy.proxy.pgBouncer.requests.memorystring
+"64Mi"
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].periodSecondsint
+60
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].typestring
+"Percent"
+
+
frontend.autoscaling.behavior.scaleDown.policies[0].valueint
+10
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].periodSecondsint
+60
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].typestring
+"Pods"
+
+
frontend.autoscaling.behavior.scaleDown.policies[1].valueint
+2
+
+
frontend.autoscaling.behavior.scaleDown.selectPolicystring
+"Min"
+
+
frontend.autoscaling.behavior.scaleDown.stabilizationWindowSecondsint
+300
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].periodSecondsint
+30
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].typestring
+"Percent"
+
+
frontend.autoscaling.behavior.scaleUp.policies[0].valueint
+100
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].periodSecondsint
+30
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].typestring
+"Pods"
+
+
frontend.autoscaling.behavior.scaleUp.policies[1].valueint
+2
+
+
frontend.autoscaling.behavior.scaleUp.selectPolicystring
+"Max"
+
+
frontend.autoscaling.behavior.scaleUp.stabilizationWindowSecondsint
+0
+
+
frontend.autoscaling.enabledbool
+true
+
+
frontend.autoscaling.maxReplicasint
+7
+
+
frontend.autoscaling.minReplicasint
+3
+
+
frontend.autoscaling.targetCPUUtilizationPercentageint
+80
+
+
frontend.configmapobject
+{
+  "data": {
+    "config.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"{{ .Release.Name }}-{{ .Release.Namespace }}\"\n  };\n})();",
+    "config.prod.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"static\"\n  };\n})();"
+  },
+  "enabled": true
+}
+
+
the configmap specific to the component.
frontend.configmap.dataobject
+{
+  "config.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"{{ .Release.Name }}-{{ .Release.Namespace }}\"\n  };\n})();",
+  "config.prod.js": "const envConfig = (() =\u003e {\n  return {\n    \"VITE_DEPLOY_ENVIRONMENT\":\"static\"\n  };\n})();"
+}
+
+
dat contains key value pairs for the configmap. can contain multiple files. value can be piped as string.
frontend.configmap.enabledbool
+true
+
+
enable or disable the configmap.
frontend.containerslist
+[
+  {
+    "env": {
+      "fromLocalConfigmap": [
+        {
+          "key": "config.js",
+          "name": "frontend-configmap"
+        },
+        {
+          "key": "config.prod.js",
+          "name": "frontend-prod-configmap"
+        }
+      ],
+      "fromValues": [
+        {
+          "name": "BACKEND_URL",
+          "value": "http://{{ .Release.Name }}-backend"
+        },
+        {
+          "name": "LOG_LEVEL",
+          "value": "info"
+        }
+      ]
+    },
+    "image": "frontend",
+    "livenessProbe": {
+      "failureThreshold": 3,
+      "httpGet": {
+        "path": "/health",
+        "port": 3001,
+        "scheme": "HTTP"
+      },
+      "initialDelaySeconds": 15,
+      "periodSeconds": 30,
+      "successThreshold": 1,
+      "timeoutSeconds": 5
+    },
+    "name": "frontend",
+    "ports": [
+      {
+        "containerPort": 3000,
+        "name": "http",
+        "protocol": "TCP"
+      },
+      {
+        "containerPort": 3001,
+        "name": "http2",
+        "protocol": "TCP"
+      }
+    ],
+    "readinessProbe": {
+      "failureThreshold": 30,
+      "httpGet": {
+        "path": "/health",
+        "port": 3001,
+        "scheme": "HTTP"
+      },
+      "initialDelaySeconds": 5,
+      "periodSeconds": 2,
+      "successThreshold": 1,
+      "timeoutSeconds": 2
+    },
+    "registry": "{{ .Values.global.registry }}",
+    "repository": "{{ .Values.global.repository }}",
+    "resources": {
+      "limits": {
+        "cpu": "100m",
+        "memory": "150Mi"
+      },
+      "requests": {
+        "cpu": "30m",
+        "memory": "50Mi"
+      }
+    },
+    "securityContext": {
+      "capabilities": {
+        "add": [
+          "NET_BIND_SERVICE"
+        ]
+      }
+    },
+    "tag": "{{ .Values.global.tag }}"
+  }
+]
+
+
the containers specific to the component. one or many containers can be defined.
frontend.deploymentobject
+{
+  "enabled": true
+}
+
+
can be either a statefulSet or a deployment not both. TBD (StatefulSet)
frontend.deploymentStrategyobject
+{
+  "type": "Recreate"
+}
+
+
the deployment strategy, can be "Recreate" or "RollingUpdate"
frontend.enabledbool
+true
+
+
enable or disable a component deployment.
frontend.route.enabledbool
+true
+
+
frontend.route.hoststring
+"{{ .Release.Name }}-frontend.{{ .Values.global.domain }}"
+
+
frontend.route.targetPortstring
+"http"
+
+
frontend.service.enabledbool
+true
+
+
frontend.service.ports[0].namestring
+"http"
+
+
frontend.service.ports[0].portint
+80
+
+
frontend.service.ports[0].protocolstring
+"TCP"
+
+
frontend.service.ports[0].targetPortint
+3000
+
+
frontend.service.typestring
+"ClusterIP"
+
+
global.autoscalingbool
+true
+
+
global.databaseAliasstring
+"bitnami-pg"
+
+
global.domainstring
+"apps.silver.devops.gov.bc.ca"
+
+
global.openshiftImageRegistrystring
+"image-registry.openshift-image-registry.svc:5000"
+
+
global.podAnnotationsstring
+"app.kubernetes.io/timestamp: {{now | toString }}\n"
+
+
global.registrystring
+"ghcr.io"
+
+
global.repositorystring
+null
+
+
global.secrets.annotation."helm.sh/policy"string
+"keep"
+
+
global.secrets.databaseNamestring
+null
+
+
global.secrets.databasePasswordstring
+null
+
+
global.secrets.databaseUserstring
+null
+
+
global.secrets.enabledbool
+true
+
+
global.tagstring
+null
+
+
+ + + diff --git a/charts/app/README.md.gotmpl b/charts/app/README.md.gotmpl new file mode 100644 index 00000000..f2720d0f --- /dev/null +++ b/charts/app/README.md.gotmpl @@ -0,0 +1,12 @@ +{{ template "chart.header" . }} +{{ template "chart.description" . }} + +{{ template "chart.versionBadge" . }}{{ template "chart.typeBadge" . }}{{ template "chart.appVersionBadge" . }} + +{{ template "chart.maintainersSection" . }} + +{{ template "chart.requirementsSection" . }} + +{{ template "chart.valuesTableHtml" . }} +{{ template "chart.valuesSectionHtml" . }} +{{ template "helm-docs.versionFooter" . }} diff --git a/charts/app/templates/_helpers.tpl b/charts/app/templates/_helpers.tpl new file mode 100644 index 00000000..e6278f4a --- /dev/null +++ b/charts/app/templates/_helpers.tpl @@ -0,0 +1,58 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s" .Release.Name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "name.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "labels" -}} +helm.sh/chart: {{ include "name.chart" . }} +{{ include "selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "selectorLabels" -}} +app.kubernetes.io/name: {{ include "fullname" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{- define "validation" -}} +{{- if and (not .Values.crunchy.enabled) (not .Values.bitnamipg.enabled ) }} +{{- fail "Both Database options are disabled" }} +{{- end }} +{{- if and (.Values.crunchy.enabled) (.Values.bitnamipg.enabled) }} +{{- fail "Both Database options are enabled" }} +{{- end }} +{{- if and (.Values.crunchy.enabled) (not .Values.global.config.databaseUser) }} +{{- fail "Database user is mandatory when crunchy is enabled." }} +{{- end}} +{{- end }} diff --git a/charts/app/templates/backend/templates/_helpers.tpl b/charts/app/templates/backend/templates/_helpers.tpl new file mode 100644 index 00000000..305a674a --- /dev/null +++ b/charts/app/templates/backend/templates/_helpers.tpl @@ -0,0 +1,42 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "backend.name" -}} +{{- printf "backend" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "backend.fullname" -}} +{{- $componentName := include "backend.name" . }} +{{- if .Values.backend.fullnameOverride }} +{{- .Values.backend.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $componentName | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "backend.labels" -}} +{{ include "backend.selectorLabels" . }} +{{- if .Values.global.tag }} +app.kubernetes.io/image-version: {{ .Values.global.tag | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/short-name: {{ include "backend.name" . }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "backend.selectorLabels" -}} +app.kubernetes.io/name: {{ include "backend.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + + diff --git a/charts/app/templates/backend/templates/deployment.yaml b/charts/app/templates/backend/templates/deployment.yaml new file mode 100644 index 00000000..3306f14e --- /dev/null +++ b/charts/app/templates/backend/templates/deployment.yaml @@ -0,0 +1,120 @@ +{{- if .Values.backend.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "backend.fullname" . }} + labels: + {{- include "backend.labels" . | nindent 4 }} +spec: + strategy: + type: {{ .Values.backend.deploymentStrategy }} + {{- if not .Values.backend.autoscaling.enabled }} + replicas: {{ .Values.backend.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "backend.selectorLabels" . | nindent 6 }} + template: + metadata: + annotations: + rollme: {{ randAlphaNum 5 | quote }} + prometheus.io/scrape: 'true' + prometheus.io/port: '3000' + prometheus.io/path: '/api/metrics' + labels: + {{- include "backend.labels" . | nindent 8 }} + spec: + {{- if .Values.backend.podSecurityContext }} + securityContext: + {{- toYaml .Values.backend.podSecurityContext | nindent 12 }} + {{- end }} + initContainers: + - name: {{ include "backend.fullname" . }}-init + image: "{{.Values.global.registry}}/{{.Values.global.repository}}/migrations:{{ .Values.global.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ default "Always" .Values.backend.imagePullPolicy }} + envFrom: + - secretRef: + name: {{.Release.Name}}-flyway + env: + - name: FLYWAY_BASELINE_ON_MIGRATE + value: "true" + - name: FLYWAY_DEFAULT_SCHEMA + value: "USERS" + - name: FLYWAY_CONNECT_RETRIES + value: "10" + resources: + limits: + cpu: 200m + memory: 200Mi + requests: + cpu: 50m + memory: 75Mi + containers: + - name: {{ include "backend.fullname" . }} + {{- if .Values.backend.securityContext }} + securityContext: + {{- toYaml .Values.backend.securityContext | nindent 12 }} + {{- end }} + image: "{{.Values.global.registry}}/{{.Values.global.repository}}/backend:{{ .Values.global.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ default "Always" .Values.backend.imagePullPolicy }} + envFrom: + - secretRef: + name: {{.Release.Name}}-backend + env: + - name: LOG_LEVEL + value: info + ports: + - name: http + containerPort: {{ .Values.backend.service.targetPort }} + protocol: TCP + readinessProbe: + httpGet: + path: /api/health + port: http + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 2 + timeoutSeconds: 2 + successThreshold: 1 + failureThreshold: 30 + livenessProbe: + successThreshold: 1 + failureThreshold: 3 + httpGet: + path: /api/health + port: 3000 + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 30 + timeoutSeconds: 5 + resources: # this is optional + limits: + cpu: 150m + memory: 150Mi + requests: + cpu: 50m + memory: 75Mi + {{- with .Values.backend.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.backend.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - {{ include "backend.fullname" . }} + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + +{{- end }} diff --git a/charts/app/templates/backend/templates/hpa.yaml b/charts/app/templates/backend/templates/hpa.yaml new file mode 100644 index 00000000..d2286093 --- /dev/null +++ b/charts/app/templates/backend/templates/hpa.yaml @@ -0,0 +1,55 @@ +{{- if .Values.global.autoscaling }} +{{- if and .Values.backend.autoscaling .Values.backend.autoscaling.enabled }} +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "backend.fullname" . }} + labels: + {{- include "backend.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "backend.fullname" . }} + minReplicas: {{ .Values.backend.autoscaling.minReplicas }} + maxReplicas: {{ .Values.backend.autoscaling.maxReplicas }} + behavior: + scaleDown: + stabilizationWindowSeconds: 300 + policies: + - type: Percent + value: 10 + periodSeconds: 60 + - type: Pods + value: 2 + periodSeconds: 60 + selectPolicy: Min + scaleUp: + stabilizationWindowSeconds: 0 + policies: + - type: Percent + value: 100 + periodSeconds: 30 + - type: Pods + value: 2 + periodSeconds: 30 + selectPolicy: Max + metrics: + {{- if .Values.backend.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.backend.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.backend.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: {{ .Values.backend.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} +{{- end }} diff --git a/charts/app/templates/backend/templates/pdb.yaml b/charts/app/templates/backend/templates/pdb.yaml new file mode 100644 index 00000000..7a22f7b7 --- /dev/null +++ b/charts/app/templates/backend/templates/pdb.yaml @@ -0,0 +1,14 @@ +{{- if and .Values.backend.pdb .Values.backend.pdb.enabled }} +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "backend.fullname" . }} + labels: + {{- include "backend.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "backend.selectorLabels" . | nindent 6 }} + minAvailable: {{ .Values.backend.pdb.minAvailable }} +{{- end }} diff --git a/charts/app/templates/backend/templates/service.yaml b/charts/app/templates/backend/templates/service.yaml new file mode 100644 index 00000000..2ea12d8f --- /dev/null +++ b/charts/app/templates/backend/templates/service.yaml @@ -0,0 +1,18 @@ +{{- if .Values.backend.enabled }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "backend.fullname" . }} + labels: + {{- include "backend.labels" . | nindent 4 }} +spec: + type: {{ .Values.backend.service.type }} + ports: + - port: {{ .Values.backend.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "backend.selectorLabels" . | nindent 4 }} +{{- end }} diff --git a/charts/app/templates/frontend/templates/_helpers.tpl b/charts/app/templates/frontend/templates/_helpers.tpl new file mode 100644 index 00000000..524c972f --- /dev/null +++ b/charts/app/templates/frontend/templates/_helpers.tpl @@ -0,0 +1,43 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "frontend.name" -}} +{{- printf "frontend" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "frontend.fullname" -}} +{{- $componentName := include "frontend.name" . }} +{{- if .Values.frontend.fullnameOverride }} +{{- .Values.frontend.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $componentName | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} + + +{{/* +Common labels +*/}} +{{- define "frontend.labels" -}} +{{ include "frontend.selectorLabels" . }} +{{- if .Values.global.tag }} +app.kubernetes.io/image-version: {{ .Values.global.tag | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/short-name: {{ include "frontend.name" . }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "frontend.selectorLabels" -}} +app.kubernetes.io/name: {{ include "frontend.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + + diff --git a/charts/app/templates/frontend/templates/deployment.yaml b/charts/app/templates/frontend/templates/deployment.yaml new file mode 100644 index 00000000..d50ba540 --- /dev/null +++ b/charts/app/templates/frontend/templates/deployment.yaml @@ -0,0 +1,100 @@ +{{- if .Values.frontend.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "frontend.fullname" . }} + labels: + {{- include "frontend.labels" . | nindent 4 }} +spec: + strategy: + type: {{ .Values.frontend.deploymentStrategy }} + {{- if not .Values.frontend.autoscaling.enabled }} + replicas: {{ .Values.frontend.replicaCount }} + {{- end }} + selector: + matchLabels: + {{- include "frontend.selectorLabels" . | nindent 6 }} + template: + metadata: + annotations: + rollme: {{ randAlphaNum 5 | quote }} + prometheus.io/scrape: 'true' + prometheus.io/port: '3003' + prometheus.io/path: '/metrics' + labels: + {{- include "frontend.labels" . | nindent 8 }} + spec: + {{- if .Values.frontend.podSecurityContext }} + securityContext: + {{- toYaml .Values.frontend.podSecurityContext | nindent 12 }} + {{- end }} + containers: + - name: {{ include "frontend.fullname" . }} + securityContext: + capabilities: + add: [ "NET_BIND_SERVICE" ] + image: "{{.Values.global.registry}}/{{.Values.global.repository}}/frontend:{{ .Values.global.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ default "Always" .Values.frontend.imagePullPolicy }} + env: + - name: BACKEND_URL + value: "http://{{ .Release.Name }}-backend" + - name: LOG_LEVEL + value: "info" + ports: + - name: http + containerPort: 3000 + protocol: TCP + readinessProbe: + httpGet: + path: /health + port: 3001 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 2 + timeoutSeconds: 2 + successThreshold: 1 + failureThreshold: 30 + #-- the liveness probe for the container. it is optional and is an object. for default values check this link: https://github.com/bcgov/helm-service/blob/main/charts/component/templates/deployment.yaml#L324-L328 + livenessProbe: + successThreshold: 1 + failureThreshold: 3 + httpGet: + path: /health + port: 3001 + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 30 + timeoutSeconds: 5 + resources: + limits: + cpu: 100m + memory: 150Mi + requests: + cpu: 30m + memory: 50Mi + volumeMounts: + - name: data + mountPath: /data + - name: config + mountPath: /config + volumes: + - name: data + emptyDir: {} + - name: config + emptyDir: {} + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - {{ include "frontend.fullname" . }} + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + +{{- end }} diff --git a/charts/app/templates/frontend/templates/hpa.yaml b/charts/app/templates/frontend/templates/hpa.yaml new file mode 100644 index 00000000..94191d14 --- /dev/null +++ b/charts/app/templates/frontend/templates/hpa.yaml @@ -0,0 +1,55 @@ +{{- if .Values.global.autoscaling }} +{{- if and .Values.frontend.autoscaling .Values.frontend.autoscaling.enabled }} +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "frontend.fullname" . }} + labels: + {{- include "frontend.labels" . | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "frontend.fullname" . }} + minReplicas: {{ .Values.frontend.autoscaling.minReplicas }} + maxReplicas: {{ .Values.frontend.autoscaling.maxReplicas }} + behavior: + scaleDown: + stabilizationWindowSeconds: 300 + policies: + - type: Percent + value: 10 + periodSeconds: 60 + - type: Pods + value: 2 + periodSeconds: 60 + selectPolicy: Min + scaleUp: + stabilizationWindowSeconds: 0 + policies: + - type: Percent + value: 100 + periodSeconds: 30 + - type: Pods + value: 2 + periodSeconds: 30 + selectPolicy: Max + metrics: + {{- if .Values.frontend.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: {{ .Values.frontend.autoscaling.targetCPUUtilizationPercentage }} + {{- end }} + {{- if .Values.frontend.autoscaling.targetMemoryUtilizationPercentage }} + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: {{ .Values.frontend.autoscaling.targetMemoryUtilizationPercentage }} + {{- end }} +{{- end }} +{{- end }} diff --git a/charts/app/templates/frontend/templates/ingress.yaml b/charts/app/templates/frontend/templates/ingress.yaml new file mode 100644 index 00000000..43ddd6ad --- /dev/null +++ b/charts/app/templates/frontend/templates/ingress.yaml @@ -0,0 +1,27 @@ +{{- if .Values.frontend.enabled }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "frontend.fullname" . }} + labels: + {{- include "frontend.labels" . | nindent 4 }} + {{- if and .Values.frontend.ingress .Values.frontend.ingress.annotations }} + {{- with .Values.frontend.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- end }} +spec: + ingressClassName: openshift-default + rules: + - host: {{ include "frontend.fullname" . }}.{{ .Values.global.domain }} + http: + paths: + - path: / + pathType: ImplementationSpecific + backend: + service: + name: {{ include "frontend.fullname" . }} + port: + number: 80 +{{- end }} diff --git a/charts/app/templates/frontend/templates/pdb.yaml b/charts/app/templates/frontend/templates/pdb.yaml new file mode 100644 index 00000000..b7067bf5 --- /dev/null +++ b/charts/app/templates/frontend/templates/pdb.yaml @@ -0,0 +1,14 @@ +{{- if and .Values.frontend.pdb .Values.frontend.pdb.enabled }} +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: {{ include "frontend.fullname" . }} + labels: + {{- include "frontend.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "frontend.selectorLabels" . | nindent 6 }} + minAvailable: {{ .Values.frontend.pdb.minAvailable }} +{{- end }} diff --git a/charts/app/templates/frontend/templates/service.yaml b/charts/app/templates/frontend/templates/service.yaml new file mode 100644 index 00000000..4ba07f69 --- /dev/null +++ b/charts/app/templates/frontend/templates/service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.frontend.enabled }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ include "frontend.fullname" . }} + labels: + {{- include "frontend.labels" . | nindent 4 }} +spec: + type: {{ .Values.frontend.service.type }} + ports: + - name: http + #-- the port for the service. the service will be accessible on this port within the namespace. + port: 80 + #-- the container port where the application is listening on + targetPort: 3000 + #-- the protocol for the port. it can be TCP or UDP. TCP is the default and is recommended. + protocol: TCP + - port: 3003 + targetPort: 3003 + protocol: TCP + name: metrics + selector: + {{- include "frontend.selectorLabels" . | nindent 4 }} +{{- end }} diff --git a/charts/app/templates/knp.yaml b/charts/app/templates/knp.yaml new file mode 100644 index 00000000..90f3c2d5 --- /dev/null +++ b/charts/app/templates/knp.yaml @@ -0,0 +1,87 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ .Release.Name }}-openshift-ingress-to-frontend + labels: {{- include "selectorLabels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: frontend + app.kubernetes.io/instance: {{ .Release.Name }} + ingress: + - from: + - namespaceSelector: + matchLabels: + network.openshift.io/policy-group: ingress + policyTypes: + - Ingress +--- +{{- if .Values.crunchy.enabled }} #KNP for crunchy db +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ .Release.Name }}-allow-backend-to-db + labels: {{- include "selectorLabels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + postgres-operator.crunchydata.com/cluster: {{ .Values.global.databaseAlias}} + ingress: + - ports: + - protocol: TCP + port: 5432 + from: + - podSelector: + matchLabels: + app.kubernetes.io/name: {{ template "backend.name"}} + app.kubernetes.io/instance: {{ .Release.Name }} + policyTypes: + - Ingress +{{- else }} #KNP for crunchy bitnami pg +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ .Release.Name }}-allow-backend-to-db + labels: {{- include "selectorLabels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: {{ .Values.global.databaseAlias}} + app.kubernetes.io/instance: {{ .Release.Name }} + ingress: + - ports: + - protocol: TCP + port: 5432 + from: + - podSelector: + matchLabels: + app.kubernetes.io/name: {{ template "backend.name"}} + app.kubernetes.io/instance: {{ .Release.Name }} + policyTypes: + - Ingress +{{- end }} + + +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ .Release.Name }}-allow-frontend-to-backend + labels: {{- include "selectorLabels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: {{ template "backend.name"}} + app.kubernetes.io/instance: {{ .Release.Name }} + ingress: + - ports: + - protocol: TCP + port: 3000 + from: + - podSelector: + matchLabels: + app.kubernetes.io/name: {{ template "frontend.name"}} + app.kubernetes.io/instance: {{ .Release.Name }} + policyTypes: + - Ingress diff --git a/charts/app/templates/secret.yaml b/charts/app/templates/secret.yaml new file mode 100644 index 00000000..7031d273 --- /dev/null +++ b/charts/app/templates/secret.yaml @@ -0,0 +1,80 @@ +{{include "validation" .}} +{{- if and .Values.global.secrets .Values.global.secrets.enabled}} +{{- $databaseUser := printf ""}} +{{- $databasePassword := printf ""}} +{{- $host := printf ""}} +{{- $databaseName := printf ""}} +{{- $hostWithoutPort := printf ""}} +{{- if .Values.crunchy.enabled}} + {{- $secretName := printf "postgres-crunchy-pguser-%s" .Values.global.config.databaseUser }} + {{- $databaseUser = .Values.global.config.databaseUser}} + {{- $secretObj := (lookup "v1" "Secret" .Release.Namespace $secretName ) | default dict }} + {{- $secretData := (get $secretObj "data") | default dict }} + {{- $databasePassword = get $secretData "password" }} + {{- $databaseName = b64dec (get $secretData "dbname") }} + {{- $host = printf "%s:%s" (b64dec (get $secretData "host")) (b64dec (get $secretData "port")) }} + {{- $hostWithoutPort = printf "%s" (b64dec (get $secretData "host")) }} +{{- else }} + {{- $databaseUser = "quickstart" }} + {{- $databasePassword = .Values.global.secrets.databasePassword | default (randAlphaNum 10) }} + {{- $secretName := printf "%s-database" .Release.Name }} + {{- $secretObj := (lookup "v1" "Secret" .Release.Namespace $secretName ) | default dict }} + {{- $secretData := (get $secretObj "data") | default dict }} + # set below to existing secret data or generate a random one when not exists + {{- $databasePassword = (get $secretData "postgres-password") | default ($databasePassword | b64enc) }} + {{- $databaseName = "quickstart" }} + {{- $host = printf "%s-%s:5432" .Release.Name .Values.global.databaseAlias }} + {{- $hostWithoutPort = printf "%s-%s" .Release.Name .Values.global.databaseAlias }} + +{{- end }} +{{- $databaseURL := printf "postgresql://%s:%s@%s/%s" $databaseUser (b64dec $databasePassword) $host $databaseName }} +{{- $databaseJDBCURL := printf "jdbc:postgresql://%s:%s@%s/%s" $databaseUser (b64dec $databasePassword) $host $databaseName }} +{{- $databaseJDBCURLNoCreds := printf "jdbc:postgresql://%s/%s" $host $databaseName }} + +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-backend + labels: {{- include "labels" . | nindent 4 }} + {{- if .Values.global.secrets.persist }} + annotations: + helm.sh/resource-policy: keep + {{- end }} +data: + POSTGRES_PASSWORD: {{ $databasePassword | quote }} + POSTGRES_USER: {{ $databaseUser | b64enc | quote }} + POSTGRES_DATABASE: {{ $databaseName | b64enc | quote }} + POSTGRES_HOST: {{ $hostWithoutPort | b64enc | quote }} + +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-flyway + labels: {{- include "labels" . | nindent 4 }} + {{- if .Values.global.secrets.persist }} + annotations: + helm.sh/resource-policy: keep + {{- end }} +data: + FLYWAY_URL: {{ $databaseJDBCURLNoCreds | b64enc | quote }} + FLYWAY_USER: {{ $databaseUser | b64enc | quote }} + FLYWAY_PASSWORD: {{ $databasePassword | quote }} + +--- +{{- if not .Values.crunchy.enabled}} # only when it is bitnami-postgres +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-database + labels: {{- include "labels" . | nindent 4 }} + {{- if .Values.global.secrets.persist }} + annotations: + helm.sh/resource-policy: keep + {{- end }} +data: + postgres-password: {{ $databasePassword | quote }} + password: {{ $databasePassword | quote }} +{{- end }} +{{- end }} diff --git a/charts/app/values.yaml b/charts/app/values.yaml new file mode 100644 index 00000000..5802db28 --- /dev/null +++ b/charts/app/values.yaml @@ -0,0 +1,163 @@ +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +#-- global variables, can be accessed by sub-charts. +global: + #-- the registry where the images are stored. override during runtime for other registry at global level or individual level. + repository: ~ # provide the repo name from where images will be sourced for example bcgo + #-- the registry where the images are stored. override during runtime for other registry at global level or individual level. default is ghcr.io + registry: ghcr.io # ghcr.io for directly streaming from github container registry or "artifacts.developer.gov.bc.ca/github-docker-remote" for artifactory, or any other registry. + #-- the tag of the image, it can be latest, 1.0.0 etc..., or the sha256 hash + tag: ~ + #-- turn off autoscaling for the entire suite by setting this to false. default is true. + autoscaling: false + #-- global secrets, can be accessed by sub-charts. + secrets: + enabled: true + databasePassword: ~ + databaseName: ~ + persist: true + config: + databaseUser: ~ + #-- domain of the application, it is required, apps.silver.devops.gov.bc.ca for silver cluster and apps.devops.gov.bc.ca for gold cluster + domain: "apps.silver.devops.gov.bc.ca" # it is apps.gold.devops.gov.bc.ca for gold cluster + #-- the database Alias gives a nice way to switch to different databases, crunchy, patroni ... etc. + #databaseAlias: bitnamipg #uncomment when using bitnami pg and comment below. + databaseAlias: postgres-crunchy #uncomment when using crunchy and comment above. + +#-- the components of the application, backend. +backend: + #-- enable or disable backend + enabled: true + #-- the deployment strategy, can be "Recreate" or "RollingUpdate" + deploymentStrategy: Recreate + #-- autoscaling for the component. it is optional and is an object. + autoscaling: + #-- enable or disable autoscaling. + enabled: true + #-- the minimum number of replicas. + minReplicas: 3 + #-- the maximum number of replicas. + maxReplicas: 7 + #-- the target cpu utilization percentage, is from request cpu and NOT LIMIT CPU. + targetCPUUtilizationPercentage: 80 + #-- vault, for injecting secrets from vault. it is optional and is an object. it creates an initContainer which reads from vault and app container can source those secrets. for referring to a working example with vault follow this link: https://github.com/bcgov/onroutebc/blob/main/charts/onroutebc/values.yaml#L171-L186 + vault: + #-- enable or disable vault. + enabled: false + #-- the role of the vault. it is required, #licenseplate-prod or licenseplate-nonprod, license plate is the namespace without env + role: ~ + #-- the vault path where the secrets live. it is required, dev/api-1, dev/api-2, test/api-1 etc... + secretPaths: + - dev/api-1 + - dev/api-2 + - test/api-1 + - test/api-2 + - prod/api-1 + - prod/api-2 + #-- resources specific to vault initContainer. it is optional and is an object. + resources: + limits: + cpu: 50m + memory: 50Mi + requests: + cpu: 50m + memory: 25Mi + #-- the service for the component. for inter namespace communication, use the service name as the hostname. + service: + #-- the type of the service. it can be ClusterIP, NodePort, LoadBalancer, ExternalName. ClusterIP is the default and is recommended. + type: ClusterIP + port: 80 # this is the service port, where it will be exposed internal to the namespace. + targetPort: 3000 # this is container port where app listens on + pdb: + enabled: false # enable it in PRODUCTION for having pod disruption budget. + minAvailable: 1 # the minimum number of pods that must be available during the disruption budget. + +frontend: + # -- enable or disable a component deployment. + enabled: true + # -- the deployment strategy, can be "Recreate" or "RollingUpdate" + deploymentStrategy: Recreate + + #-- autoscaling for the component. it is optional and is an object. + autoscaling: + #-- enable or disable autoscaling. + enabled: true + #-- the minimum number of replicas. + minReplicas: 3 + #-- the maximum number of replicas. + maxReplicas: 7 + #-- the target cpu utilization percentage, is from request cpu and NOT LIMIT CPU. + targetCPUUtilizationPercentage: 80 + #-- the service for the component. for inter namespace communication, use the service name as the hostname. + service: + #-- enable or disable the service. + enabled: true + #-- the type of the service. it can be ClusterIP, NodePort, LoadBalancer, ExternalName. ClusterIP is the default and is recommended. + type: ClusterIP + #-- the ports for the service. + ports: + - name: http + #-- the port for the service. the service will be accessible on this port within the namespace. + port: 80 + #-- the container port where the application is listening on + targetPort: 3000 + #-- the protocol for the port. it can be TCP or UDP. TCP is the default and is recommended. + protocol: TCP + - port: 3003 + targetPort: 3003 + protocol: TCP + name: metrics + ingress: + annotations: + route.openshift.io/termination: "edge" + pdb: + enabled: false # enable it in PRODUCTION for having pod disruption budget. + minAvailable: 1 # the minimum number of pods that must be available during the disruption budget. + +crunchy: + enabled: true # make this false and bitnami-pg true to switch from crunchy to bitnami single postgis. + +bitnamipg: + enabled: false + image: + registry: ghcr.io + repository: bcgov/nr-containers/bitnami/postgresql + tag: 15.10.0 + auth: + existingSecret: '{{ .Release.Name }}-database' + username: 'quickstart' # make sure this is aligned with secret.yaml + database: quickstart # make sure this is aligned with secret.yaml + shmVolume: + enabled: false + backup: + enabled: false + cronjob: + containerSecurityContext: { } + podSecurityContext: + enabled: false + storage: + size: 200Mi + primary: + persistence: + enabled: true + storageClass: netapp-block-standard + accessModes: + - ReadWriteOnce + size: 100Mi + containerSecurityContext: + enabled: false + podSecurityContext: + enabled: false + initdb: + scripts: # remove the below script, if POSTGIS is not required. + postgis.sh: | + #!/bin/sh + PGPASSWORD=$POSTGRES_PASSWORD psql -U postgres -d quickstart -c "CREATE EXTENSION postgis;" + resources: + requests: + cpu: 50m + memory: 150Mi + limits: + cpu: 150m + memory: 250Mi + diff --git a/charts/crunchy/Chart.yaml b/charts/crunchy/Chart.yaml new file mode 100644 index 00000000..223f5dfe --- /dev/null +++ b/charts/crunchy/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v2 +name: crunchy +description: A Helm chart for Kubernetes deployment. +icon: https://www.nicepng.com/png/detail/521-5211827_bc-icon-british-columbia-government-logo.png + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 5.5.1 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "5.5.1" + diff --git a/charts/crunchy/templates/PostgresCluster.yaml b/charts/crunchy/templates/PostgresCluster.yaml new file mode 100644 index 00000000..2fc074f2 --- /dev/null +++ b/charts/crunchy/templates/PostgresCluster.yaml @@ -0,0 +1,258 @@ +{{- if .Values.crunchy.enabled}} +apiVersion: postgres-operator.crunchydata.com/v1beta1 +kind: PostgresCluster +metadata: + name: {{ template "crunchy-postgres.fullname" . }} + labels: {{ include "crunchy-postgres.labels" . | nindent 4 }} +spec: + metadata: + labels: {{ include "crunchy-postgres.labels" . | nindent 6 }} + {{ if .Values.crunchy.crunchyImage }} + image: {{ .Values.crunchy.crunchyImage }} + {{ end }} + imagePullPolicy: {{.Values.crunchy.imagePullPolicy}} + postgresVersion: {{ .Values.crunchy.postgresVersion }} + {{ if .Values.crunchy.postGISVersion }} + postGISVersion: {{ .Values.crunchy.postGISVersion | quote }} + {{ end }} + postgresVersion: {{ .Values.crunchy.postgresVersion }} + {{- if and .Values.crunchy.clone .Values.crunchy.clone.enabled }} # enabled in disaster recovery scenario + dataSource: + {{- if .Values.crunchy.clone.s3.enabled}} + pgbackrest: + stanza: {{ .Values.crunchy.instances.name }} + configuration: + - secret: + name: {{ .Release.Name }}-s3-secret + global: + repo2-s3-uri-style: path # This is mandatory since the backups are path based. + repo2-path: {{ .Values.crunchy.clone.path }} # path to the backup where cluster will bootstrap from + repo: + name: repo2 # hardcoded since repo 2, it is always backed up to object storage. + s3: + bucket: {{ .Values.crunchy.pgBackRest.s3.bucket }} + endpoint: {{ .Values.crunchy.pgBackRest.s3.endpoint }} + region: "ca-central-1" + {{- end}} + {{- if .Values.crunchy.clone.pvc.enabled}} + postgresCluster: + clusterName: {{ template "crunchy-postgres.fullname" . }} + repoName: repo1 + {{- end}} + {{- end}} + {{- if .Values.crunchy.pgmonitor.enabled }} + monitoring: + pgmonitor: + # this stuff is for the "exporter" container in the "postgres-cluster-ha" set of pods + exporter: + {{ if .Values.crunchy.pgmonitor.exporter.image}} + image: {{ .Values.crunchy.pgmonitor.exporter.image}} + {{ end }} + resources: + requests: + cpu: {{ .Values.crunchy.pgmonitor.exporter.requests.cpu }} + memory: {{ .Values.crunchy.pgmonitor.exporter.requests.memory }} + limits: + cpu: {{ .Values.crunchy.pgmonitor.exporter.limits.cpu }} + memory: {{ .Values.crunchy.pgmonitor.exporter.limits.memory }} + + {{ end }} + + instances: + - name: {{ .Values.crunchy.instances.name }} + {{- if .Values.crunchy.instances.metadata }} + metadata: + {{- toYaml .Values.crunchy.instances.metadata | nindent 8 }} + {{- end }} + replicas: {{ .Values.crunchy.instances.replicas }} + resources: + requests: + cpu: {{ .Values.crunchy.instances.requests.cpu }} + memory: {{ .Values.crunchy.instances.requests.memory }} + limits: + cpu: {{ .Values.crunchy.instances.limits.cpu }} + memory: {{ .Values.crunchy.instances.limits.memory }} + + sidecars: + replicaCertCopy: + resources: + requests: + cpu: {{ .Values.crunchy.instances.replicaCertCopy.requests.cpu }} + memory: {{ .Values.crunchy.instances.replicaCertCopy.requests.memory }} + limits: + cpu: {{ .Values.crunchy.instances.replicaCertCopy.limits.cpu }} + memory: {{ .Values.crunchy.instances.replicaCertCopy.limits.memory }} + dataVolumeClaimSpec: + accessModes: + - "ReadWriteOnce" + resources: + requests: + storage: {{ .Values.crunchy.instances.dataVolumeClaimSpec.storage }} + storageClassName: {{ .Values.crunchy.instances.dataVolumeClaimSpec.storageClassName }} + walVolumeClaimSpec: + accessModes: + - "ReadWriteOnce" + resources: + requests: + storage: {{ .Values.crunchy.instances.dataVolumeClaimSpec.walStorage }} + storageClassName: {{ .Values.crunchy.instances.dataVolumeClaimSpec.storageClassName }} + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchLabels: + postgres-operator.crunchydata.com/cluster: + {{ template "crunchy-postgres.fullname" . }} + postgres-operator.crunchydata.com/instance-set: {{ .Values.crunchy.instances.name }} + + users: + - name: {{ .Values.global.config.dbName }} + databases: + - {{ .Values.global.config.dbName }} + options: "SUPERUSER CREATEDB CREATEROLE" + - name: postgres + databases: + - postgres + - {{ .Values.global.config.dbName }} + - name: {{ .Values.global.config.dbName }}proxy # this user lets dev connect to postgres via pgbouncer from local system + databases: + - {{ .Values.global.config.dbName }} + - postgres + {{- if .Values.crunchy.pgBackRest.enabled }} + backups: + pgbackrest: + {{ if .Values.crunchy.pgBackRest.image }} + image: {{ .Values.crunchy.pgBackRest.image }} + {{ end }} + {{- if .Values.crunchy.pgBackRest.s3.enabled}} + configuration: + - secret: + name: {{ .Release.Name }}-s3-secret + {{- end }} + global: + repo1-retention-full: {{ .Values.crunchy.pgBackRest.pvc.retention | quote }} + repo1-retention-full-type: {{ .Values.crunchy.pgBackRest.pvc.retentionFullType }} + {{- if .Values.crunchy.pgBackRest.s3.enabled}} + repo2-retention-full: {{ .Values.crunchy.pgBackRest.s3.retention | quote }} + repo2-retention-full-type: {{ .Values.crunchy.pgBackRest.retentionFullType }} + repo2-path: '{{ .Values.crunchy.pgBackRest.backupPath }}/{{ .Values.crunchy.pgBackRest.clusterCounter}}' + repo2-s3-uri-style: path + {{- end }} + repos: + + - name: repo1 + schedules: + full: {{ .Values.crunchy.pgBackRest.pvc.fullBackupSchedule }} + incremental: {{ .Values.crunchy.pgBackRest.pvc.incrementalBackupSchedule }} + volume: + volumeClaimSpec: + accessModes: + - {{ .Values.crunchy.pgBackRest.pvc.volume.accessModes }} + resources: + requests: + storage: {{ .Values.crunchy.pgBackRest.pvc.volume.storage }} + storageClassName: {{ .Values.crunchy.pgBackRest.pvc.volume.storageClassName }} + {{- if .Values.crunchy.pgBackRest.s3.enabled}} + - name: repo2 + schedules: + full: {{ .Values.crunchy.pgBackRest.s3.fullBackupSchedule }} + incremental: {{ .Values.crunchy.pgBackRest.s3.incrementalBackupSchedule }} + s3: + bucket: {{ .Values.crunchy.pgBackRest.s3.bucket | quote }} + endpoint: {{ .Values.crunchy.pgBackRest.s3.endpoint | quote }} + region: "ca-central-1" + {{- end }} + {{- if and .Values.crunchy.restore .Values.crunchy.restore.enabled }} + restore: + enabled: {{ .Values.crunchy.restore.enabled }} + repoName: {{ .Values.crunchy.restore.repoName }} + options: + - --type=time + - --target="{{ .Values.crunchy.restore.target }}" + {{- end }} + # this stuff is for the "pgbackrest" container (the only non-init container) in the "postgres-crunchy-repo-host" pod + repoHost: + resources: + requests: + cpu: {{ .Values.crunchy.pgBackRest.repoHost.requests.cpu }} + memory: {{ .Values.crunchy.pgBackRest.repoHost.requests.memory }} + limits: + cpu: {{ .Values.crunchy.pgBackRest.repoHost.limits.cpu }} + memory: {{ .Values.crunchy.pgBackRest.repoHost.limits.memory }} + sidecars: + # this stuff is for the "pgbackrest" container in the "postgres-crunchy-ha" set of pods + pgbackrest: + resources: + requests: + cpu: {{ .Values.crunchy.pgBackRest.sidecars.requests.cpu }} + memory: {{ .Values.crunchy.pgBackRest.sidecars.requests.memory }} + limits: + cpu: {{ .Values.crunchy.pgBackRest.sidecars.limits.cpu }} + memory: {{ .Values.crunchy.pgBackRest.sidecars.limits.memory }} + pgbackrestConfig: + resources: + requests: + cpu: {{ .Values.crunchy.pgBackRest.sidecars.requests.cpu }} + memory: {{ .Values.crunchy.pgBackRest.sidecars.requests.memory }} + limits: + cpu: {{ .Values.crunchy.pgBackRest.sidecars.limits.cpu }} + memory: {{ .Values.crunchy.pgBackRest.sidecars.limits.memory }} + jobs: + resources: + requests: + cpu: {{ .Values.crunchy.pgBackRest.jobs.requests.cpu }} + memory: {{ .Values.crunchy.pgBackRest.jobs.requests.memory }} + limits: + cpu: {{ .Values.crunchy.pgBackRest.jobs.limits.cpu }} + memory: {{ .Values.crunchy.pgBackRest.jobs.limits.memory }} + {{- end }} + patroni: + dynamicConfiguration: + postgresql: + pg_hba: {{ toYaml .Values.crunchy.patroni.postgresql.pg_hba | nindent 10 }} + parameters: + log_min_duration_statement: {{ .Values.crunchy.patroni.postgresql.parameters.log_min_duration_statement }} + shared_buffers: {{ .Values.crunchy.patroni.postgresql.parameters.shared_buffers }} + wal_buffers: {{ .Values.crunchy.patroni.postgresql.parameters.wal_buffers }} + work_mem: {{ .Values.crunchy.patroni.postgresql.parameters.work_mem }} + min_wal_size: {{ .Values.crunchy.patroni.postgresql.parameters.min_wal_size }} + max_wal_size: {{ .Values.crunchy.patroni.postgresql.parameters.max_wal_size }} + max_slot_wal_keep_size: {{ .Values.crunchy.patroni.postgresql.parameters.max_slot_wal_keep_size }} + effective_io_concurrency: {{ .Values.crunchy.patroni.postgresql.parameters.effective_io_concurrency }} + {{- if and .Values.crunchy.proxy .Values.crunchy.proxy.enabled }} + proxy: + pgBouncer: + config: + global: + client_tls_sslmode: disable + pool_mode: session + max_db_connections: {{ .Values.crunchy.proxy.pgBouncer.maxConnections | quote }} + {{ if .Values.crunchy.proxy.pgBouncer.image }} + image: {{ .Values.crunchy.proxy.pgBouncer.image }} + {{ end }} + replicas: {{ .Values.crunchy.proxy.pgBouncer.replicas }} + # these resources are for the "pgbouncer" container in the "postgres-crunchy-ha-pgbouncer" set of pods + # there is a sidecar in these pods which are not mentioned here, but the requests/limits are teeny weeny by default so no worries there. + resources: + requests: + cpu: {{ .Values.crunchy.proxy.pgBouncer.requests.cpu }} + memory: {{ .Values.crunchy.proxy.pgBouncer.requests.memory }} + limits: + cpu: {{ .Values.crunchy.proxy.pgBouncer.limits.cpu }} + memory: {{ .Values.crunchy.proxy.pgBouncer.limits.memory }} + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchLabels: + postgres-operator.crunchydata.com/cluster: + {{ template "crunchy-postgres.fullname" . }} + postgres-operator.crunchydata.com/role: pgbouncer + {{- end }} + {{- end }} diff --git a/charts/crunchy/templates/_helpers.tpl b/charts/crunchy/templates/_helpers.tpl new file mode 100644 index 00000000..d6e89c6c --- /dev/null +++ b/charts/crunchy/templates/_helpers.tpl @@ -0,0 +1,70 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "crunchy-postgres.name" -}} +{{- default "crunchy" .Values.crunchy.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "crunchy-postgres.fullname" -}} +{{- if .Values.crunchy.fullnameOverride }} +{{- .Values.crunchy.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default "crunchy" .Values.crunchy.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "crunchy-postgres.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "crunchy-postgres.labels" -}} +helm.sh/chart: {{ include "crunchy-postgres.chart" . }} +{{ include "crunchy-postgres.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "crunchy-postgres.selectorLabels" -}} +app.kubernetes.io/name: {{ include "crunchy-postgres.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "crunchy-postgres.serviceAccountName" -}} +{{- if .Values.crunchy.serviceAccount.create }} +{{- default (include "crunchy-postgres.fullname" .) .Values.crunchy.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.crunchy.serviceAccount.name }} +{{- end }} +{{- end }} + +{{- define "crunchy.s3" }} +{{- if .Values.crunchy.pgBackRest.s3.enabled}} +[global] +repo2-s3-key={{ .Values.crunchy.pgBackRest.s3.accessKey }} +repo2-s3-key-secret={{ .Values.crunchy.pgBackRest.s3.secretKey }} +{{ end }} +{{ end }} diff --git a/charts/crunchy/templates/knp.yaml b/charts/crunchy/templates/knp.yaml new file mode 100644 index 00000000..9624fdf7 --- /dev/null +++ b/charts/crunchy/templates/knp.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ .Release.Name }} + labels: {{- include "crunchy-postgres.selectorLabels" . | nindent 4 }} +spec: + podSelector: + matchLabels: + postgres-operator.crunchydata.com/cluster: {{ template "crunchy-postgres.fullname" . }} + ingress: + - from: + - podSelector: + matchLabels: + postgres-operator.crunchydata.com/cluster: {{ template "crunchy-postgres.fullname" . }} + policyTypes: + - Ingress diff --git a/charts/crunchy/templates/secret.yaml b/charts/crunchy/templates/secret.yaml new file mode 100644 index 00000000..3d05f9eb --- /dev/null +++ b/charts/crunchy/templates/secret.yaml @@ -0,0 +1,11 @@ +{{- if and .Values.crunchy.enabled .Values.crunchy.pgBackRest.s3.enabled}} +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{.Release.Name}}-s3-secret +type: Opaque +stringData: + s3.conf: |- + {{ include "crunchy.s3" . | nindent 8}} +{{- end }} diff --git a/charts/crunchy/values.yaml b/charts/crunchy/values.yaml new file mode 100644 index 00000000..d833f42d --- /dev/null +++ b/charts/crunchy/values.yaml @@ -0,0 +1,147 @@ +global: + config: + dbName: app #test +crunchy: # enable it for TEST and PROD, for PR based pipelines simply use single postgres + enabled: true + crunchyImage: artifacts.developer.gov.bc.ca/bcgov-docker-local/crunchy-postgres-gis:ubi8-16.2-3.4-0 + postgresVersion: 16 + postGISVersion: '3.4' + imagePullPolicy: IfNotPresent + # enable below to start a new crunchy cluster after disaster from a backed-up location, crunchy will choose the best place to recover from. + # follow https://access.crunchydata.com/documentation/postgres-operator/5.2.0/tutorial/disaster-recovery/ + # Clone From Backups Stored in S3 / GCS / Azure Blob Storage + clone: + enabled: false + s3: + enabled: false + pvc: + enabled: false + path: ~ # provide the proper path to source the cluster. ex: /backups/cluster/version/1, if current new cluster being created, this should be current cluster version -1, ideally + # enable this to go back to a specific timestamp in history in the current cluster. + # follow https://access.crunchydata.com/documentation/postgres-operator/5.2.0/tutorial/disaster-recovery/ + # Perform an In-Place Point-in-time-Recovery (PITR) + restore: + repoName: ~ # provide repo name + enabled: false + target: ~ # 2024-03-24 17:16:00-07 this is the target timestamp to go back to in current cluster + instances: + name: db # high availability + replicas: 2 # 2 or 3 for high availability in TEST and PROD. + metadata: + annotations: + prometheus.io/scrape: 'true' + prometheus.io/port: '9187' + dataVolumeClaimSpec: + storage: 200Mi + storageClassName: netapp-block-standard + walStorage: 255Mi + + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 150m + memory: 256Mi + replicaCertCopy: + requests: + cpu: 1m + memory: 32Mi + limits: + cpu: 50m + memory: 64Mi + + pgBackRest: + enabled: true + backupPath: /backups/test/cluster/version # change it for PROD, create values-prod.yaml + clusterCounter: 1 # this is the number to identify what is the current counter for the cluster, each time it is cloned it should be incremented. + image: artifacts.developer.gov.bc.ca/bcgov-docker-local/crunchy-pgbackrest:ubi8-2.49-0 + # If retention-full-type set to 'count' then the oldest backups will expire when the number of backups reach the number defined in retention + # If retention-full-type set to 'time' then the number defined in retention will take that many days worth of full backups before expiration + retentionFullType: count + s3: + enabled: false # if enabled, below must be provided + retention: 7 # one weeks backup in object store. + bucket: ~ + endpoint: ~ + accessKey: ~ + secretKey: ~ + fullBackupSchedule: ~ # make sure to provide values here, if s3 is enabled. + incrementalBackupSchedule: ~ # make sure to provide values here, if s3 is enabled. + pvc: + retention: 1 # one day hot active backup in pvc + retentionFullType: count + fullBackupSchedule: 0 8 * * * + incrementalBackupSchedule: 0 0,12 * * * # every 12 hour incremental + volume: + accessModes: "ReadWriteOnce" + storage: 100Mi + storageClassName: netapp-file-backup + + config: + requests: + cpu: 5m + memory: 32Mi + limits: + cpu: 20m + memory: 64Mi + repoHost: + requests: + cpu: 20m + memory: 128Mi + limits: + cpu: 50m + memory: 256Mi + sidecars: + requests: + cpu: 5m + memory: 16Mi + limits: + cpu: 20m + memory: 64Mi + jobs: + requests: + cpu: 20m + memory: 128Mi + limits: + cpu: 100m + memory: 256Mi + + patroni: + postgresql: + pg_hba: + - "host all all 0.0.0.0/0 md5" + - "host all all ::1/128 md5" + parameters: + shared_buffers: 16MB # default is 128MB; a good tuned default for shared_buffers is 25% of the memory allocated to the pod + wal_buffers: "64kB" # this can be set to -1 to automatically set as 1/32 of shared_buffers or 64kB, whichever is larger + min_wal_size: 32MB + max_wal_size: 64MB # default is 1GB + max_slot_wal_keep_size: 128MB # default is -1, allowing unlimited wal growth when replicas fall behind + work_mem: 2MB # a work_mem value of 2 MB + log_min_duration_statement: 1000ms # log queries taking more than 1 second to respond. + effective_io_concurrency: 20 #If the underlying disk can handle multiple simultaneous requests, then you should increase the effective_io_concurrency value and test what value provides the best application performance. All BCGov clusters have SSD. + + proxy: + enabled: true + pgBouncer: + image: # it's not necessary to specify an image as the images specified in the Crunchy Postgres Operator will be pulled by default + replicas: 1 + requests: + cpu: 5m + memory: 32Mi + limits: + cpu: 20m + memory: 64Mi + maxConnections: 10 # make sure less than postgres max connections + + # Postgres Cluster resource values: + pgmonitor: + enabled: false + exporter: + image: # it's not necessary to specify an image as the images specified in the Crunchy Postgres Operator will be pulled by default + requests: + cpu: 1m + memory: 16Mi + limits: + cpu: 35m + memory: 32Mi diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..7d2bd70e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,100 @@ +# Reusable vars +x-var: + - &POSTGRES_USER + postgres + - &POSTGRES_PASSWORD + default + - &POSTGRES_DATABASE + postgres + +# Reusable envars for postgres +x-postgres-vars: &postgres-vars + POSTGRES_HOST: database + POSTGRES_USER: *POSTGRES_USER + POSTGRES_PASSWORD: *POSTGRES_PASSWORD + POSTGRES_DATABASE: *POSTGRES_DATABASE + +services: + database: + image: postgis/postgis:16-3.4 # if using crunchy , make sure to align with crunchy version, currently it is at 16 and postgis 3.3 + container_name: database + environment: + <<: *postgres-vars + healthcheck: + test: ["CMD", "pg_isready", "-U", *POSTGRES_USER] + ports: ["5432:5432"] + + migrations: + image: flyway/flyway:10-alpine + container_name: migrations + command: info migrate info + volumes: ["./migrations/sql:/flyway/sql:ro"] + environment: + FLYWAY_URL: jdbc:postgresql://database:5432/postgres + FLYWAY_USER: *POSTGRES_USER + FLYWAY_PASSWORD: *POSTGRES_PASSWORD + FLYWAY_BASELINE_ON_MIGRATE: true + FLYWAY_DEFAULT_SCHEMA: users + depends_on: + database: + condition: service_healthy + + schemaspy: + image: schemaspy/schemaspy:6.2.4 + profiles: ["schemaspy"] + container_name: schemaspy + command: -t pgsql11 -db postgres -host database -port 5432 -u postgres -p default -schemas users + depends_on: + migrations: + condition: service_completed_successfully + volumes: ["./output:/output"] + + backend: + container_name: backend + depends_on: + migrations: + condition: service_started + entrypoint: sh -c "npm i && npm run start:dev" + environment: + <<: *postgres-vars + NODE_ENV: development + image: node:22 + ports: ["3001:3000"] + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/api"] + working_dir: "/app" + volumes: ["./backend:/app", "/app/node_modules"] + + frontend: + container_name: frontend + entrypoint: sh -c "npm ci && npm run dev" + environment: + BACKEND_URL: http://backend:3000 + PORT: 3000 + NODE_ENV: development + image: node:22 + ports: ["3000:3000"] + volumes: ["./frontend:/app", "/app/node_modules"] + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000"] + working_dir: "/app" + depends_on: + backend: + condition: service_healthy + + caddy: + container_name: caddy + profiles: ["caddy"] + build: ./frontend + environment: + NODE_ENV: development + PORT: 3000 + BACKEND_URL: http://backend:3000 + LOG_LEVEL: info + ports: ["3005:3000"] + volumes: ["./frontend/Caddyfile:/etc/caddy/Caddyfile"] + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000"] + depends_on: + backend: + condition: service_healthy diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 00000000..daff023b --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,24 @@ +# Standard exclusions +*.md +.git +.github +.idea +.vscode +Dockerfile +CODE_OF_CONDUCT* +CONTRIBUTING* +LICENSE* +SECURITY* + +# Node exclusions +dist +node_modules + +# App-specific exclusions +coverage +cypress +e2e +migrations +output +test +tests diff --git a/frontend/.eslintignore b/frontend/.eslintignore new file mode 100644 index 00000000..7d455ee9 --- /dev/null +++ b/frontend/.eslintignore @@ -0,0 +1,7 @@ +.husky/ +.vscode/ +.yarn/ +coverage/ +dist/ +public/assets/ +tsconfig.*.json diff --git a/frontend/.eslintrc.yml b/frontend/.eslintrc.yml new file mode 100644 index 00000000..f0883491 --- /dev/null +++ b/frontend/.eslintrc.yml @@ -0,0 +1,75 @@ +env: + browser: true + es2021: true + node: true + +extends: + - 'eslint:recommended' + - 'plugin:react/recommended' + - 'plugin:@typescript-eslint/recommended' + - 'prettier' + - 'plugin:prettier/recommended' + +parser: '@typescript-eslint/parser' + +parserOptions: + ecmaFeatures: + jsx: true + ecmaVersion: 12 + sourceType: module + project: './frontend/tsconfig.json' + +plugins: + - 'react' + - 'react-hooks' + - '@typescript-eslint' + - 'prettier' + - 'cypress' + +settings: + react: + version: 'detect' + +rules: + # General ESLint rules + 'no-console': 'off' + 'no-debugger': 'warn' + 'no-unused-vars': 'off' + 'no-empty': ['error', { allowEmptyCatch: true }] + 'no-undef': 'off' + 'no-use-before-define': 'off' + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: 'react', + importNames: ['default'], + message: "Please import from 'react/jsx-runtime' instead.", + }, + ], + }, + ] + + # React rules + 'react/jsx-uses-react': 'off' + 'react/react-in-jsx-scope': 'off' + 'react/prop-types': 'off' + 'react/display-name': 'off' + 'react-hooks/rules-of-hooks': 'error' + 'react-hooks/exhaustive-deps': 'warn' + + # TypeScript rules + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }] + '@typescript-eslint/explicit-module-boundary-types': 'off' + '@typescript-eslint/no-empty-interface': 'off' + '@typescript-eslint/no-explicit-any': 'off' + '@typescript-eslint/no-non-null-assertion': 'off' + '@typescript-eslint/ban-types': 'off' + '@typescript-eslint/no-use-before-define': ['error', { functions: false }] + '@typescript-eslint/no-var-requires': 'off' + '@typescript-eslint/explicit-function-return-type': 'off' + '@typescript-eslint/consistent-type-imports': [ + 'error', + { prefer: 'type-imports' }, + ] diff --git a/frontend/.prettierrc.yml b/frontend/.prettierrc.yml new file mode 100644 index 00000000..0de77c40 --- /dev/null +++ b/frontend/.prettierrc.yml @@ -0,0 +1,22 @@ +# .prettierrc.yml + +# Use single quotes instead of double quotes +singleQuote: true + +# Use 2 spaces for indentation +tabWidth: 2 + +# Use spaces instead of tabs +useTabs: false + +# Add a trailing comma to the last item in an object or array +trailingComma: 'all' + +# Print semicolons at the ends of statements +semi: false + +# Wrap prose-like comments as-is +proseWrap: 'always' + +# Format files with Unix-style line endings +endOfLine: 'lf' \ No newline at end of file diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 00000000..c0a6e5a4 --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/frontend/Caddyfile b/frontend/Caddyfile new file mode 100644 index 00000000..c13a1734 --- /dev/null +++ b/frontend/Caddyfile @@ -0,0 +1,48 @@ +{ + auto_https off + admin 0.0.0.0:3003 + servers { + metrics + } +} +:3000 { + log { + output stdout + format console { + time_format iso8601 + level_format color + } + level {$LOG_LEVEL} + } + root * /srv + encode zstd gzip + file_server + @spa_router { + not path /api* + file { + try_files {path} /index.html + } + } + rewrite @spa_router {http.matchers.file.relative} + # Proxy requests to API service + reverse_proxy /api* {$BACKEND_URL} { + header_up Host {http.reverse_proxy.upstream.hostport} + header_up X-Real-IP {remote_host} + header_up X-Forwarded-For {remote_host} + } + header { + X-Frame-Options "SAMEORIGIN" + X-XSS-Protection "1;mode=block" + Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate" + X-Content-Type-Options "nosniff" + Strict-Transport-Security "max-age=31536000" + Content-Security-Policy "default-src 'self' https://spt.apps.gov.bc.ca data:; script-src 'self' 'unsafe-eval' https://www2.gov.bc.ca ;style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://use.fontawesome.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https://fonts.googleapis.com http://www.w3.org https://*.gov.bc.ca" + Referrer-Policy "same-origin" + Feature-Policy "fullscreen 'self'; camera 'none'; microphone 'none'" + } +} +:3001 { + handle /health { + respond "OK" + } +} diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 00000000..50fe10c6 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,23 @@ +# Build +FROM node:22-slim AS build + +# Copy, build static files; see .dockerignore for exclusions +WORKDIR /app +COPY . ./ +RUN npm run deploy + +# Deploy using Caddy to host static files +FROM caddy:2.8.4-alpine +RUN apk add --no-cache ca-certificates + +# Copy static files, verify Caddyfile formatting +COPY --from=build /app/dist /srv +COPY Caddyfile /etc/caddy/Caddyfile +RUN caddy fmt /etc/caddy/Caddyfile + +# Boilerplate, not used in OpenShift/Kubernetes +EXPOSE 3000 3001 +HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3001/health + +# Nonroot user +USER 1001 diff --git a/frontend/e2e/pages/dashboard.ts b/frontend/e2e/pages/dashboard.ts new file mode 100644 index 00000000..0519f801 --- /dev/null +++ b/frontend/e2e/pages/dashboard.ts @@ -0,0 +1,22 @@ +import { expect } from '@playwright/test'; +import { baseURL } from '../utils'; +import { Page } from 'playwright'; + +export const dashboard_page = async (page: Page) => { + await page.goto(baseURL); + await expect(page.getByRole('link', { name: 'Government of British Columbia' })).toBeVisible(); + await expect(page.getByText('QuickStart OpenShift')).toBeVisible() + await expect(page.getByText('Employee ID')).toBeVisible(); + await expect(page.getByText('Employee Name')).toBeVisible(); + await expect(page.getByText('Employee Email')).toBeVisible(); + await expect(page.getByRole('link', { name: 'Home' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'About gov.bc.ca' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'Disclaimer' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'Privacy' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'Accessibility' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'Copyright' })).toBeVisible(); + await expect(page.getByRole('link', { name: 'Contact us' })).toBeVisible(); + await page.getByPlaceholder('Search…').click(); + await page.getByPlaceholder('Search…').fill('john'); + await expect(page.locator('#root')).toContainText('1–1 of 1'); +}; diff --git a/frontend/e2e/qsos.spec.ts b/frontend/e2e/qsos.spec.ts new file mode 100644 index 00000000..d61c55d5 --- /dev/null +++ b/frontend/e2e/qsos.spec.ts @@ -0,0 +1,9 @@ +import { test } from '@playwright/test'; +import { dashboard_page } from './pages/dashboard'; + +test.describe.parallel('QSOS', () => { + test('Dashboard Page', async ({ page }) => { + await dashboard_page(page); + }); + +}); diff --git a/frontend/e2e/utils/index.ts b/frontend/e2e/utils/index.ts new file mode 100644 index 00000000..f4fdf711 --- /dev/null +++ b/frontend/e2e/utils/index.ts @@ -0,0 +1 @@ +export const baseURL = process.env.E2E_BASE_URL || 'https://quickstart-openshift-test-frontend.apps.silver.devops.gov.bc.ca/'; diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..a9eb3704 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,16 @@ + + + + + + + + + + QuickStart OpenShift + + +

+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..5f572bab --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,11123 @@ +{ + "name": "quickstart-openshift-react-frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "quickstart-openshift-react-frontend", + "version": "1.0.0", + "dependencies": { + "@bcgov/bc-sans": "^2.1.0", + "@bcgov/design-system-react-components": "^0.4.0", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.0.2", + "@mui/material": "^6.0.2", + "@mui/system": "^6.0.2", + "@mui/x-data-grid": "^7.16.0", + "@vitejs/plugin-react": "^4.3.1", + "axios": "^1.7.7", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router": "^7.0.0", + "react-router-dom": "^7.0.0", + "vite": "^6.0.0", + "vite-tsconfig-paths": "^5.0.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.0.0", + "@playwright/test": "^1.43.1", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.4.3", + "@types/react": "^18.2.6", + "@types/react-dom": "^18.2.4", + "@vitest/coverage-v8": "^2.0.0", + "@vitest/ui": "^2.0.0", + "eslint": "^8.57.0", + "eslint-config-love": "^48.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-cypress": "^2.13.3", + "eslint-plugin-html": "^8.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-tsdoc": "^0.2.17", + "eslint-plugin-yaml": "^0.5.0", + "history": "^5.3.0", + "jsdom": "^25.0.0", + "msw": "^2.4.4", + "playwright": "^1.43.1", + "prettier": "^3.0.0", + "typescript": "^5.1.3", + "vitest": "^2.0.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz", + "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcgov/bc-sans": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@bcgov/bc-sans/-/bc-sans-2.1.0.tgz", + "integrity": "sha512-1MesF4NAVpM5dywoJ68wNcBylHbPqg1dDV/FNuQm0BbspETGlPmfX8LG8rtrCjCAPhWuL2qRT/lBYDUMvFTUnw==", + "license": "SIL" + }, + "node_modules/@bcgov/design-system-react-components": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@bcgov/design-system-react-components/-/design-system-react-components-0.4.0.tgz", + "integrity": "sha512-tZYz/RWnGeX4OqpzBKI3JmvRNNMEOd+MTFU/EEmCQRNBcs2qu9R4oRgT+t9r+exgRgpm19qFjlP7axONjrW8QQ==", + "license": "Apache-2.0", + "dependencies": { + "@bcgov/design-tokens": "3.1.1", + "react-aria-components": "1.3.3" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "*" + }, + "peerDependencies": { + "@bcgov/bc-sans": "^2.1.0", + "react": "^16.14.0 || ^17.0.0-rc.1 || ^18.0.0", + "react-dom": "^16.14.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, + "node_modules/@bcgov/design-tokens": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@bcgov/design-tokens/-/design-tokens-3.1.1.tgz", + "integrity": "sha512-b+7O0SQmqVez6lBL9TBTdWSMLgMRscuuBUaKT0ihR/LloKpnkGFgepoM8P14jNyK4ROn8SdoJv/fhR2FEW7Hug==", + "license": "Apache-2.0" + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "node_modules/@bundled-es-modules/tough-cookie/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.5.tgz", + "integrity": "sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz", + "integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz", + "integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@faker-js/faker": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.2.0.tgz", + "integrity": "sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz", + "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/intl-localematcher": "0.5.8", + "tslib": "2" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz", + "integrity": "sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==", + "license": "MIT", + "dependencies": { + "tslib": "2" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz", + "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/icu-skeleton-parser": "1.8.8", + "tslib": "2" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz", + "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==", + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "tslib": "2" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz", + "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==", + "license": "MIT", + "dependencies": { + "tslib": "2" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@inquirer/confirm": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.2.tgz", + "integrity": "sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.0", + "@inquirer/type": "^3.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.0.tgz", + "integrity": "sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.8", + "@inquirer/type": "^3.0.1", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", + "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", + "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@internationalized/date": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.6.0.tgz", + "integrity": "sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/message": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.6.tgz", + "integrity": "sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "intl-messageformat": "^10.1.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz", + "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.5.tgz", + "integrity": "sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.1", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.1.tgz", + "integrity": "sha512-SvE+tSpcX884RJrPCskXxoS965Ky/pYABDEhWW6oeSRhpUDLrS5nTvT5n1LLSDVDYvty4imVmXsy+3/ROVuknA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.9.tgz", + "integrity": "sha512-TWqj7b1w5cmSz4H/uf+y2AHxAH4ldPR7D2bz0XVyn60GCAo/zRbRPx7cF8gTs/i7CiYeHzV6dtat0VpMwOtolw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.9.tgz", + "integrity": "sha512-AzlhIT51rdjkZ/EcUV2dbhNkNSUHIqCnNoUxodpiTw8buyAUBd+qnxg5OBSuPpun/ZEdSSB8Q7Uyh6zqjiMsEQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^6.1.9", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz", + "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.1.9", + "@mui/system": "^6.1.9", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.9", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.3.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.1.9", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.9.tgz", + "integrity": "sha512-7aum/O1RquBYhfwL/7egDyl9GqJgPM6hoJDFFBbhF6Sgv9yI9v4w3ArKUkuVvR0CtVj4NXRVMKEioh1bjUzvuA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.1.9", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.9.tgz", + "integrity": "sha512-xynSLlJRxHLzSfQaiDjkaTx8LiFb9ByVa7aOdwFnTxGWFMY1F+mkXwAUY4jDDE+MAxkWxlzzQE0wOohnsxhdQg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.9.tgz", + "integrity": "sha512-8x+RucnNp21gfFYsklCaZf0COXbv3+v0lrVuXONxvPEkESi2rwLlOi8UPJfcz6LxZOAX3v3oQ7qw18vnpgueRg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.1.9", + "@mui/styled-engine": "^6.1.9", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.9", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.19", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.19.tgz", + "integrity": "sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.9.tgz", + "integrity": "sha512-N7uzBp7p2or+xanXn3aH2OTINC6F/Ru/U8h6amhRZEev8bJhKN86rIDIoxZZ902tj+09LXtH83iLxFMjMHyqNA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.19", + "@types/prop-types": "^15.7.13", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/x-data-grid": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.23.0.tgz", + "integrity": "sha512-nypSz/7j0HPvW7tRPcZAlQADOiRAE4jTIcxwwJUPLtU17EPJOiw1iB29SRYtUThw4f3aXETPAeT4fzgagpuiKg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0", + "@mui/x-internals": "7.23.0", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "reselect": "^5.1.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0", + "@mui/system": "^5.15.14 || ^6.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.23.0.tgz", + "integrity": "sha512-bPclKpqUiJYIHqmTxSzMVZi6MH51cQsn5U+8jskaTlo3J4QiMeCYJn/gn7YbeR9GOZFp8hetyHjoQoVHKRXCig==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@playwright/test": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", + "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.49.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@react-aria/breadcrumbs": { + "version": "3.5.19", + "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.19.tgz", + "integrity": "sha512-mVngOPFYVVhec89rf/CiYQGTfaLRfHFtX+JQwY7sNYNqSA+gO8p4lNARe3Be6bJPgH+LUQuruIY9/ZDL6LT3HA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/link": "^3.7.7", + "@react-aria/utils": "^3.26.0", + "@react-types/breadcrumbs": "^3.7.9", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/button": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.11.0.tgz", + "integrity": "sha512-b37eIV6IW11KmNIAm65F3SEl2/mgj5BrHIysW6smZX3KoKWTGYsYfcQkmtNgY0GOSFfDxMCoolsZ6mxC00nSDA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/toolbar": "3.0.0-beta.11", + "@react-aria/utils": "^3.26.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/button/node_modules/@react-aria/toolbar": { + "version": "3.0.0-beta.11", + "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.11.tgz", + "integrity": "sha512-LM3jTRFNDgoEpoL568WaiuqiVM7eynSQLJis1hV0vlVnhTd7M7kzt7zoOjzxVb5Uapz02uCp1Fsm4wQMz09qwQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/calendar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.6.0.tgz", + "integrity": "sha512-tZ3nd5DP8uxckbj83Pt+4RqgcTWDlGi7njzc7QqFOG2ApfnYDUXbIpb/Q4KY6JNlJskG8q33wo0XfOwNy8J+eg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-stately/calendar": "^3.6.0", + "@react-types/button": "^3.10.1", + "@react-types/calendar": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/checkbox": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.15.0.tgz", + "integrity": "sha512-z/8xd4em7o0MroBXwkkwv7QRwiJaA1FwqMhRUb7iqtBGP2oSytBEDf0N7L09oci32a1P4ZPz2rMK5GlLh/PD6g==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.0.11", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/toggle": "^3.10.10", + "@react-aria/utils": "^3.26.0", + "@react-stately/checkbox": "^3.6.10", + "@react-stately/form": "^3.1.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/collections": { + "version": "3.0.0-alpha.4", + "resolved": "https://registry.npmjs.org/@react-aria/collections/-/collections-3.0.0-alpha.4.tgz", + "integrity": "sha512-chMNAlsubnpErBWN7sLhmAMOnE7o17hSfq3s0VDHlvRN9K/mPOPlYokmyWkkPqi7fYiR50EPVHDtwTWLJoqfnw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.5", + "@react-aria/utils": "^3.25.2", + "@react-types/shared": "^3.24.1", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@react-aria/color": { + "version": "3.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.0-rc.2.tgz", + "integrity": "sha512-h4P7LocDEHPOEWgHYb8VPJLRGkyMhcsXemmvGao6G23zGTpTX8Nr6pEuJhcXQlGWt8hXvj/ASnC750my+zb1yA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.2", + "@react-aria/interactions": "^3.22.2", + "@react-aria/numberfield": "^3.11.6", + "@react-aria/slider": "^3.7.11", + "@react-aria/spinbutton": "^3.6.8", + "@react-aria/textfield": "^3.14.8", + "@react-aria/utils": "^3.25.2", + "@react-aria/visually-hidden": "^3.8.15", + "@react-stately/color": "^3.7.2", + "@react-stately/form": "^3.0.5", + "@react-types/color": "3.0.0-rc.1", + "@react-types/shared": "^3.24.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@react-aria/combobox": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.11.0.tgz", + "integrity": "sha512-s88YMmPkMO1WSoiH1KIyZDLJqUwvM2wHXXakj3cYw1tBHGo4rOUFq+JWQIbM5EDO4HOR4AUUqzIUd0NO7t3zyg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/listbox": "^3.13.6", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/menu": "^3.16.0", + "@react-aria/overlays": "^3.24.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/combobox": "^3.10.1", + "@react-stately/form": "^3.1.0", + "@react-types/button": "^3.10.1", + "@react-types/combobox": "^3.13.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/datepicker": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.12.0.tgz", + "integrity": "sha512-VYNXioLfddIHpwQx211+rTYuunDmI7VHWBRetCpH3loIsVFuhFSRchTQpclAzxolO3g0vO7pMVj9VYt7Swp6kg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/utils": "^3.26.0", + "@react-stately/datepicker": "^3.11.0", + "@react-stately/form": "^3.1.0", + "@react-types/button": "^3.10.1", + "@react-types/calendar": "^3.5.0", + "@react-types/datepicker": "^3.9.0", + "@react-types/dialog": "^3.5.14", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/dialog": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.20.tgz", + "integrity": "sha512-l0GZVLgeOd3kL3Yj8xQW7wN3gn9WW3RLd/SGI9t7ciTq+I/FhftjXCWzXLlOCCTLMf+gv7eazecECtmoWUaZWQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/overlays": "^3.24.0", + "@react-aria/utils": "^3.26.0", + "@react-types/dialog": "^3.5.14", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/disclosure": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-aria/disclosure/-/disclosure-3.0.0.tgz", + "integrity": "sha512-xO9QTQSvymujTjCs1iCQ4+dKZvtF/rVVaFZBKlUtqIqwTHMdqeZu4fh5miLEnTyVLNHMGzLrFggsd8Q+niC9Og==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-stately/disclosure": "^3.0.0", + "@react-types/button": "^3.10.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/dnd": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.8.0.tgz", + "integrity": "sha512-JiqHY3E9fDU5Kb4gN22cuK6QNlpMCGe6ngR/BV+Q8mLEsdoWcoUAYOtYXVNNTRvCdVbEWI87FUU+ThyPpoDhNQ==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/string": "^3.2.5", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/overlays": "^3.24.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/dnd": "^3.5.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.19.0.tgz", + "integrity": "sha512-hPF9EXoUQeQl1Y21/rbV2H4FdUR2v+4/I0/vB+8U3bT1CJ+1AFj1hc/rqx2DqEwDlEwOHN+E4+mRahQmlybq0A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/form": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.11.tgz", + "integrity": "sha512-oXzjTiwVuuWjZ8muU0hp3BrDH5qjVctLOF50mjPvqUbvXQTHhoDxWweyIXPQjGshaqBd2w4pWaE4A2rG2O/apw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/grid": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.11.0.tgz", + "integrity": "sha512-lN5FpQgu2Rq0CzTPWmzRpq6QHcMmzsXYeClsgO3108uVp1/genBNAObYVTxGOKe/jb9q99trz8EtIn05O6KN1g==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/grid": "^3.10.0", + "@react-stately/selection": "^3.18.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/gridlist": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.10.0.tgz", + "integrity": "sha512-UcblfSZ7kJBrjg9mQ5VbnRevN81UiYB4NuL5PwIpBpridO7tnl4ew6+96PYU7Wj1chHhPS3x0b0zmuSVN7A0LA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/grid": "^3.11.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/list": "^3.11.1", + "@react-stately/tree": "^3.8.6", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/i18n": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.4.tgz", + "integrity": "sha512-j9+UL3q0Ls8MhXV9gtnKlyozq4aM95YywXqnmJtzT1rYeBx7w28hooqrWkCYLfqr4OIryv1KUnPiCSLwC2OC7w==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/message": "^3.1.6", + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.22.5", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.5.tgz", + "integrity": "sha512-kMwiAD9E0TQp+XNnOs13yVJghiy8ET8L0cbkeuTgNI96sOAp/63EJ1FSrDf17iD8sdjt41LafwX/dKXW9nCcLQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/label": { + "version": "3.7.13", + "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.13.tgz", + "integrity": "sha512-brSAXZVTey5RG/Ex6mTrV/9IhGSQFU4Al34qmjEDho+Z2qT4oPwf8k7TRXWWqzOU0ugYxekYbsLd2zlN3XvWcg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/link": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.7.tgz", + "integrity": "sha512-eVBRcHKhNSsATYWv5wRnZXRqPVcKAWWakyvfrYePIKpC3s4BaHZyTGYdefk8ZwZdEOuQZBqLMnjW80q1uhtkuA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/link": "^3.5.9", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/listbox": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.13.6.tgz", + "integrity": "sha512-6hEXEXIZVau9lgBZ4VVjFR3JnGU+fJaPmV3HP0UZ2ucUptfG0MZo24cn+ZQJsWiuaCfNFv5b8qribiv+BcO+Kg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/list": "^3.11.1", + "@react-types/listbox": "^3.5.3", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/live-announcer": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.4.1.tgz", + "integrity": "sha512-4X2mcxgqLvvkqxv2l1n00jTzUxxe0kkLiapBGH1LHX/CxA1oQcHDqv8etJ2ZOwmS/MSBBiWnv3DwYHDOF6ubig==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-aria/menu": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.16.0.tgz", + "integrity": "sha512-TNk+Vd3TbpBPUxEloAdHRTaRxf9JBK7YmkHYiq0Yj5Lc22KS0E2eTyhpPM9xJvEWN2TlC5TEvNfdyui2kYWFFQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/overlays": "^3.24.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/collections": "^3.12.0", + "@react-stately/menu": "^3.9.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/tree": "^3.8.6", + "@react-types/button": "^3.10.1", + "@react-types/menu": "^3.9.13", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/meter": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.18.tgz", + "integrity": "sha512-tTX3LLlmDIHqrC42dkdf+upb1c4UbhlpZ52gqB64lZD4OD4HE+vMTwNSe+7MRKMLvcdKPWCRC35PnxIHZ15kfQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/progress": "^3.4.18", + "@react-types/meter": "^3.4.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/numberfield": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.9.tgz", + "integrity": "sha512-3tiGPx2y4zyOV7PmdBASes99ZZsFTZAJTnU45Z+p1CW4131lw7y2ZhbojBl7U6DaXAJvi1z6zY6cq2UE9w5a0Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-stately/numberfield": "^3.9.8", + "@react-types/button": "^3.10.1", + "@react-types/numberfield": "^3.8.7", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/overlays": { + "version": "3.24.0", + "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.24.0.tgz", + "integrity": "sha512-0kAXBsMNTc/a3M07tK9Cdt/ea8CxTAEJ223g8YgqImlmoBBYAL7dl5G01IOj67TM64uWPTmZrOklBchHWgEm3A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/ssr": "^3.9.7", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/overlays": "^3.6.12", + "@react-types/button": "^3.10.1", + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/progress": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.18.tgz", + "integrity": "sha512-FOLgJ9t9i1u3oAAimybJG6r7/soNPBnJfWo4Yr6MmaUv90qVGa1h6kiuM5m9H/bm5JobAebhdfHit9lFlgsCmg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-types/progress": "^3.5.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/radio": { + "version": "3.10.10", + "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.10.tgz", + "integrity": "sha512-NVdeOVrsrHgSfwL2jWCCXFsWZb+RMRZErj5vthHQW4nkHECGOzeX56VaLWTSvdoCPqi9wdIX8A6K9peeAIgxzA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/radio": "^3.10.9", + "@react-types/radio": "^3.8.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/searchfield": { + "version": "3.7.11", + "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.11.tgz", + "integrity": "sha512-wFf6QxtBFfoxy0ANxI0+ftFEBGynVCY0+ce4H4Y9LpUTQsIKMp3sdc7LoUFORWw5Yee6Eid5cFPQX0Ymnk+ZJg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/searchfield": "^3.5.8", + "@react-types/button": "^3.10.1", + "@react-types/searchfield": "^3.5.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/select": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.15.0.tgz", + "integrity": "sha512-zgBOUNy81aJplfc3NKDJMv8HkXjBGzaFF3XDzNfW8vJ7nD9rcTRUN5SQ1XCEnKMv12B/Euk9zt6kd+tX0wk1vQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/form": "^3.0.11", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/listbox": "^3.13.6", + "@react-aria/menu": "^3.16.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/select": "^3.6.9", + "@react-types/button": "^3.10.1", + "@react-types/select": "^3.9.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/selection": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.21.0.tgz", + "integrity": "sha512-52JJ6hlPcM+gt0VV3DBmz6Kj1YAJr13TfutrKfGWcK36LvNCBm1j0N+TDqbdnlp8Nue6w0+5FIwZq44XPYiBGg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/selection": "^3.18.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/separator": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.4.4.tgz", + "integrity": "sha512-dH+qt0Mdh0nhKXCHW6AR4DF8DKLUBP26QYWaoThPdBwIpypH/JVKowpPtWms1P4b36U6XzHXHnTTEn/ZVoCqNA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/slider": { + "version": "3.7.14", + "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.14.tgz", + "integrity": "sha512-7rOiKjLkEZ0j7mPMlwrqivc+K4OSfL14slaQp06GHRiJkhiWXh2/drPe15hgNq55HmBQBpA0umKMkJcqVgmXPA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/slider": "^3.6.0", + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/spinbutton": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.10.tgz", + "integrity": "sha512-nhYEYk7xUNOZDaqiQ5w/nHH9ouqjJbabTWXH+KK7UR1oVGfo4z1wG94l8KWF3Z6SGGnBxzLJyTBguZ4g9aYTSg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz", + "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/switch": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.10.tgz", + "integrity": "sha512-FtaI9WaEP1tAmra1sYlAkYXg9x75P5UtgY8pSbe9+1WRyWbuE1QZT+RNCTi3IU4fZ7iJQmXH6+VaMyzPlSUagw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/toggle": "^3.10.10", + "@react-stately/toggle": "^3.8.0", + "@react-types/shared": "^3.26.0", + "@react-types/switch": "^3.5.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/table": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.16.0.tgz", + "integrity": "sha512-9xF9S3CJ7XRiiK92hsIKxPedD0kgcQWwqTMtj3IBynpQ4vsnRiW3YNIzrn9C3apjknRZDTSta8O2QPYCUMmw2A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/grid": "^3.11.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/live-announcer": "^3.4.1", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/collections": "^3.12.0", + "@react-stately/flags": "^3.0.5", + "@react-stately/table": "^3.13.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tabs": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.8.tgz", + "integrity": "sha512-Nur/qRFBe+Zrt4xcCJV/ULXCS3Mlae+B89bp1Gl20vSDqk6uaPtGk+cS5k03eugOvas7AQapqNJsJgKd66TChw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/tabs": "^3.7.0", + "@react-types/shared": "^3.26.0", + "@react-types/tabs": "^3.3.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tag": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.4.8.tgz", + "integrity": "sha512-exWl52bsFtJuzaqMYvSnLteUoPqb3Wf+uICru/yRtREJsWVqjJF38NCVlU73Yqd9qMPTctDrboSZFAWAWKDxoA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/gridlist": "^3.10.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/selection": "^3.21.0", + "@react-aria/utils": "^3.26.0", + "@react-stately/list": "^3.11.1", + "@react-types/button": "^3.10.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/textfield": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.15.0.tgz", + "integrity": "sha512-V5mg7y1OR6WXYHdhhm4FC7QyGc9TideVRDFij1SdOJrIo5IFB7lvwpOS0GmgwkVbtr71PTRMjZnNbrJUFU6VNA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/form": "^3.0.11", + "@react-aria/label": "^3.7.13", + "@react-aria/utils": "^3.26.0", + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@react-types/textfield": "^3.10.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toggle": { + "version": "3.10.10", + "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.10.tgz", + "integrity": "sha512-QwMT/vTNrbrILxWVHfd9zVQ3mV2NdBwyRu+DphVQiFAXcmc808LEaIX2n0lI6FCsUDC9ZejCyvzd91/YemdZ1Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/toggle": "^3.8.0", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/toolbar": { + "version": "3.0.0-beta.8", + "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.8.tgz", + "integrity": "sha512-nMlA1KK54/Kohb3HlHAzobg69PVIEr8Q1j5P3tLd9apY8FgGvnz7yLpcj6kO1GA872gseEzgiO0Rzk+yRHQRCA==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.18.2", + "@react-aria/i18n": "^3.12.2", + "@react-aria/utils": "^3.25.2", + "@react-types/shared": "^3.24.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@react-aria/tooltip": { + "version": "3.7.10", + "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.10.tgz", + "integrity": "sha512-Udi3XOnrF/SYIz72jw9bgB74MG/yCOzF5pozHj2FH2HiJlchYv/b6rHByV/77IZemdlkmL/uugrv/7raPLSlnw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/focus": "^3.19.0", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/tooltip": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@react-types/tooltip": "^3.4.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/tree": { + "version": "3.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/@react-aria/tree/-/tree-3.0.0-alpha.5.tgz", + "integrity": "sha512-6JtkvQ/KQNFyqxc5M6JMVY63heHt2gZAwXxEt+Ojx/sbWDtDb5RrZVgkb44n7R/tMrFPJEiYZLMFPbGCsUQeJQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/gridlist": "^3.9.3", + "@react-aria/i18n": "^3.12.2", + "@react-aria/selection": "^3.19.3", + "@react-aria/utils": "^3.25.2", + "@react-stately/tree": "^3.8.4", + "@react-types/button": "^3.9.6", + "@react-types/shared": "^3.24.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.26.0.tgz", + "integrity": "sha512-LkZouGSjjQ0rEqo4XJosS4L3YC/zzQkfRM3KoqK6fUOmUJ9t0jQ09WjiF+uOoG9u+p30AVg3TrZRUWmoTS+koQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.7", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/virtualizer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-4.1.0.tgz", + "integrity": "sha512-ziSq3Y7iuaAMJWGZU1RRs/TykuPapQfx8dyH2eyKPLgEjBUoXRGWE7n6jklBwal14b0lPK0wkCzRoQbkUvX3cg==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-stately/virtualizer": "^4.2.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/visually-hidden": { + "version": "3.8.18", + "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.18.tgz", + "integrity": "sha512-l/0igp+uub/salP35SsNWq5mGmg3G5F5QMS1gDZ8p28n7CgjvzyiGhJbbca7Oxvaw1HRFzVl9ev+89I7moNnFQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.22.5", + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/calendar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.6.0.tgz", + "integrity": "sha512-GqUtOtGnwWjtNrJud8nY/ywI4VBP5byToNVRTnxbMl+gYO1Qe/uc5NG7zjwMxhb2kqSBHZFdkF0DXVqG2Ul+BA==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-stately/utils": "^3.10.5", + "@react-types/calendar": "^3.5.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/checkbox": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.10.tgz", + "integrity": "sha512-LHm7i4YI8A/RdgWAuADrnSAYIaYYpQeZqsp1a03Og0pJHAlZL0ymN3y2IFwbZueY0rnfM+yF+kWNXjJqbKrFEQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/collections": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.0.tgz", + "integrity": "sha512-MfR9hwCxe5oXv4qrLUnjidwM50U35EFmInUeFf8i9mskYwWlRYS0O1/9PZ0oF1M0cKambaRHKEy98jczgb9ycA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/color": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.8.1.tgz", + "integrity": "sha512-7eN7K+KJRu+rxK351eGrzoq2cG+yipr90i5b1cUu4lioYmcH4WdsfjmM5Ku6gypbafH+kTDfflvO6hiY1NZH+A==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/number": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-aria/i18n": "^3.12.4", + "@react-stately/form": "^3.1.0", + "@react-stately/numberfield": "^3.9.8", + "@react-stately/slider": "^3.6.0", + "@react-stately/utils": "^3.10.5", + "@react-types/color": "^3.0.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/color/node_modules/@react-types/color": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.1.tgz", + "integrity": "sha512-KemFziO3GbmT3HEKrgOGdqNA6Gsmy9xrwFO3f8qXSG7gVz6M27Ic4R9HVQv4iAjap5uti6W13/pk2bc/jLVcEA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/combobox": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.10.1.tgz", + "integrity": "sha512-Rso+H+ZEDGFAhpKWbnRxRR/r7YNmYVtt+Rn0eNDNIUp3bYaxIBCdCySyAtALs4I8RZXZQ9zoUznP7YeVwG3cLg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/overlays": "^3.6.12", + "@react-stately/select": "^3.6.9", + "@react-stately/utils": "^3.10.5", + "@react-types/combobox": "^3.13.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/data": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.12.0.tgz", + "integrity": "sha512-6PiW2oA56lcH1CVjDcajutzsv91w/PER8K61/OGxtNFFUWaIZH80RWmK4kjU/Lf0vygzXCxout3kEb388lUk0w==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/datepicker": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.11.0.tgz", + "integrity": "sha512-d9MJF34A0VrhL5y5S8mAISA8uwfNCQKmR2k4KoQJm3De1J8SQeNzSjLviAwh1faDow6FXGlA6tVbTrHyDcBgBg==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@internationalized/string": "^3.2.5", + "@react-stately/form": "^3.1.0", + "@react-stately/overlays": "^3.6.12", + "@react-stately/utils": "^3.10.5", + "@react-types/datepicker": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/disclosure": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-stately/disclosure/-/disclosure-3.0.0.tgz", + "integrity": "sha512-Z9+fi0/41ZXHjGopORQza7mk4lFEFslKhy65ehEo6O6j2GuIV0659ExIVDsmJoJSFjXCfGh0sX8oTSOlXi9gqg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/dnd": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.5.0.tgz", + "integrity": "sha512-ZcWFw1npEDnATiy3TEdzA1skQ3UEIyfbNA6VhPNO8yiSVLxoxBOaEaq8VVS72fRGAtxud6dgOy8BnsP9JwDClQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/selection": "^3.18.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.5.tgz", + "integrity": "sha512-6wks4csxUwPCp23LgJSnkBRhrWpd9jGd64DjcCTNB2AHIFu7Ab1W59pJpUL6TW7uAxVxdNKjgn6D1hlBy8qWsA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/form": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.1.0.tgz", + "integrity": "sha512-E2wxNQ0QaTyDHD0nJFtTSnEH9A3bpJurwxhS4vgcUmESHgjFEMLlC9irUSZKgvOgb42GAq+fHoWBsgKeTp9Big==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/grid": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.10.0.tgz", + "integrity": "sha512-ii+DdsOBvCnHMgL0JvUfFwO1kiAPP19Bpdpl6zn/oOltk6F5TmnoyNrzyz+2///1hCiySI3FE1O7ujsAQs7a6Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/layout": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-4.1.0.tgz", + "integrity": "sha512-pSBqn+4EeOaf2QMK+w2SHgsWKYHdgMZWY3qgJijdzWGZ4JpYmHuiD0yOq80qFdUwxcexPW3vFg3hqIQlMpXeCw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/table": "^3.13.0", + "@react-stately/virtualizer": "^4.2.0", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/list": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.11.1.tgz", + "integrity": "sha512-UCOpIvqBOjwLtk7zVTYWuKU1m1Oe61Q5lNar/GwHaV1nAiSQ8/yYlhr40NkBEs9X3plEfsV28UIpzOrYnu1tPg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/menu": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.0.tgz", + "integrity": "sha512-++sm0fzZeUs9GvtRbj5RwrP+KL9KPANp9f4SvtI3s+MP+Y/X3X7LNNePeeccGeyikB5fzMsuyvd82bRRW9IhDQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.12", + "@react-types/menu": "^3.9.13", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/numberfield": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.8.tgz", + "integrity": "sha512-J6qGILxDNEtu7yvd3/y+FpbrxEaAeIODwlrFo6z1kvuDlLAm/KszXAc75yoDi0OtakFTCMP6/HR5VnHaQdMJ3w==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/number": "^3.6.0", + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/numberfield": "^3.8.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/overlays": { + "version": "3.6.12", + "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.12.tgz", + "integrity": "sha512-QinvZhwZgj8obUyPIcyURSCjTZlqZYRRCS60TF8jH8ZpT0tEAuDb3wvhhSXuYA3Xo9EHLwvLjEf3tQKKdAQArw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/overlays": "^3.8.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/radio": { + "version": "3.10.9", + "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.9.tgz", + "integrity": "sha512-kUQ7VdqFke8SDRCatw2jW3rgzMWbvw+n2imN2THETynI47NmNLzNP11dlGO2OllRtTrsLhmBNlYHa3W62pFpAw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/utils": "^3.10.5", + "@react-types/radio": "^3.8.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/searchfield": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.8.tgz", + "integrity": "sha512-jtquvGadx1DmtQqPKaVO6Qg/xpBjNxsOd59ciig9xRxpxV+90i996EX1E2R6R+tGJdSM1pD++7PVOO4yE++HOg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/searchfield": "^3.5.10", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/select": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.9.tgz", + "integrity": "sha512-vASUDv7FhEYQURzM+JIwcusPv7/x/l3zHc/oKJPvoCl3aa9pwS8hZwS82SC00o2iFnrDscfDJju4IE/cd4hucg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/overlays": "^3.6.12", + "@react-types/select": "^3.9.8", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/selection": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.18.0.tgz", + "integrity": "sha512-6EaNNP3exxBhW2LkcRR4a3pg+3oDguZlBSqIVVR7lyahv/D8xXHRC4dX+m0mgGHJpsgjs7664Xx6c8v193TFxg==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/slider": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.6.0.tgz", + "integrity": "sha512-w5vJxVh267pmD1X+Ppd9S3ZzV1hcg0cV8q5P4Egr160b9WMcWlUspZPtsthwUlN7qQe/C8y5IAhtde4s29eNag==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/table": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.13.0.tgz", + "integrity": "sha512-mRbNYrwQIE7xzVs09Lk3kPteEVFVyOc20vA8ph6EP54PiUf/RllJpxZe/WUYLf4eom9lUkRYej5sffuUBpxjCA==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/flags": "^3.0.5", + "@react-stately/grid": "^3.10.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0", + "@react-types/table": "^3.10.3", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tabs": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.7.0.tgz", + "integrity": "sha512-ox4hTkfZCoR4Oyr3Op3rBlWNq2Wxie04vhEYpTZQ2hobR3l4fYaOkd7CPClILktJ3TC104j8wcb0knWxIBRx9w==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/list": "^3.11.1", + "@react-types/shared": "^3.26.0", + "@react-types/tabs": "^3.3.11", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/toggle": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.8.0.tgz", + "integrity": "sha512-pyt/k/J8BwE/2g6LL6Z6sMSWRx9HEJB83Sm/MtovXnI66sxJ2EfQ1OaXB7Su5PEL9OMdoQF6Mb+N1RcW3zAoPw==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/utils": "^3.10.5", + "@react-types/checkbox": "^3.9.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tooltip": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.0.tgz", + "integrity": "sha512-+xzPNztJDd2XJD0X3DgWKlrgOhMqZpSzsIssXeJgO7uCnP8/Z513ESaipJhJCFC8fxj5caO/DK4Uu8hEtlB8cQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/overlays": "^3.6.12", + "@react-types/tooltip": "^3.4.13", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/tree": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.6.tgz", + "integrity": "sha512-lblUaxf1uAuIz5jm6PYtcJ+rXNNVkqyFWTIMx6g6gW/mYvm8GNx1G/0MLZE7E6CuDGaO9dkLSY2bB1uqyKHidA==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/collections": "^3.12.0", + "@react-stately/selection": "^3.18.0", + "@react-stately/utils": "^3.10.5", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.5", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz", + "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/virtualizer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.2.0.tgz", + "integrity": "sha512-aTMpa9AQoz/xLqn8AI1BR/caUUY7/OUo9GbuF434w2u5eGCL7+SAn3Fmq7WSCwqYyDsO+jEIERek4JTX7pEW0A==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/utils": "^3.26.0", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/breadcrumbs": { + "version": "3.7.9", + "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.9.tgz", + "integrity": "sha512-eARYJo8J+VfNV8vP4uw3L2Qliba9wLV2bx9YQCYf5Lc/OE5B/y4gaTLz+Y2P3Rtn6gBPLXY447zCs5i7gf+ICg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/link": "^3.5.9", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/button": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.10.1.tgz", + "integrity": "sha512-XTtap8o04+4QjPNAshFWOOAusUTxQlBjU2ai0BTVLShQEjHhRVDBIWsI2B2FKJ4KXT6AZ25llaxhNrreWGonmA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/calendar": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.5.0.tgz", + "integrity": "sha512-O3IRE7AGwAWYnvJIJ80cOy7WwoJ0m8GtX/qSmvXQAjC4qx00n+b5aFNBYAQtcyc3RM5QpW6obs9BfwGetFiI8w==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/checkbox": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.9.0.tgz", + "integrity": "sha512-9hbHx0Oo2Hp5a8nV8Q75LQR0DHtvOIJbFaeqESSopqmV9EZoYjtY/h0NS7cZetgahQgnqYWQi44XGooMDCsmxA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/color": { + "version": "3.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.0-rc.1.tgz", + "integrity": "sha512-aw6FzrBlZTWKrFaFskM7e3AFICe6JqH10wO0E919goa3LZDDFbyYEwRpatwjIyiZH1elEUkFPgwqpv3ZcPPn8g==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.24.1", + "@react-types/slider": "^3.7.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@react-types/combobox": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.1.tgz", + "integrity": "sha512-7xr+HknfhReN4QPqKff5tbKTe2kGZvH+DGzPYskAtb51FAAiZsKo+WvnNAvLwg3kRoC9Rkn4TAiVBp/HgymRDw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/datepicker": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.9.0.tgz", + "integrity": "sha512-dbKL5Qsm2MQwOTtVQdOcKrrphcXAqDD80WLlSQrBLg+waDuuQ7H+TrvOT0thLKloNBlFUGnZZfXGRHINpih/0g==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.6.0", + "@react-types/calendar": "^3.5.0", + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/dialog": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.14.tgz", + "integrity": "sha512-OXWMjrALwrlgw8aHD8SeRm/s3tbAssdaEh2h73KUSeFau3fU3n5mfKv+WnFqsEaOtN261o48l7hTlS6615H9AA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/form": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.8.tgz", + "integrity": "sha512-0wOS97/X0ijTVuIqik1lHYTZnk13QkvMTKvIEhM7c6YMU3vPiirBwLbT2kJiAdwLiymwcCkrBdDF1NTRG6kPFA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/grid": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.10.tgz", + "integrity": "sha512-Z5cG0ITwqjUE4kWyU5/7VqiPl4wqMJ7kG/ZP7poAnLmwRsR8Ai0ceVn+qzp5nTA19cgURi8t3LsXn3Ar1FBoog==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/link": { + "version": "3.5.9", + "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.9.tgz", + "integrity": "sha512-JcKDiDMqrq/5Vpn+BdWQEuXit4KN4HR/EgIi3yKnNbYkLzxBoeQZpQgvTaC7NEQeZnSqkyXQo3/vMUeX/ZNIKw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/listbox": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.5.3.tgz", + "integrity": "sha512-v1QXd9/XU3CCKr2Vgs7WLcTr6VMBur7CrxHhWZQQFExsf9bgJ/3wbUdjy4aThY/GsYHiaS38EKucCZFr1QAfqA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/menu": { + "version": "3.9.13", + "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.13.tgz", + "integrity": "sha512-7SuX6E2tDsqQ+HQdSvIda1ji/+ujmR86dtS9CUu5yWX91P25ufRjZ72EvLRqClWNQsj1Xl4+2zBDLWlceznAjw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/meter": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.4.5.tgz", + "integrity": "sha512-04w1lEtvP/c3Ep8ND8hhH2rwjz2MtQ8o8SNLhahen3u0rX3jKOgD4BvHujsyvXXTMjj1Djp74sGzNawb4Ppi9w==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/progress": "^3.5.8" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/numberfield": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.7.tgz", + "integrity": "sha512-KccMPi39cLoVkB2T0V7HW6nsxQVAwt89WWCltPZJVGzsebv/k0xTQlPVAgrUake4kDLoE687e3Fr/Oe3+1bDhw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/overlays": { + "version": "3.8.11", + "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.11.tgz", + "integrity": "sha512-aw7T0rwVI3EuyG5AOaEIk8j7dZJQ9m34XAztXJVZ/W2+4pDDkLDbJ/EAPnuo2xGYRGhowuNDn4tDju01eHYi+w==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/progress": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.8.tgz", + "integrity": "sha512-PR0rN5mWevfblR/zs30NdZr+82Gka/ba7UHmYOW9/lkKlWeD7PHgl1iacpd/3zl/jUF22evAQbBHmk1mS6Mpqw==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/radio": { + "version": "3.8.5", + "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.5.tgz", + "integrity": "sha512-gSImTPid6rsbJmwCkTliBIU/npYgJHOFaI3PNJo7Y0QTAnFelCtYeFtBiWrFodSArSv7ASqpLLUEj9hZu/rxIg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/searchfield": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.10.tgz", + "integrity": "sha512-7wW4pJzbReawoGPu8a4l+CODTCDN088EN/ysUzl622ewim57PjArjix+lpO4+aEtJqS9HKpq8UEbjwo9axpcUA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@react-types/textfield": "^3.10.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/select": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.8.tgz", + "integrity": "sha512-RGsYj2oFjXpLnfcvWMBQnkcDuKkwT43xwYWZGI214/gp/B64tJiIUgTM5wFTRAeGDX23EePkhCQF+9ctnqFd6g==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.26.0.tgz", + "integrity": "sha512-6FuPqvhmjjlpEDLTiYx29IJCbCNWPlsyO+ZUmCUXzhUv2ttShOXfw8CmeHWHftT/b2KweAWuzqSlfeXPR76jpw==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/slider": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.7.tgz", + "integrity": "sha512-lYTR9zXQV2fSEm/G3gwDENWiki1IXd/oorsgf0zu1DBi2SQDbOsLsGUXiwvD24Xy6OkUuhAqjLPPexezo7+u9g==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/switch": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.7.tgz", + "integrity": "sha512-1IKiq510rPTHumEZuhxuazuXBa2Cuxz6wBIlwf3NCVmgWEvU+uk1ETG0sH2yymjwCqhtJDKXi+qi9HSgPEDwAg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/table": { + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.10.3.tgz", + "integrity": "sha512-Ac+W+m/zgRzlTU8Z2GEg26HkuJFswF9S6w26r+R3MHwr8z2duGPvv37XRtE1yf3dbpRBgHEAO141xqS2TqGwNg==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/grid": "^3.2.10", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tabs": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.11.tgz", + "integrity": "sha512-BjF2TqBhZaIcC4lc82R5pDJd1F7kstj1K0Nokhz99AGYn8C0ITdp6lR+DPVY9JZRxKgP9R2EKfWGI90Lo7NQdA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/textfield": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.10.0.tgz", + "integrity": "sha512-ShU3d6kLJGQjPXccVFjM3KOXdj3uyhYROqH9YgSIEVxgA9W6LRflvk/IVBamD9pJYTPbwmVzuP0wQkTDupfZ1w==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/tooltip": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.13.tgz", + "integrity": "sha512-KPekFC17RTT8kZlk7ZYubueZnfsGTDOpLw7itzolKOXGddTXsrJGBzSB4Bb060PBVllaDO0MOrhPap8OmrIl1Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/overlays": "^3.8.11", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.0.tgz", + "integrity": "sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.0.tgz", + "integrity": "sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.0.tgz", + "integrity": "sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.0.tgz", + "integrity": "sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.0.tgz", + "integrity": "sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.0.tgz", + "integrity": "sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.0.tgz", + "integrity": "sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.0.tgz", + "integrity": "sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.0.tgz", + "integrity": "sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.0.tgz", + "integrity": "sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.0.tgz", + "integrity": "sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.0.tgz", + "integrity": "sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.0.tgz", + "integrity": "sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.0.tgz", + "integrity": "sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.0.tgz", + "integrity": "sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.0.tgz", + "integrity": "sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.0.tgz", + "integrity": "sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.0.tgz", + "integrity": "sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", + "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/react": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz", + "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@testing-library/dom": "^10.0.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "devOptional": true, + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.6.tgz", + "integrity": "sha512-qItJVYDbG3MUFO68dOZUz+rWlqe9LMzotERXFXKg25s2A/kSVsyS9O0yNGrITfBd943GsnBeQZkBUu7Pc+zVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.6", + "vitest": "2.1.6" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.6.tgz", + "integrity": "sha512-9M1UR9CAmrhJOMoSwVnPh2rELPKhYo0m/CSgqw9PyStpxtkwhmdM6XYlXGKeYyERY1N6EIuzkQ7e3Lm1WKCoUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.6", + "@vitest/utils": "2.1.6", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.6.tgz", + "integrity": "sha512-MHZp2Z+Q/A3am5oD4WSH04f9B0T7UvwEb+v5W0kCYMhtXGYbdyl2NUk1wdSMqGthmhpiThPDp/hEoVwu16+u1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.6", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.6.tgz", + "integrity": "sha512-exZyLcEnHgDMKc54TtHca4McV4sKT+NKAe9ix/yhd/qkYb/TP8HTyXRFDijV19qKqTZM0hPL4753zU/U8L/gAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.6.tgz", + "integrity": "sha512-SjkRGSFyrA82m5nz7To4CkRSEVWn/rwQISHoia/DB8c6IHIhaE/UNAo+7UfeaeJRE979XceGl00LNkIz09RFsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.6", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.6.tgz", + "integrity": "sha512-5JTWHw8iS9l3v4/VSuthCndw1lN/hpPB+mlgn1BUhFbobeIUj1J1V/Bj2t2ovGEmkXLTckFjQddsxS5T6LuVWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.6", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.6.tgz", + "integrity": "sha512-oTFObV8bd4SDdRka5O+mSh5w9irgx5IetrD5i+OsUUsk/shsBoHifwCzy45SAORzAhtNiprUVaK3hSCCzZh1jQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-2.1.6.tgz", + "integrity": "sha512-SrpLAM0/xpOjXBDv3mayFh5TDEYM59fmEmJXgp1AqtpUWHVw4Tonp6Z9dVBhChU/Q+BY57m74nrQZK8vxKDrMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.6", + "fflate": "^0.8.2", + "flatted": "^3.3.1", + "pathe": "^1.1.2", + "sirv": "^3.0.0", + "tinyglobby": "^0.2.10", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "2.1.6" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.6.tgz", + "integrity": "sha512-ixNkFy3k4vokOUTU2blIUvOgKq/N2PW8vKIjZZYsGJCMX69MRa9J2sKqX5hY/k5O5Gty3YJChepkqZ3KM9LyIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.6", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha512-41U72MB56TfUMGndAKK8vJ78eooOD4Z5NOL4xEfjc0c23s+6EYKXlXsmACBVclLP1yOfWCgEganVzddVrSNoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "exit": "0.1.2", + "glob": "^7.1.1" + }, + "engines": { + "node": ">=0.2.5" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha512-duS7VP5pvfsNLDvL1O4VOEbw37AI3A4ZUQYemvDlnpGrNu9tprR7BYWpDYwC0Xia0Zxz5ZupdiIrUp0GH1aXfg==", + "dev": true, + "dependencies": { + "date-now": "^0.1.4" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", + "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.7.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha512-AsElvov3LoNB7tf5k37H2jYSB+ZZPMT5sG2QjJCcdlV5chIv6htBUBUui2IKRjgtKAKtCBN7Zbwa+MtwLjSeNw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.67", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", + "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-config-love": { + "version": "48.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-love/-/eslint-config-love-48.0.0.tgz", + "integrity": "sha512-IRIk8dugdxyj78Vwy/mYpTewuwqfrJssin2x6RjUcHvvqE7ZpeRart1L/jeJhTKHart/Hg+sKWautmGkVvjCsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0", + "typescript-eslint": "^7.0.1" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "typescript": "*" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-alias": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", + "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-cypress": { + "version": "2.15.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.15.2.tgz", + "integrity": "sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "globals": "^13.20.0" + }, + "peerDependencies": { + "eslint": ">= 3.2.1" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-cypress/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-html": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.2.tgz", + "integrity": "sha512-pbRchDV2SmqbCi/Ev/q3aAikzG9BcFe0IjjqjtMn8eTLq71ZUggyJB6CDmuwGAXmYZHrXI12XTfCqvgcnPRqGw==", + "dev": true, + "license": "ISC", + "dependencies": { + "htmlparser2": "^9.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-n/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-tsdoc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", + "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "0.16.2" + } + }, + "node_modules/eslint-plugin-yaml": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yaml/-/eslint-plugin-yaml-0.5.0.tgz", + "integrity": "sha512-Z6km4HEiRptSuvzc96nXBND1Vlg57b7pzRmIJOgb9+3PAE+XpaBaiMx+Dg+3Y15tSrEMKCIZ9WoZMwkwUbPI8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.0", + "jshint": "^2.13.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphql": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", + "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/intl-messageformat": { + "version": "10.7.7", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.7.tgz", + "integrity": "sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "2.2.4", + "@formatjs/fast-memoize": "2.2.3", + "@formatjs/icu-messageformat-parser": "2.9.4", + "tslib": "2" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jshint": { + "version": "2.13.6", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.6.tgz", + "integrity": "sha512-IVdB4G0NTTeQZrBoM8C5JFVLjV2KtZ9APgybDA1MK73xb09qFs0jCXyQLnCOp1cSZZZbvhq/6mfXHUTaDkffuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.21", + "minimatch": "~3.0.2", + "strip-json-comments": "1.0.x" + }, + "bin": { + "jshint": "bin/jshint" + } + }, + "node_modules/jshint/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/jshint/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/jshint/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jshint/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/jshint/node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha512-q9bUwjfp7Eif8jWxxxPSykdRZAb6GkguBGSgvvCrhI9wB71W2K/Kvv4E61CF/mcCfnVJDeDWx/Vb/uAqbDj6UQ==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/jshint/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/jshint/node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha512-LbLqfXgJMmy81t+7c14mnulFHJ170cM6E+0vMXR9k/ZiZwgX8i5pNgjTCX3SO4VeUsFLV+8InixoretwU+MjBQ==", + "dev": true, + "license": "BSD-like" + }, + "node_modules/jshint/node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha512-hBxEg3CYXe+rPIua8ETe7tmG3XDn9B0edOE/e9wH2nLczxzgdu0m0aNHY+5wFZiviLWLdANPJTssa92dMcXQ5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/jshint/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jshint/node_modules/strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", + "dev": true, + "license": "MIT", + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msw": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.6.6.tgz", + "integrity": "sha512-npfIIVRHKQX3Lw4aLWX4wBh+lQwpqdZNyJYB5K/+ktK8NhtkdsTxGK7WDrgknozcVyRI7TOqY6yBS9j2FTR+YQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "chalk": "^4.1.2", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "license": "MIT" + }, + "node_modules/nwsapi": { + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", + "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.49.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", + "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz", + "integrity": "sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-aria": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.36.0.tgz", + "integrity": "sha512-AK5XyIhAN+e5HDlwlF+YwFrOrVI7RYmZ6kg/o7ZprQjkYqYKapXeUpWscmNm/3H2kDboE5Z4ymUnK6ZhobLqOw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/string": "^3.2.5", + "@react-aria/breadcrumbs": "^3.5.19", + "@react-aria/button": "^3.11.0", + "@react-aria/calendar": "^3.6.0", + "@react-aria/checkbox": "^3.15.0", + "@react-aria/color": "^3.0.2", + "@react-aria/combobox": "^3.11.0", + "@react-aria/datepicker": "^3.12.0", + "@react-aria/dialog": "^3.5.20", + "@react-aria/disclosure": "^3.0.0", + "@react-aria/dnd": "^3.8.0", + "@react-aria/focus": "^3.19.0", + "@react-aria/gridlist": "^3.10.0", + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/label": "^3.7.13", + "@react-aria/link": "^3.7.7", + "@react-aria/listbox": "^3.13.6", + "@react-aria/menu": "^3.16.0", + "@react-aria/meter": "^3.4.18", + "@react-aria/numberfield": "^3.11.9", + "@react-aria/overlays": "^3.24.0", + "@react-aria/progress": "^3.4.18", + "@react-aria/radio": "^3.10.10", + "@react-aria/searchfield": "^3.7.11", + "@react-aria/select": "^3.15.0", + "@react-aria/selection": "^3.21.0", + "@react-aria/separator": "^3.4.4", + "@react-aria/slider": "^3.7.14", + "@react-aria/ssr": "^3.9.7", + "@react-aria/switch": "^3.6.10", + "@react-aria/table": "^3.16.0", + "@react-aria/tabs": "^3.9.8", + "@react-aria/tag": "^3.4.8", + "@react-aria/textfield": "^3.15.0", + "@react-aria/tooltip": "^3.7.10", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-aria-components": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.3.3.tgz", + "integrity": "sha512-wNjcoyIFTL14Z07OJ1I5m37CYB+1oH2DW8PIgZQjGt9lLcYKKEBLSgsenHVKu1F1L9tqlpXgYk5TeXCzU/xUKw==", + "license": "Apache-2.0", + "dependencies": { + "@internationalized/date": "^3.5.5", + "@internationalized/string": "^3.2.3", + "@react-aria/collections": "3.0.0-alpha.4", + "@react-aria/color": "3.0.0-rc.2", + "@react-aria/dnd": "^3.7.2", + "@react-aria/focus": "^3.18.2", + "@react-aria/interactions": "^3.22.2", + "@react-aria/menu": "^3.15.3", + "@react-aria/toolbar": "3.0.0-beta.8", + "@react-aria/tree": "3.0.0-alpha.5", + "@react-aria/utils": "^3.25.2", + "@react-aria/virtualizer": "^4.0.2", + "@react-stately/color": "^3.7.2", + "@react-stately/layout": "^4.0.2", + "@react-stately/menu": "^3.8.2", + "@react-stately/table": "^3.12.2", + "@react-stately/utils": "^3.10.3", + "@react-stately/virtualizer": "^4.0.2", + "@react-types/color": "3.0.0-rc.1", + "@react-types/form": "^3.7.6", + "@react-types/grid": "^3.2.8", + "@react-types/shared": "^3.24.1", + "@react-types/table": "^3.10.1", + "@swc/helpers": "^0.5.0", + "client-only": "^0.0.1", + "react-aria": "^3.34.3", + "react-stately": "^3.32.2", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-aria/node_modules/@react-aria/color": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.2.tgz", + "integrity": "sha512-dSM5qQRcR1gRGYCBw0IGRmc29gjfoht3cQleKb8MMNcgHYa2oi5VdCs2yKXmYFwwVC6uPtnlNy9S6e0spqdr+w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/i18n": "^3.12.4", + "@react-aria/interactions": "^3.22.5", + "@react-aria/numberfield": "^3.11.9", + "@react-aria/slider": "^3.7.14", + "@react-aria/spinbutton": "^3.6.10", + "@react-aria/textfield": "^3.15.0", + "@react-aria/utils": "^3.26.0", + "@react-aria/visually-hidden": "^3.8.18", + "@react-stately/color": "^3.8.1", + "@react-stately/form": "^3.1.0", + "@react-types/color": "^3.0.1", + "@react-types/shared": "^3.26.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-aria/node_modules/@react-types/color": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.1.tgz", + "integrity": "sha512-KemFziO3GbmT3HEKrgOGdqNA6Gsmy9xrwFO3f8qXSG7gVz6M27Ic4R9HVQv4iAjap5uti6W13/pk2bc/jLVcEA==", + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.26.0", + "@react-types/slider": "^3.7.7" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.1.tgz", + "integrity": "sha512-WVAhv9oWCNsja5AkK6KLpXJDSJCQizOIyOd4vvB/+eHGbYx5vkhcmcmwWjQ9yqkRClogi+xjEg9fNEOd5EX/tw==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.1.tgz", + "integrity": "sha512-duBzwAAiIabhFPZfDjcYpJ+f08TMbPMETgq254GWne2NW1ZwRHhZLj7tpSp8KGb7JvZzlLcjGUnqLxpZQVEPng==", + "license": "MIT", + "dependencies": { + "react-router": "7.0.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-router/node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/react-stately": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.34.0.tgz", + "integrity": "sha512-0N9tZ8qQ/CxpJH7ao0O6gr+8955e7VrOskg9N+TIxkFknPetwOCtgppMYhnTfteBV8WfM/vv4OC1NbkgYTqXJA==", + "license": "Apache-2.0", + "dependencies": { + "@react-stately/calendar": "^3.6.0", + "@react-stately/checkbox": "^3.6.10", + "@react-stately/collections": "^3.12.0", + "@react-stately/color": "^3.8.1", + "@react-stately/combobox": "^3.10.1", + "@react-stately/data": "^3.12.0", + "@react-stately/datepicker": "^3.11.0", + "@react-stately/disclosure": "^3.0.0", + "@react-stately/dnd": "^3.5.0", + "@react-stately/form": "^3.1.0", + "@react-stately/list": "^3.11.1", + "@react-stately/menu": "^3.9.0", + "@react-stately/numberfield": "^3.9.8", + "@react-stately/overlays": "^3.6.12", + "@react-stately/radio": "^3.10.9", + "@react-stately/searchfield": "^3.5.8", + "@react-stately/select": "^3.6.9", + "@react-stately/selection": "^3.18.0", + "@react-stately/slider": "^3.6.0", + "@react-stately/table": "^3.13.0", + "@react-stately/tabs": "^3.7.0", + "@react-stately/toggle": "^3.8.0", + "@react-stately/tooltip": "^3.5.0", + "@react-stately/tree": "^3.8.6", + "@react-types/shared": "^3.26.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.0.tgz", + "integrity": "sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.28.0", + "@rollup/rollup-android-arm64": "4.28.0", + "@rollup/rollup-darwin-arm64": "4.28.0", + "@rollup/rollup-darwin-x64": "4.28.0", + "@rollup/rollup-freebsd-arm64": "4.28.0", + "@rollup/rollup-freebsd-x64": "4.28.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.0", + "@rollup/rollup-linux-arm-musleabihf": "4.28.0", + "@rollup/rollup-linux-arm64-gnu": "4.28.0", + "@rollup/rollup-linux-arm64-musl": "4.28.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.0", + "@rollup/rollup-linux-riscv64-gnu": "4.28.0", + "@rollup/rollup-linux-s390x-gnu": "4.28.0", + "@rollup/rollup-linux-x64-gnu": "4.28.0", + "@rollup/rollup-linux-x64-musl": "4.28.0", + "@rollup/rollup-win32-arm64-msvc": "4.28.0", + "@rollup/rollup-win32-ia32-msvc": "4.28.0", + "@rollup/rollup-win32-x64-msvc": "4.28.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.65.tgz", + "integrity": "sha512-xU9gLTfAGsADQ2PcWee6Hg8RFAv0DnjMGVJmDnUmI8a9+nYmapMQix4afwrdaCtT+AqP4MaxEzu7cCrYmBPbzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.65" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.65", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.65.tgz", + "integrity": "sha512-Uq5t0N0Oj4nQSbU8wFN1YYENvMthvwU13MQrMJRspYCGLSAZjAfoBOJki5IQpnBM/WFskxxC/gIOTwaedmHaSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfck": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.4.tgz", + "integrity": "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==", + "license": "MIT", + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.29.0.tgz", + "integrity": "sha512-RPYt6dKyemXJe7I6oNstcH24myUGSReicxcHTvCLgzm4e0n8y05dGvcGB15/SoPRBmhlMthWQ9pvKyL81ko8nQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.18.0.tgz", + "integrity": "sha512-PonBkP603E3tt05lDkbOMyaxJjvKqQrXsnow72sVeOFINDE/qNmnnd+f9b4N+U7W6MXnnYyrhtmF2t08QWwUbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "devOptional": true, + "license": "MIT", + "peer": true + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/vite": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.1.tgz", + "integrity": "sha512-Ldn6gorLGr4mCdFnmeAOLweJxZ34HjKnDm4HGo6P66IEqTxQb36VEdFJQENKxWjupNfoIjvRUnswjn1hpYEpjQ==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.0", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.6.tgz", + "integrity": "sha512-DBfJY0n9JUwnyLxPSSUmEePT21j8JZp/sR9n+/gBwQU6DcQOioPdb8/pibWfXForbirSagZCilseYIwaL3f95A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-tsconfig-paths": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.3.tgz", + "integrity": "sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.6.tgz", + "integrity": "sha512-isUCkvPL30J4c5O5hgONeFRsDmlw6kzFEdLQHLezmDdKQHy8Ke/B/dgdTMEgU0vm+iZ0TjW8GuK83DiahBoKWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.6", + "@vitest/mocker": "2.1.6", + "@vitest/pretty-format": "^2.1.6", + "@vitest/runner": "2.1.6", + "@vitest/snapshot": "2.1.6", + "@vitest/spy": "2.1.6", + "@vitest/utils": "2.1.6", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "2.1.6", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "2.1.6", + "@vitest/ui": "2.1.6", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "license": "ISC", + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..92878ace --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,70 @@ +{ + "name": "quickstart-openshift-react-frontend", + "private": true, + "version": "1.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "clean": "rimraf ./node_modules/.vite", + "build:analyze": "vite build --mode analyze", + "build:clean": "rimraf dist", + "deploy": "npm ci --ignore-scripts --no-update-notifier --omit=dev && npm run build", + "preview": "vite preview", + "test:unit": "vitest --mode test", + "test:cov": "vitest run --mode test --coverage", + "build": "vite build" + }, + "dependencies": { + "@bcgov/bc-sans": "^2.1.0", + "@bcgov/design-system-react-components": "^0.4.0", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.0.2", + "@mui/material": "^6.0.2", + "@mui/system": "^6.0.2", + "@mui/x-data-grid": "^7.16.0", + "@vitejs/plugin-react": "^4.3.1", + "axios": "^1.7.7", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-router": "^7.0.0", + "react-router-dom": "^7.0.0", + "vite": "^6.0.0", + "vite-tsconfig-paths": "^5.0.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.0.0", + "@playwright/test": "^1.43.1", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^16.0.0", + "@testing-library/user-event": "^14.4.3", + "@types/react": "^18.2.6", + "@types/react-dom": "^18.2.4", + "@vitest/coverage-v8": "^2.0.0", + "@vitest/ui": "^2.0.0", + "eslint": "^8.57.0", + "eslint-config-love": "^48.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-cypress": "^2.13.3", + "eslint-plugin-html": "^8.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-tsdoc": "^0.2.17", + "eslint-plugin-yaml": "^0.5.0", + "history": "^5.3.0", + "jsdom": "^25.0.0", + "msw": "^2.4.4", + "playwright": "^1.43.1", + "prettier": "^3.0.0", + "typescript": "^5.1.3", + "vitest": "^2.0.0" + }, + "overrides": { + "rollup@<4.22.4": "^4.22.4" + } +} diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts new file mode 100644 index 00000000..eac618c6 --- /dev/null +++ b/frontend/playwright.config.ts @@ -0,0 +1,79 @@ +import { defineConfig, devices } from '@playwright/test'; +import { baseURL } from './e2e/utils'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + timeout: 120000, + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: [ + ['line'], + ['list', { printSteps: true }], + ['html', { open: 'always' }] + ], + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: baseURL, + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry' + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { + ...devices['Desktop Chrome'], + baseURL: baseURL, + } + }, + { + name: 'Google Chrome', + use: { + ...devices['Desktop Chrome'], + channel: 'chrome', + baseURL: baseURL + } + }, + + { + name: 'firefox', + use: { + ...devices['Desktop Firefox'], + baseURL: baseURL, + } + }, + + { + name: 'safari', + use: { + ...devices['Desktop Safari'], + baseURL: baseURL + } + }, + { + name: 'Microsoft Edge', + use: { + ...devices['Desktop Edge'], + channel: 'msedge', + baseURL: baseURL + } + } + ] +}); diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1841396d21ce974cdec16f7414c88683cd36af16 GIT binary patch literal 22486 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 C+3a-y literal 0 HcmV?d00001 diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 00000000..9ad52509 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,45 @@ +import Box from '@mui/material/Box' +import AppRoutes from '@/routes' +import { BrowserRouter } from 'react-router-dom' +import { + Footer, + Header, +} from "@bcgov/design-system-react-components"; +import { IconButton } from '~/@mui/material' +import { HomeRounded } from '~/@mui/icons-material' + +const styles = { + container: { + display: 'flex', + flexDirection: 'column', + minHeight: '100vh', + }, + content: { + flexGrow: 1, + marginTop: '5em', + marginRight: '1em', + marginLeft: '1em', + marginBottom: '5em', + height: '100%', + display: 'flex', + justifyContent: 'center', + alignItems: 'flex-start', + }, +} +export default function App() { + return ( + + + + + + + +
+ + ) +} diff --git a/frontend/src/__tests__/App.test.tsx b/frontend/src/__tests__/App.test.tsx new file mode 100644 index 00000000..62e6c59d --- /dev/null +++ b/frontend/src/__tests__/App.test.tsx @@ -0,0 +1,9 @@ +import App from '@/App' +import { render, screen } from '../test-utils' + +describe('Simple working test', () => { + it('the title is visible', () => { + render() + expect(screen.getByText(/QuickStart OpenShift/i)).toBeInTheDocument() + }) +}) diff --git a/frontend/src/assets/BCID_H_rgb_pos.png b/frontend/src/assets/BCID_H_rgb_pos.png new file mode 100644 index 0000000000000000000000000000000000000000..ebde8bbbdb5f6d1b0c7c670df357970b5b525794 GIT binary patch literal 16262 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 R;4cfLbxU8ZRK@PWzW^>bft&yU literal 0 HcmV?d00001 diff --git a/frontend/src/components/Dashboard.tsx b/frontend/src/components/Dashboard.tsx new file mode 100644 index 00000000..def1d81a --- /dev/null +++ b/frontend/src/components/Dashboard.tsx @@ -0,0 +1,129 @@ +import apiService from "@/service/api-service"; +import Button from "@mui/material/Button"; +import Dialog from "@mui/material/Dialog"; +import DialogActions from "@mui/material/DialogActions"; +import DialogContent from "@mui/material/DialogContent"; +import DialogTitle from "@mui/material/DialogTitle"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import TableCell from "@mui/material/TableCell"; +import TableRow from "@mui/material/TableRow"; +import { DataGrid, GridToolbar } from "@mui/x-data-grid"; +import { useEffect, useState } from "react"; +import type { AxiosResponse } from "~/axios"; + +const columns = [ + { + field: "id", + headerName: "Employee ID", + sortable: true, + filterable: true, + flex: 1, + renderHeader: (params: any) => ( +
+ Employee ID +
+ ) + }, + { + field: "name", + headerName: "Employee Name", + sortable: true, + filterable: true, + flex: 1, + renderHeader: (params: any) => ( +
+ Employee Name +
+ ) + }, + { + field: "email", + headerName: "Employee Email", + sortable: true, + filterable: true, + flex: 1, + renderHeader: (params: any) => ( +
+ Employee Email +
+ ) + } +]; +export default function Dashboard() { + const [data, setData] = useState([]); + + useEffect(() => { + apiService + .getAxiosInstance() + .get("/v1/users") + .then((response: AxiosResponse) => { + const users = []; + for (const user of response.data) { + const userDto = { + id: user.id, + name: user.name, + email: user.email + }; + users.push(userDto); + } + setData(users); + }) + .catch((error) => { + console.error(error); + }); + }, []); + const [selectedRow, setSelectedRow] = useState(null); + + const handleClose = () => { + setSelectedRow(null); + }; + return ( +
+ row["id"]} + onRowClick={(params) => setSelectedRow(params.row)} + /> + + Row Details + + + + {selectedRow && + Object.entries(selectedRow).map(([key, value]) => ( + + {key} + {value} + + ))} + +
+
+ + + +
+
+ ); +} diff --git a/frontend/src/components/NotFound.tsx b/frontend/src/components/NotFound.tsx new file mode 100644 index 00000000..090dfbc7 --- /dev/null +++ b/frontend/src/components/NotFound.tsx @@ -0,0 +1,37 @@ +import { Box, Button, Container, Typography } from '@mui/material' +import Grid from '@mui/material/Grid' +import { useNavigate } from 'react-router' + +export default function NotFound() { + const navigate = useNavigate() + const buttonClicked = () => { + navigate('/', { state: { data: undefined } }) // reset the state + } + return ( + + + + 404 + + The page you’re looking for does not exist. + + + + + + ) +} diff --git a/frontend/src/components/__tests__/NotFound.test.tsx b/frontend/src/components/__tests__/NotFound.test.tsx new file mode 100644 index 00000000..9a3c802e --- /dev/null +++ b/frontend/src/components/__tests__/NotFound.test.tsx @@ -0,0 +1,20 @@ +import { vi } from 'vitest' +import { render, screen } from '@testing-library/react' +import NotFound from '@/components/NotFound' + +vi.mock('react-router', () => ({ + useNavigate: vi.fn(), +})) + +describe('NotFound', () => { + test('renders a heading with the correct text', () => { + const navigate = vi.fn() + const useNavigateMock = vi.fn(() => navigate) + vi.doMock('react-router', () => ({ + useNavigate: useNavigateMock, + })) + render() + const headingElement = screen.getByRole('heading', { name: /404/i }) + expect(headingElement).toBeInTheDocument() + }) +}) diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 00000000..e812f3e2 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,3 @@ +.MuiDrawer-paperAnchorLeft { + margin-top: 4.2em !important; +} diff --git a/frontend/src/interfaces/UserDto.ts b/frontend/src/interfaces/UserDto.ts new file mode 100644 index 00000000..fa4a8a27 --- /dev/null +++ b/frontend/src/interfaces/UserDto.ts @@ -0,0 +1,5 @@ +export default interface UserDto { + id: number + name: string + email: string +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 00000000..18f5071d --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,16 @@ +import "@bcgov/bc-sans/css/BC_Sans.css"; +import * as React from 'react' +import * as ReactDOM from 'react-dom/client' +import { ThemeProvider } from '@emotion/react' +import { CssBaseline } from '@mui/material' +import theme from './theme' +import App from './App' + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + + , +) diff --git a/frontend/src/routes/index.tsx b/frontend/src/routes/index.tsx new file mode 100644 index 00000000..8e164a18 --- /dev/null +++ b/frontend/src/routes/index.tsx @@ -0,0 +1,12 @@ +import { Routes, Route } from 'react-router-dom' +import NotFound from '@/components/NotFound' +import Dashboard from '@/components/Dashboard' + +export default function AppRoutes() { + return ( + + } /> + } /> + + ) +} diff --git a/frontend/src/service/api-service.ts b/frontend/src/service/api-service.ts new file mode 100644 index 00000000..28d1f2aa --- /dev/null +++ b/frontend/src/service/api-service.ts @@ -0,0 +1,32 @@ +import type { AxiosInstance } from 'axios' +import axios from 'axios' + +class APIService { + private readonly client: AxiosInstance + + constructor() { + this.client = axios.create({ + baseURL: '/api', + headers: { + 'Content-Type': 'application/json', + }, + }) + this.client.interceptors.response.use( + (config) => { + console.info( + `received response status: ${config.status} , data: ${config.data}`, + ) + return config + }, + (error) => { + console.error(error) + }, + ) + } + + public getAxiosInstance(): AxiosInstance { + return this.client + } +} + +export default new APIService() diff --git a/frontend/src/test-setup.ts b/frontend/src/test-setup.ts new file mode 100644 index 00000000..eb0ff7ff --- /dev/null +++ b/frontend/src/test-setup.ts @@ -0,0 +1,32 @@ +import '@testing-library/jest-dom' +import { afterAll, afterEach, beforeAll } from 'vitest' +import { setupServer } from 'msw/node' +import { http, HttpResponse } from 'msw' + +const users = [ + { + id: 1, + name: 'first post title', + email: 'first post body', + }, + // ... +] + +export const restHandlers = [ + http.get('http://localhost:3000/api/v1/users', () => { + return new HttpResponse(JSON.stringify(users), { + status: 200, + }) + }), +] + +const server = setupServer(...restHandlers) + +// Start server before all tests +beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) + +// Close server after all tests +afterAll(() => server.close()) + +// Reset handlers after each test `important for test isolation` +afterEach(() => server.resetHandlers()) diff --git a/frontend/src/test-utils.tsx b/frontend/src/test-utils.tsx new file mode 100644 index 00000000..93f2f6cb --- /dev/null +++ b/frontend/src/test-utils.tsx @@ -0,0 +1,19 @@ +import { cleanup, render } from '@testing-library/react' +import { afterEach } from 'vitest' + +afterEach(() => { + cleanup() +}) + +function customRender(ui: React.ReactElement, options = {}) { + return render(ui, { + // wrap provider(s) here if needed + wrapper: ({ children }) => children, + ...options, + }) +} + +export * from '@testing-library/react' +export { default as userEvent } from '@testing-library/user-event' +// override render export +export { customRender as render } diff --git a/frontend/src/theme.tsx b/frontend/src/theme.tsx new file mode 100644 index 00000000..3a183e98 --- /dev/null +++ b/frontend/src/theme.tsx @@ -0,0 +1,25 @@ +import { createTheme } from '@mui/material/styles' +import { red } from '@mui/material/colors' + +// A custom theme for this app +const theme = createTheme({ + palette: { + primary: { + main: '#ffffff', + }, + secondary: { + main: '#385a8a', + }, + error: { + main: '#712024', + }, + warning: { + main: '#81692c', + }, + success: { + main: '#234720', + }, + }, +}) + +export default theme diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..067210af --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "strictNullChecks": true, + "noEmit": true, + "jsx": "react-jsx", + "types": ["vitest/globals","cypress", "node", "cypress-file-upload","@testing-library/cypress"], + "baseUrl": "./", + "paths": { + "@": ["src"], + "test": ["test"], + "test/*": ["test/*"], + "@/*": ["src/*"], + "~/*": ["node_modules/*"] + } + }, + "include": ["src","src/**/*", "src/**/*.tsx"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 00000000..99989d08 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "types": ["node"], + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 00000000..8a90cc35 --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,57 @@ +import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + port: parseInt(process.env.PORT), + fs: { + // Allow serving files from one level up to the project root + allow: ['..'], + }, + proxy: { + // Proxy API requests to the backend + '/api': { + target: 'http://localhost:3000', + changeOrigin: true, + }, + }, + }, + resolve: { + // https://vitejs.dev/config/shared-options.html#resolve-alias + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + '~': fileURLToPath(new URL('./node_modules', import.meta.url)), + }, + extensions: ['.js', '.json', '.jsx', '.mjs', '.ts', '.tsx', '.vue'], + }, + build: { + // Build Target + // https://vitejs.dev/config/build-options.html#build-target + target: 'esnext', + // Minify option + // https://vitejs.dev/config/build-options.html#build-minify + minify: 'esbuild', + // Rollup Options + // https://vitejs.dev/config/build-options.html#build-rollupoptions + rollupOptions: { + output: { + manualChunks: { + // Split external library from transpiled code. + react: [ + 'react', + 'react-dom', + 'react-router-dom', + 'react-router', + '@emotion/react', + '@emotion/styled', + ], + mui: ['@mui/material', '@mui/icons-material', '@mui/system', '@mui/x-data-grid'], + axios: ['axios'], + }, + }, + }, + }, +}) diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts new file mode 100644 index 00000000..de0f555e --- /dev/null +++ b/frontend/vitest.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config' +import tsconfigPaths from 'vite-tsconfig-paths' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [tsconfigPaths()], + test: { + exclude: ['**/node_modules/**', '**/e2e/**'], + globals: true, + environment: 'jsdom', + setupFiles: 'src/test-setup.ts', + // you might want to disable it, if you don't have tests that rely on CSS + // since parsing CSS is slow + css: false, + coverage: { + reporter: ['lcov', 'text-summary','text', 'json', 'html'], + }, + }, +}) diff --git a/migrations/.dockerignore b/migrations/.dockerignore new file mode 100644 index 00000000..4f05d319 --- /dev/null +++ b/migrations/.dockerignore @@ -0,0 +1,6 @@ +.idea +.vscode +coverage +cypress +dist +node_modules diff --git a/migrations/Dockerfile b/migrations/Dockerfile new file mode 100644 index 00000000..81ded6f7 --- /dev/null +++ b/migrations/Dockerfile @@ -0,0 +1,13 @@ +FROM flyway/flyway:11-alpine + +# Copy migrations +COPY ./sql /flyway/sql + +# Non-root user +RUN adduser -D app +USER app + +# Health check and startup +HEALTHCHECK CMD info +# Adding repair to see if it fixes migration issues. +CMD ["info", "migrate", "repair"] diff --git a/migrations/sql/V1.0.0__init.sql b/migrations/sql/V1.0.0__init.sql new file mode 100644 index 00000000..2be16859 --- /dev/null +++ b/migrations/sql/V1.0.0__init.sql @@ -0,0 +1,24 @@ +CREATE SCHEMA IF NOT EXISTS USERS; + +CREATE SEQUENCE IF NOT EXISTS USERS."USER_SEQ" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 100; + +CREATE TABLE IF NOT EXISTS USERS.USERS +( + ID numeric not null + constraint "USER_PK" + primary key DEFAULT nextval('USERS."USER_SEQ"'), + NAME varchar(200) not null, + EMAIL varchar(200) not null +); +INSERT INTO USERS.USERS (NAME, EMAIL) +VALUES ('John', 'John.ipsum@test.com'), + ('Jane', 'Jane.ipsum@test.com'), + ('Jack', 'Jack.ipsum@test.com'), + ('Jill', 'Jill.ipsum@test.com'), + ('Joe', 'Joe.ipsum@test.com'); + diff --git a/migrations/sql/V1.0.1__alter_user_seq.sql b/migrations/sql/V1.0.1__alter_user_seq.sql new file mode 100644 index 00000000..6be8cd5b --- /dev/null +++ b/migrations/sql/V1.0.1__alter_user_seq.sql @@ -0,0 +1 @@ +ALTER SEQUENCE USERS."USER_SEQ" RESTART WITH 6 CACHE 1; diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..81d5e5e8 --- /dev/null +++ b/renovate.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Presets from https://github.com/bcgov/renovate-config", + "extends": [ + "github>bcgov/renovate-config" + ] +} diff --git a/tests/integration/package-lock.json b/tests/integration/package-lock.json new file mode 100644 index 00000000..da80b719 --- /dev/null +++ b/tests/integration/package-lock.json @@ -0,0 +1,153 @@ +{ + "name": "integration-tests", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "integration-tests", + "version": "1.0.0", + "dependencies": { + "axios": "^1.6.8", + "dotenv": "^16.3.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + } + } +} diff --git a/tests/integration/package.json b/tests/integration/package.json new file mode 100644 index 00000000..32cd584e --- /dev/null +++ b/tests/integration/package.json @@ -0,0 +1,15 @@ +{ + "name": "integration-tests", + "version": "1.0.0", + "type": "module", + "main": "src/main.js", + "scripts": { + "dev": "node src/main.js" + }, + "dependencies": { + "axios": "^1.6.8", + "dotenv": "^16.3.1", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21" + } +} diff --git a/tests/integration/src/main.js b/tests/integration/src/main.js new file mode 100644 index 00000000..498198e1 --- /dev/null +++ b/tests/integration/src/main.js @@ -0,0 +1,94 @@ +import dotenv from "dotenv"; +import axios from "axios"; +import * as fs from "fs"; +import * as path from "path"; +import { fileURLToPath } from "url"; +import assert from "node:assert/strict"; + +import pkg from "lodash"; + +dotenv.config(); + +const { isEqual, omit } = pkg; + +const __filename = fileURLToPath(import.meta.url); + +const __dirname = path.dirname(__filename); +const apiName = process.env.API_NAME; +const BASE_URL = process.env.BASE_URL; + +async function performEachMethod(BASE_URL, testCase, method, id) { + let url = BASE_URL + testCase.path; + if (id && (method === "GET" || method === "PUT" || method === "PATCH" || method === "DELETE")) { + if (url.endsWith("/") === false) { + url = url + "/" + id; + } else { + url = url + id; + } + } + let payload; + if (method === "POST") { + payload = testCase.data?.post_payload; + } else if (method === "PUT") { + payload = testCase.data?.put_payload; + } else if (method === "PATCH") { + payload = testCase.data?.patch_payload; + } + const response = await axios({ + method: method, + url: url, + headers: { + ...testCase.headers + }, + data: payload + }); + console.info(`Response for ${method} ${url} : ${response.status}`); + const methodAssertion = testCase.assertions.find(assertion => assertion.method === method); + const responseData = response.data?.data || response.data; + if (methodAssertion) { + if (methodAssertion.status_code) { + assert(response.status === methodAssertion.status_code); + } + if (methodAssertion.body) { + assert(isEqual(omit(responseData, testCase.data.id_field), methodAssertion.body) === true); + } + } + if (method === "POST") { + return responseData[testCase.data.id_field]; + } +} + +async function performTesting(testSuitesDir, testSuiteFile) { + console.info(`Running test suite for : ${testSuiteFile}`); + const testSuitePath = path.join(testSuitesDir, testSuiteFile); + const testSuite = JSON.parse(await fs.promises.readFile(testSuitePath, "utf-8")); + for (const testCase of testSuite.tests) { + let id = null; + for (const method of testCase.methods) { + const responseId = await performEachMethod(BASE_URL, testCase, method, id); + if (responseId) { + id = responseId; + } + } + } +} + +const main = async () => { + const testSuitesDir = path.join(__dirname, "test_suites"); + const testSuiteFiles = await fs.promises.readdir(testSuitesDir); + const testFile = testSuiteFiles.find(file => file.includes(apiName)); + await performTesting(testSuitesDir, testFile); +}; + +try { + await main(); +} catch (e) { + if (e instanceof assert.AssertionError) { + console.error(e); + process.exit(137); + } + console.error(e); + process.exit(137); +} + + diff --git a/tests/integration/src/test_suites/it.backend.fastapi.json b/tests/integration/src/test_suites/it.backend.fastapi.json new file mode 100644 index 00000000..0771844c --- /dev/null +++ b/tests/integration/src/test_suites/it.backend.fastapi.json @@ -0,0 +1,62 @@ +{ + "api_name": "fastapi", + "api_version": "1.0.0", + "base_url": "${BASE_URL}", + "tests": [ + { + "name": "User Endpoint TEST", + "methods": [ + "GET", + "POST", + "GET", + "DELETE" + ], + "path": "/api/v1/user/", + "headers": { + "Content-Type": "application/json", + "accept": "application/json" + }, + "data": { + "id_field": "user_id", + "post_payload": { + "name": "John", + "email": "John.ipsum@test.com" + }, + "put_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + }, + "patch_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + "assertions": [ + { + "method": "POST", + "status_code": 200, + "body": { + "name": "John", + "email": "John.ipsum@test.com" + } + }, + { + "method": "GET", + "status_code": 200 + }, + { + "method": "PUT", + "status_code": 200, + "body": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + { + "method": "DELETE", + "status_code": 200 + } + ] + } + ] +} diff --git a/tests/integration/src/test_suites/it.backend.fiber.json b/tests/integration/src/test_suites/it.backend.fiber.json new file mode 100644 index 00000000..fa7ba86b --- /dev/null +++ b/tests/integration/src/test_suites/it.backend.fiber.json @@ -0,0 +1,68 @@ +{ + "api_name": "fiber", + "api_version": "1.0.0", + "base_url": "${BASE_URL}", + "tests": [ + { + "name": "User Endpoint TEST", + "methods": [ + "GET", + "POST", + "PUT", + "GET", + "DELETE" + ], + "path": "/api/v1/users", + "headers": { + "Content-Type": "application/json" + }, + "data": { + "id_field": "id", + "post_payload": { + "name": "John", + "email": "John.ipsum@test.com", + "addresses": [ + ] + }, + "put_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com", + "addresses": [ + ] + }, + "patch_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + "assertions": [ + { + "method": "POST", + "status_code": 201, + "body": { + "name": "John", + "email": "John.ipsum@test.com", + "addresses": null + } + }, + { + "method": "GET", + "status_code": 200 + }, + { + "method": "PUT", + "status_code": 200, + "body": { + "name": "Jane", + "email": "Jane.ipsum@test.com", + "addresses": null + } + }, + { + "method": "DELETE", + "status_code": 204 + } + ] + } + ] +} diff --git a/tests/integration/src/test_suites/it.backend.nest.json b/tests/integration/src/test_suites/it.backend.nest.json new file mode 100644 index 00000000..da0d89c5 --- /dev/null +++ b/tests/integration/src/test_suites/it.backend.nest.json @@ -0,0 +1,62 @@ +{ + "api_name": "nest", + "api_version": "1.0.0", + "base_url": "${BASE_URL}", + "tests": [ + { + "name": "User Endpoint TEST", + "methods": [ + "GET", + "POST", + "PUT", + "GET", + "DELETE" + ], + "path": "/api/v1/users", + "headers": { + "Content-Type": "application/json" + }, + "data": { + "id_field": "id", + "post_payload": { + "name": "John", + "email": "John.ipsum@test.com" + }, + "put_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + }, + "patch_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + "assertions": [ + { + "method": "POST", + "status_code": 201, + "body": { + "name": "John", + "email": "John.ipsum@test.com" + } + }, + { + "method": "GET", + "status_code": 200 + }, + { + "method": "PUT", + "status_code": 200, + "body": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + { + "method": "DELETE", + "status_code": 200 + } + ] + } + ] +} diff --git a/tests/integration/src/test_suites/it.backend.quarkus.json b/tests/integration/src/test_suites/it.backend.quarkus.json new file mode 100644 index 00000000..a7c9b6b5 --- /dev/null +++ b/tests/integration/src/test_suites/it.backend.quarkus.json @@ -0,0 +1,62 @@ +{ + "api_name": "nest", + "api_version": "1.0.0", + "base_url": "${BASE_URL}", + "tests": [ + { + "name": "User Endpoint TEST", + "methods": [ + "GET", + "POST", + "PUT", + "GET", + "DELETE" + ], + "path": "/api/v1/users", + "headers": { + "Content-Type": "application/json" + }, + "data": { + "id_field": "id", + "post_payload": { + "name": "John", + "email": "John.ipsum@test.com" + }, + "put_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + }, + "patch_payload": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + "assertions": [ + { + "method": "POST", + "status_code": 201, + "body": { + "name": "John", + "email": "John.ipsum@test.com" + } + }, + { + "method": "GET", + "status_code": 200 + }, + { + "method": "PUT", + "status_code": 200, + "body": { + "name": "Jane", + "email": "Jane.ipsum@test.com" + } + }, + { + "method": "DELETE", + "status_code": 204 + } + ] + } + ] +} diff --git a/tests/load/README.md b/tests/load/README.md new file mode 100644 index 00000000..d2fe3d4e --- /dev/null +++ b/tests/load/README.md @@ -0,0 +1,8 @@ +# This Directory contains the load test scripts for the project. +## The scripts are written in JS and use the k6 framework. [k6](https://k6.io) + +1. The Tests are samples, dev teams are encouraged to write their own tests based on the use cases of their project. +2. The tests are run using GitHub Actions. + +# Please inform platform services team if you would do a HUGE load TEST on OpenShift platform as it impacts the platform performance. +``` diff --git a/tests/load/backend-test.js b/tests/load/backend-test.js new file mode 100644 index 00000000..47041362 --- /dev/null +++ b/tests/load/backend-test.js @@ -0,0 +1,34 @@ +import { check } from "k6"; +import http from "k6/http"; +import { Rate } from "k6/metrics"; + + +export let errorRate = new Rate("errors"); + + +function checkStatus(response, checkName, statusCode = 200) { + let success = check(response, { + [checkName]: (r) => { + if (r.status === statusCode) { + return true; + } else { + console.error(checkName + " failed. Incorrect response code." + r.status); + return false; + } + } + }); + errorRate.add(!success, { tag1: checkName }); +} + + +export default function() { + let url = `${__ENV.BACKEND_URL}/v1/users`; + let params = { + headers: { + "Content-Type": "application/json" + } + }; + let res = http.get(url, params); + checkStatus(res, "get-all-users", 200); + +} diff --git a/tests/load/frontend-test.js b/tests/load/frontend-test.js new file mode 100644 index 00000000..ee49609b --- /dev/null +++ b/tests/load/frontend-test.js @@ -0,0 +1,30 @@ +import { check } from "k6"; +import http from "k6/http"; +import { Rate } from "k6/metrics"; + + +export let errorRate = new Rate("errors"); + + +function checkStatus(response, checkName, statusCode = 200) { + let success = check(response, { + [checkName]: (r) => { + if (r.status === statusCode) { + return true; + } else { + console.error(checkName + " failed. Incorrect response code." + r.status); + return false; + } + } + }); + errorRate.add(!success, { tag1: checkName }); +} + + +export default function(token) { + let url = `${__ENV.FRONTEND_URL}`; + + let res = http.get(url); + checkStatus(res, "frontend", 200); + +}
+ + + +