diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85f1a638c..b32cacaf7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,7 +9,10 @@ on: NAMESPACE: required: true type: string - MULTI_ARCH: + BUILD_AMD64: + required: true + type: boolean + BUILD_ARM64: required: true type: boolean TAG: @@ -45,11 +48,16 @@ on: required: true type: string default: cloud-pi-native/console - MULTI_ARCH: - description: Build for both amd64 and arm64 + BUILD_AMD64: + description: Build for amd64 required: true type: boolean - default: false + default: true + BUILD_ARM64: + description: Build for arm64 + required: true + type: boolean + default: true USE_QEMU: description: Use QEMU emulator for arm64 required: true @@ -88,7 +96,7 @@ jobs: - matrix strategy: matrix: - runners: ${{ inputs.MULTI_ARCH && !inputs.USE_QEMU && fromJson('["ubuntu-latest", "ARM64"]') || fromJson('["ubuntu-latest"]') }} + runners: ${{ (inputs.BUILD_AMD64 && inputs.BUILD_ARM64 && !inputs.USE_QEMU && fromJson('["ubuntu-latest", "ARM64"]')) || (inputs.BUILD_ARM64 && !inputs.USE_QEMU && fromJson('["ARM64"]')) || fromJson('["ubuntu-latest"]') }} images: ${{ fromJSON(needs.matrix.outputs.build-matrix) }} steps: - name: Checks-out repository @@ -129,7 +137,7 @@ jobs: context: ${{ matrix.images.build.context }} file: ${{ matrix.images.build.dockerfile }} provenance: false - platforms: ${{ inputs.MULTI_ARCH && inputs.USE_QEMU && 'linux/amd64,linux/arm64' || (contains(runner.arch, 'ARM') && 'linux/arm64' || 'linux/amd64') }} + platforms: ${{ (inputs.BUILD_AMD64 && inputs.BUILD_ARM64 && inputs.USE_QEMU && 'linux/amd64,linux/arm64') || (inputs.BUILD_ARM64 && 'linux/arm64') || (inputs.BUILD_AMD64 && 'linux/amd64') }} outputs: type=image,name=${{ inputs.REGISTRY }}/${{ inputs.NAMESPACE }}/${{ matrix.images.name }},push-by-digest=true,name-canonical=true,push=true build-args: | APP_VERSION=${{ inputs.TAG || steps.short-sha.outputs.SHORT_SHA }} @@ -155,7 +163,7 @@ jobs: - name: Upload digest uses: actions/upload-artifact@v4 with: - name: digests-${{ matrix.images.name }}-${{ inputs.MULTI_ARCH && inputs.USE_QEMU && 'multiarch' || (contains(runner.arch, 'ARM') && 'arm64' || 'amd64') }} + name: digests-${{ matrix.images.name }}-${{ (inputs.BUILD_AMD64 && inputs.BUILD_ARM64 && inputs.USE_QEMU && 'multiarch') || (inputs.BUILD_ARM64 && 'arm64') || (inputs.BUILD_AMD64 && 'amd64') }} path: /tmp/digests/${{ matrix.images.name }}/* if-no-files-found: error retention-days: 1 diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9df03f4d9..c7668d3e9 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -8,7 +8,8 @@ on: env: REGISTRY: ghcr.io NAMESPACE: "${{ github.repository }}" - MULTI_ARCH: true + BUILD_AMD64: true + BUILD_ARM64: true USE_QEMU: false NODE_VERSION: 22.10.0 PNPM_VERSION: 9.10.0 @@ -19,7 +20,8 @@ jobs: outputs: REGISTRY: ${{ env.REGISTRY }} NAMESPACE: ${{ env.NAMESPACE }} - MULTI_ARCH: ${{ env.MULTI_ARCH }} + BUILD_AMD64: ${{ env.BUILD_AMD64 }} + BUILD_ARM64: ${{ env.BUILD_ARM64 }} USE_QEMU: ${{ env.USE_QEMU }} NODE_VERSION: ${{ env.NODE_VERSION }} PNPM_VERSION: ${{ env.PNPM_VERSION }} @@ -30,7 +32,7 @@ jobs: release: uses: ./.github/workflows/release.yml - build: + build-amd64: uses: ./.github/workflows/build.yml if: ${{ needs.release.outputs.release-created == 'true' }} needs: @@ -43,8 +45,26 @@ jobs: MAJOR_TAG: ${{ needs.release.outputs.major-tag }} MINOR_TAG: ${{ needs.release.outputs.minor-tag }} PATCH_TAG: ${{ needs.release.outputs.patch-tag }} - MULTI_ARCH: ${{ needs.expose-vars.outputs.MULTI_ARCH == 'false' }} - USE_QEMU: ${{ needs.expose-vars.outputs.USE_QEMU == 'false' }} + BUILD_AMD64: ${{ needs.expose-vars.outputs.BUILD_AMD64 == 'true' }} + BUILD_ARM64: false + USE_QEMU: ${{ needs.expose-vars.outputs.USE_QEMU == 'true' }} + + build-arm64: + uses: ./.github/workflows/build.yml + if: ${{ needs.release.outputs.release-created == 'true' }} + needs: + - expose-vars + - release + with: + REGISTRY: ${{ needs.expose-vars.outputs.REGISTRY }} + NAMESPACE: ${{ needs.expose-vars.outputs.NAMESPACE }} + TAG: ${{ needs.release.outputs.major-tag }}.${{ needs.release.outputs.minor-tag }}.${{ needs.release.outputs.patch-tag }} + MAJOR_TAG: ${{ needs.release.outputs.major-tag }} + MINOR_TAG: ${{ needs.release.outputs.minor-tag }} + PATCH_TAG: ${{ needs.release.outputs.patch-tag }} + BUILD_AMD64: false + BUILD_ARM64: ${{ needs.expose-vars.outputs.BUILD_ARM64 == 'true' }} + USE_QEMU: ${{ needs.expose-vars.outputs.USE_QEMU == 'true' }} npm-publish: uses: ./.github/workflows/npm.yml @@ -67,26 +87,10 @@ jobs: needs: - expose-vars - release + - build-amd64 steps: - name: Trigger helm-charts update env: GH_TOKEN: ${{ secrets.HELM_CHART_TOKEN }} run: | gh workflow --repo cloud-pi-native/helm-charts run update-chart.yaml -f APP_VERSION=${{ needs.release.outputs.major-tag }}.${{ needs.release.outputs.minor-tag }}.${{ needs.release.outputs.patch-tag }} -f CHART_NAME=dso-console - - build-arm: - uses: ./.github/workflows/build.yml - if: ${{ needs.release.outputs.release-created == 'true' }} - needs: - - expose-vars - - release - - build - with: - REGISTRY: ${{ needs.expose-vars.outputs.REGISTRY }} - NAMESPACE: ${{ needs.expose-vars.outputs.NAMESPACE }} - TAG: ${{ needs.release.outputs.major-tag }}.${{ needs.release.outputs.minor-tag }}.${{ needs.release.outputs.patch-tag }} - MAJOR_TAG: ${{ needs.release.outputs.major-tag }} - MINOR_TAG: ${{ needs.release.outputs.minor-tag }} - PATCH_TAG: ${{ needs.release.outputs.patch-tag }} - MULTI_ARCH: ${{ needs.expose-vars.outputs.MULTI_ARCH == 'true' }} - USE_QEMU: ${{ needs.expose-vars.outputs.USE_QEMU == 'true' }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ded04da5a..acc9e09df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,8 @@ env: PNPM_VERSION: 9.10.0 REGISTRY: ghcr.io NAMESPACE: "${{ github.repository }}" - MULTI_ARCH: false + BUILD_AMD64: true + BUILD_ARM64: false USE_QEMU: false jobs: @@ -52,7 +53,8 @@ jobs: PNPM_VERSION: ${{ env.PNPM_VERSION }} REGISTRY: ${{ env.REGISTRY }} NAMESPACE: ${{ env.NAMESPACE }} - MULTI_ARCH: ${{ env.MULTI_ARCH }} + BUILD_AMD64: ${{ env.BUILD_AMD64 }} + BUILD_ARM64: ${{ env.BUILD_ARM64 }} USE_QEMU: ${{ env.USE_QEMU }} steps: - name: Exposing env vars @@ -115,7 +117,8 @@ jobs: REGISTRY: ${{ needs.expose-vars.outputs.REGISTRY }} NAMESPACE: ${{ needs.expose-vars.outputs.NAMESPACE }} TAG: pr-${{ github.event.pull_request.number || github.event.number }} - MULTI_ARCH: ${{ needs.expose-vars.outputs.MULTI_ARCH == 'true' }} + BUILD_AMD64: ${{ needs.expose-vars.outputs.BUILD_AMD64 == 'true' }} + BUILD_ARM64: ${{ needs.expose-vars.outputs.BUILD_ARM64 == 'true' }} USE_QEMU: ${{ needs.expose-vars.outputs.USE_QEMU == 'true' }} PR_NUMBER: ${{ github.event.pull_request.number || github.event.number }} secrets: diff --git a/apps/client/package.json b/apps/client/package.json index 1b3909086..bacd19f52 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -79,9 +79,11 @@ "unplugin-auto-import": "^0.17.8", "unplugin-vue-components": "^0.27.2", "vite": "^5.3.2", + "vite-plugin-pwa": "^0.21.0", "vitest": "^1.6.0", "vue-eslint-parser": "^9.4.3", - "vue-tsc": "^2.0.22" + "vue-tsc": "^2.0.22", + "workbox-window": "^7.3.0" }, "publishConfig": { "registry": "https://registry.npmjs.org/", diff --git a/apps/client/src/App.vue b/apps/client/src/App.vue index ece8c2d2e..63c716027 100644 --- a/apps/client/src/App.vue +++ b/apps/client/src/App.vue @@ -6,6 +6,7 @@ import { useSystemSettingsStore } from './stores/system-settings.js' import { useProjectStore } from './stores/project.js' import { useUserStore } from './stores/user.js' import { useAdminRoleStore } from './stores/admin-role.js' +import ReloadPrompt from './components/ReloadPrompt.vue' import { useServiceStore } from '@/stores/services-monitor.js' const keycloak = getKeycloak() @@ -102,6 +103,7 @@ watch(userStore, async () => { + diff --git a/apps/client/src/env.d.ts b/apps/client/src/env.d.ts new file mode 100644 index 000000000..b5f084a99 --- /dev/null +++ b/apps/client/src/env.d.ts @@ -0,0 +1,15 @@ +/// +/// + +declare module 'virtual:pwa-register/vue' { + import type { Ref } from 'vue' + import type { RegisterSWOptions } from 'vite-plugin-pwa/types' + + export type { RegisterSWOptions } + + export function useRegisterSW(options?: RegisterSWOptions): { + needRefresh: Ref + offlineReady: Ref + updateServiceWorker: (reloadPage?: boolean) => Promise + } +} diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index 72c0ce6c1..04c00ba51 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -8,10 +8,10 @@ import 'vue3-json-viewer/dist/index.css' import JsonViewer from 'vue3-json-viewer' // @ts-ignore '@gouvminint/vue-dsfr' missing types import { DsfrSelect, DsfrTag, VIcon } from '@gouvminint/vue-dsfr' -import { keycloakInit } from './utils/keycloak/keycloak' +import { keycloakInit } from './utils/keycloak/keycloak.js' import App from './App.vue' -import router from './router/index' +import router from './router/index.js' import 'virtual:uno.css' import 'virtual:unocss-devtools' diff --git a/apps/client/tsconfig.json b/apps/client/tsconfig.json index 2497bf546..3032f311d 100644 --- a/apps/client/tsconfig.json +++ b/apps/client/tsconfig.json @@ -13,15 +13,20 @@ // Base "baseUrl": "./", "rootDir": "./src", - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "Preserve", + "moduleResolution": "Bundler", "paths": { "@/*": [ "src/*" ] }, "resolveJsonModule": true, - "types": ["vitest", "vite/client"], + "types": [ + "vitest", + "vite/client", + "vite-plugin-pwa/vue", + "vite-plugin-pwa/client" + ], "allowImportingTsExtensions": false, "allowJs": true, "strict": true, @@ -48,7 +53,8 @@ "include": [ "./src/**/*.ts", "./src/**/*.js", - "./src/**/*.vue" + "./src/**/*.vue", + "./src/**/*.d.ts" ], "exclude": [ "./src/**/*.spec.ts", diff --git a/apps/client/vite.config.ts b/apps/client/vite.config.ts index edae44da3..a53312cc2 100644 --- a/apps/client/vite.config.ts +++ b/apps/client/vite.config.ts @@ -5,6 +5,7 @@ import UnoCSS from 'unocss/vite' import vue from '@vitejs/plugin-vue' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' +import { VitePWA } from 'vite-plugin-pwa' import { vueDsfrAutoimportPreset, vueDsfrComponentResolver, @@ -78,6 +79,32 @@ export default defineConfig({ ], }), UnoCSS(), + VitePWA({ + registerType: 'prompt', // autoUpdate + workbox: { + maximumFileSizeToCacheInBytes: 5_000_000, + cleanupOutdatedCaches: true, + }, + devOptions: { + enabled: false, + }, + manifest: { + name: 'Console Cloud Pi Native', + short_name: 'CPiN', + description: 'Une console web pour les controller tous', + start_url: '/', + display: 'standalone', + background_color: '#ffffff', + theme_color: '#42b883', + icons: [ + { + src: '/favicon.ico', + sizes: '16x16', + type: 'image/png', + }, + ], + }, + }), ], base: '/', resolve: { diff --git a/apps/server/src/resources/cluster/router.spec.ts b/apps/server/src/resources/cluster/router.spec.ts index f9f1ef68a..7822b5ec9 100644 --- a/apps/server/src/resources/cluster/router.spec.ts +++ b/apps/server/src/resources/cluster/router.spec.ts @@ -56,7 +56,19 @@ describe('test clusterContract', () => { describe('getClusterDetails', () => { it('should return cluster details', async () => { - const cluster: ClusterDetails = { id: faker.string.uuid(), clusterResources: true, infos: '', label: faker.string.alpha(), privacy: 'public', stageIds: [], zoneId: faker.string.uuid(), kubeconfig: { cluster: { tlsServerName: faker.string.alpha() }, user: {} } } + const cluster: ClusterDetails = { + id: faker.string.uuid(), + clusterResources: true, + infos: '', + label: faker.string.alpha(), + privacy: 'public', + stageIds: [], + zoneId: faker.string.uuid(), + kubeconfig: { + cluster: { tlsServerName: faker.string.alpha() }, + user: {}, + }, + } const user = getUserMockInfos(true) authUserMock.mockResolvedValueOnce(user) @@ -111,7 +123,19 @@ describe('test clusterContract', () => { }) describe('createCluster', () => { - const cluster: ClusterDetails = { id: faker.string.uuid(), clusterResources: true, infos: '', label: faker.string.alpha(), privacy: 'public', stageIds: [], zoneId: faker.string.uuid(), kubeconfig: { cluster: { tlsServerName: faker.string.alpha() }, user: {} } } + const cluster: ClusterDetails = { + id: faker.string.uuid(), + clusterResources: true, + infos: '', + label: faker.string.alpha(), + privacy: 'public', + stageIds: [], + zoneId: faker.string.uuid(), + kubeconfig: { + cluster: { tlsServerName: faker.string.alpha() }, + user: {}, + }, + } it('should return created cluster', async () => { const user = getUserMockInfos(true) @@ -153,7 +177,18 @@ describe('test clusterContract', () => { describe('updateCluster', () => { const clusterId = faker.string.uuid() - const cluster: Omit = { clusterResources: true, infos: '', label: faker.string.alpha(), privacy: 'public', stageIds: [], zoneId: faker.string.uuid(), kubeconfig: { cluster: { tlsServerName: faker.string.alpha() }, user: {} } } + const cluster: Omit = { + clusterResources: true, + infos: '', + label: faker.string.alpha(), + privacy: 'public', + stageIds: [], + zoneId: faker.string.uuid(), + kubeconfig: { + cluster: { tlsServerName: faker.string.alpha() }, + user: {}, + }, + } it('should return created cluster', async () => { const user = getUserMockInfos(true) diff --git a/packages/hooks/src/hooks/hook.spec.ts b/packages/hooks/src/hooks/hook.spec.ts index 66338f535..ffc120259 100644 --- a/packages/hooks/src/hooks/hook.spec.ts +++ b/packages/hooks/src/hooks/hook.spec.ts @@ -1,8 +1,7 @@ import { describe, expect, it } from 'vitest' -import { PluginApi } from '../utils/utils.ts' +import { PluginApi, okStatus } from '../utils/utils.ts' import { createHook, executeStep } from './hook.ts' -const okStatus = { status: { result: 'OK' } } as const const koStatus = { status: { result: 'KO', message: 'Failed' } } as const const warningStatus = { status: { result: 'WARNING', message: 'Failed' } } as const diff --git a/packages/hooks/src/utils/utils.ts b/packages/hooks/src/utils/utils.ts index 3607ec40a..ed3b8a5ec 100644 --- a/packages/hooks/src/utils/utils.ts +++ b/packages/hooks/src/utils/utils.ts @@ -26,3 +26,5 @@ export const disabledOrDefaultOrNullish = (value?: string): boolean | undefined export const specificallyDisabled = (value?: string): boolean | undefined => value ? value === DISABLED : undefined export const specificallyEnabled = (value?: string): boolean | undefined => value ? value === ENABLED : undefined export const defaultOrNullish = (value?: string): boolean | undefined => value ? DEFAULT === value : true + +export const okStatus = { status: { result: 'OK' } } as const diff --git a/packages/shared/src/schemas/cluster.ts b/packages/shared/src/schemas/cluster.ts index eaf3a3a46..720414eea 100644 --- a/packages/shared/src/schemas/cluster.ts +++ b/packages/shared/src/schemas/cluster.ts @@ -38,8 +38,7 @@ export const KubeconfigSchema = z.object({ cluster: z.object({ server: z.string() .optional(), - tlsServerName: z.string() - .min(1), + tlsServerName: z.string(), skipTLSVerify: z.boolean() .optional(), caData: z.string() diff --git a/packages/shared/src/utils/const.ts b/packages/shared/src/utils/const.ts index 5f3f5bab2..aa4647ad0 100644 --- a/packages/shared/src/utils/const.ts +++ b/packages/shared/src/utils/const.ts @@ -1,5 +1,6 @@ export const adminGroupPath = '/admin' +export const inClusterLabel = 'in-cluster' as const export const projectIsLockedInfo = 'Le projet est verrouillé, pas d\'action possible' export const missingCredentials = 'Si le dépôt est privé, vous devez renseigner au moins le nom d\'utilisateur ou le token' export const invalidGitUrl = 'L\'adresse doit commencer par https et se terminer par .git' diff --git a/plugins/argocd/package.json b/plugins/argocd/package.json index 19d44cf59..5e1484b25 100644 --- a/plugins/argocd/package.json +++ b/plugins/argocd/package.json @@ -1,7 +1,7 @@ { "name": "@cpn-console/argocd-plugin", "type": "module", - "version": "2.1.2", + "version": "2.1.3", "private": false, "description": "", "main": "dist/index.js", diff --git a/plugins/argocd/src/cluster.ts b/plugins/argocd/src/cluster.ts index fb68e41e4..da2f336d9 100644 --- a/plugins/argocd/src/cluster.ts +++ b/plugins/argocd/src/cluster.ts @@ -1,11 +1,16 @@ import type { V1Secret } from '@kubernetes/client-node' import { type ClusterObject, type StepCall, parseError } from '@cpn-console/hooks' +import { inClusterLabel } from '@cpn-console/shared' import { getConfig, getK8sApi } from './utils.js' export const upsertCluster: StepCall = async (payload) => { try { const cluster = payload.args - await createClusterSecret(cluster) + if (cluster.label === inClusterLabel) { + await deleteClusterSecret(cluster.secretName) + } else { + await createClusterSecret(cluster) + } return { status: { result: 'OK', diff --git a/plugins/argocd/src/functions.ts b/plugins/argocd/src/functions.ts index da5a8ad78..017545d6f 100644 --- a/plugins/argocd/src/functions.ts +++ b/plugins/argocd/src/functions.ts @@ -5,6 +5,7 @@ import { dump } from 'js-yaml' import type { GitlabProjectApi } from '@cpn-console/gitlab-plugin/types/class.js' import type { VaultProjectApi } from '@cpn-console/vault-plugin/types/class.js' import { PatchUtils } from '@kubernetes/client-node' +import { inClusterLabel } from '@cpn-console/shared' import { generateAppProjectName, generateApplicationName, getConfig, getCustomK8sApi, uniqueResource } from './utils.js' import { getApplicationObject, getMinimalApplicationObject } from './applications.js' import { getAppProjectObject, getMinimalAppProjectPatch } from './app-project.js' @@ -232,7 +233,7 @@ async function ensureInfraEnvValues(project: Project, environment: Environment, 'dso/environment': environment.name, }, argocd: { - cluster: 'in-cluster', + cluster: inClusterLabel, namespace: getConfig().namespace, project: appProjectName, envChartVersion: process.env.DSO_ENV_CHART_VERSION ?? 'dso-env-1.4.0', @@ -264,19 +265,23 @@ async function ensureInfraEnvValues(project: Project, environment: Environment, async function getArgoRepoSource(repoName: string, env: string, gitlabApi: GitlabProjectApi): Promise { const targetRevision = 'HEAD' - const repoId = await gitlabApi.getProjectId(repoName) - const repoURL = await gitlabApi.getRepoUrl(repoName) - const files = await gitlabApi.listFiles(repoId, { path: '/', ref: 'HEAD', recursive: false }) const valueFiles = [] // Empty means not a Helm repository let path = '.' - const result = files.find(f => f.name === 'values.yaml') - if (result) { - valueFiles.push('values.yaml') - path = dirname(result.path) - const valuesEnv = `values-${env}.yaml` - if (files.find(f => (path === '.' && f.path === valuesEnv) || f.path === `${path}/${valuesEnv}`)) { - valueFiles.push(valuesEnv) + const repoId = await gitlabApi.getProjectId(repoName) + const repoURL = await gitlabApi.getRepoUrl(repoName) + try { + const files = await gitlabApi.listFiles(repoId, { path: '/', ref: 'HEAD', recursive: false }) + const result = files.find(f => f.name === 'values.yaml') + if (result) { + valueFiles.push('values.yaml') + path = dirname(result.path) + const valuesEnv = `values-${env}.yaml` + if (files.find(f => (path === '.' && f.path === valuesEnv) || f.path === `${path}/${valuesEnv}`)) { + valueFiles.push(valuesEnv) + } } + } catch (error) { + console.log(`Error ignored when trying to list files of repository ${repoName}: ${error.message}`) } return { repoURL, diff --git a/plugins/argocd/src/index.ts b/plugins/argocd/src/index.ts index a1e8fa0cc..09840987b 100644 --- a/plugins/argocd/src/index.ts +++ b/plugins/argocd/src/index.ts @@ -10,7 +10,7 @@ export const plugin: Plugin = { subscribedHooks: { upsertProject: { steps: { - post: upsertProject, + main: upsertProject, }, }, deleteProject: { diff --git a/plugins/gitlab/package.json b/plugins/gitlab/package.json index d599302d4..3a8eadd36 100644 --- a/plugins/gitlab/package.json +++ b/plugins/gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@cpn-console/gitlab-plugin", "type": "module", - "version": "2.4.2", + "version": "2.4.3", "private": false, "description": "", "main": "dist/index.js", diff --git a/plugins/gitlab/src/class.ts b/plugins/gitlab/src/class.ts index b495cdf39..4d90338a2 100644 --- a/plugins/gitlab/src/class.ts +++ b/plugins/gitlab/src/class.ts @@ -28,34 +28,157 @@ type PendingCommits = Record }> -export class GitlabProjectApi extends PluginApi { - private api: Gitlab - private project: Project | UniqueRepo - private gitlabGroup: GroupSchema & { statistics: GroupStatisticsSchema } | undefined - private specialRepositories: string[] = [infraAppsRepoName, internalMirrorRepoName] +export class GitlabApi extends PluginApi { + protected api: Gitlab private pendingCommits: PendingCommits = {} - // private organizationGroup: GroupSchema & { statistics: GroupStatisticsSchema } | undefined - constructor(project: Project | UniqueRepo) { + constructor() { super() - this.project = project this.api = getApi() } - // Group Project - private async createProjectGroup(): Promise { - const searchResult = await this.api.Groups.search(this.project.name) - const parentId = await getOrganizationId(this.project.organization.name) - const existingGroup = searchResult.find(group => group.parent_id === parentId && group.name === this.project.name) + public async createEmptyRepository(repoName: string, groupId: number, description?: string | undefined) { + const namespaceId = groupId + const project = await this.api.Projects.create({ + name: repoName, + path: repoName, + namespaceId, + description, + }) + // Dépôt tout juste créé, zéro branche => pas d'erreur (filesTree undefined) + await this.api.Commits.create(project.id, 'main', 'ci: 🌱 First commit', []) + return project + } - if (existingGroup) return existingGroup + public async commitCreateOrUpdate( + repoId: number, + fileContent: string, + filePath: string, + branch: string = 'main', + comment: string = 'ci: :robot_face: Update file content', + ): Promise { + let action: CommitAction['action'] = 'create' - return this.api.Groups.create(this.project.name, this.project.name, { - parentId, - projectCreationLevel: 'maintainer', - subgroupCreationLevel: 'owner', - defaultBranchProtection: 0, - }) + const branches = await this.api.Branches.all(repoId) + if (branches.some(b => b.name === branch)) { + let actualFile: RepositoryFileExpandedSchema | undefined + try { + actualFile = await this.api.RepositoryFiles.show(repoId, filePath, branch) + } catch (_) {} + if (actualFile) { + const newContentDigest = createHash('sha256').update(fileContent).digest('hex') + if (actualFile.content_sha256 === newContentDigest) { + // Already up-to-date + return false + } + // Update needed + action = 'update' + } + } + + const commitAction: CommitAction = { + action, + filePath, + content: fileContent, + } + this.addActions(repoId, branch, comment, [commitAction]) + + return true + } + + /** + * Fonction pour supprimer une liste de fichiers d'un repo + * @param repoId + * @param files + * @param branch + * @param comment + */ + public async commitDelete( + repoId: number, + files: string[], + branch: string = 'main', + comment: string = 'ci: :robot_face: Delete files', + ): Promise { + if (files.length) { + const commitActions: CommitAction[] = files.map((filePath) => { + return { + action: 'delete', + filePath, + } + }) + this.addActions(repoId, branch, comment, commitActions) + return true + } + return false + } + + private addActions(repoId: number, branch: string, comment: string, commitActions: CommitAction[]) { + if (!this.pendingCommits[repoId]) { + this.pendingCommits[repoId] = { branches: {} } + } + if (this.pendingCommits[repoId].branches[branch]) { + this.pendingCommits[repoId].branches[branch].actions.push(...commitActions) + this.pendingCommits[repoId].branches[branch].messages.push(comment) + } else { + this.pendingCommits[repoId].branches[branch] = { + actions: commitActions, + messages: [comment], + } + } + } + + public async commitFiles() { + let filesUpdated: number = 0 + for (const [id, repo] of objectEntries(this.pendingCommits)) { + for (const [branch, details] of objectEntries(repo.branches)) { + const filesNumber = details.actions.length + if (filesNumber) { + filesUpdated += filesNumber + const message = [`ci: :robot_face: Update ${filesNumber} file${filesNumber > 1 ? 's' : ''}`, ...details.messages.filter(m => m)].join('\n') + await this.api.Commits.create(id, branch, message, details.actions) + } + } + } + return filesUpdated + } + + public async listFiles(repoId: number, options: AllRepositoryTreesOptions & PaginationRequestOptions<'keyset'> = {}) { + options.path = options?.path ?? '/' + options.ref = options?.ref ?? 'main' + options.recursive = options?.recursive ?? false + try { + const files: RepositoryTreeSchema[] = await this.api.Repositories.allRepositoryTrees(repoId, options) + // if (depth >= 0) { + // for (const file of files) { + // if (file.type !== 'tree') { + // return [] + // } + // const childrenFiles = await this.listFiles(repoId, { depth: depth - 1, ...options, path: file.path }) + // console.trace({ file, childrenFiles }) + + // files.push(...childrenFiles) + // } + // } + return files + } catch (error) { + const { cause } = error as GitbeakerRequestError + if (cause?.description === '404 Tree Not Found') { + // Empty repository, with zero commit ==> Zero files + return [] + } else { + throw error + } + } + } + + public async deleteRepository(repoId: number) { + return this.api.Projects.remove(repoId, { permanentlyRemove: true }) + } +} + +export class GitlabZoneApi extends GitlabApi { + constructor() { + super() } // Group Infra @@ -64,23 +187,54 @@ export class GitlabProjectApi extends PluginApi { // Get or create projects_root_dir/infra group const searchResult = await this.api.Groups.search(infraGroupName) const existingParentGroup = searchResult.find(group => group.parent_id === rootId && group.name === infraGroupName) - const infraParentGroup = existingParentGroup || await this.api.Groups.create(infraGroupName, infraGroupPath, { + return existingParentGroup || await this.api.Groups.create(infraGroupName, infraGroupPath, { parentId: rootId, projectCreationLevel: 'maintainer', subgroupCreationLevel: 'owner', defaultBranchProtection: 0, - description: 'Group of all organization infrastructure groups.', + description: 'Group that hosts infrastructure-as-code repositories for all zones (ArgoCD pull targets).', }) - // Get or create projects_root_dir/infra/ group - const organizationName = this.project.organization.name - const existingGroup = searchResult.find(group => group.parent_id === infraParentGroup.id && group.name === organizationName) + } + + public async getOrCreateInfraProject(zone: string) { + const infraGroup = await this.getOrCreateInfraGroup() + // Get or create projects_root_dir/infra/zone + const infraProjects = await this.api.Groups.allProjects(infraGroup.id) + return infraProjects.find(repo => repo.name === zone) ?? await this.createEmptyRepository( + zone, + infraGroup.id, + 'Repository hosting deployment files for this zone.', + ) + } +} + +export class GitlabProjectApi extends GitlabApi { + private project: Project | UniqueRepo + private gitlabGroup: GroupSchema & { statistics: GroupStatisticsSchema } | undefined + private specialRepositories: string[] = [infraAppsRepoName, internalMirrorRepoName] + private zoneApi: GitlabZoneApi + // private organizationGroup: GroupSchema & { statistics: GroupStatisticsSchema } | undefined + + constructor(project: Project | UniqueRepo) { + super() + this.project = project + this.api = getApi() + this.zoneApi = new GitlabZoneApi() + } + + // Group Project + private async createProjectGroup(): Promise { + const searchResult = await this.api.Groups.search(this.project.name) + const parentId = await getOrganizationId(this.project.organization.name) + const existingGroup = searchResult.find(group => group.parent_id === parentId && group.name === this.project.name) + if (existingGroup) return existingGroup - return this.api.Groups.create(organizationName, organizationName, { - parentId: infraParentGroup.id, + + return this.api.Groups.create(this.project.name, this.project.name, { + parentId, projectCreationLevel: 'maintainer', subgroupCreationLevel: 'owner', defaultBranchProtection: 0, - description: 'Group that hosts infrastructure-as-code repositories for all zones of this organization (ArgoCD pull targets).', }) } @@ -133,14 +287,7 @@ export class GitlabProjectApi extends PluginApi { } public async getOrCreateInfraProject(zone: string) { - const infraGroup = await this.getOrCreateInfraGroup() - // Get or create projects_root_dir/infra/organization/zone - const infraProjects = await this.api.Groups.allProjects(infraGroup.id) - return infraProjects.find(repo => repo.name === zone) || await this.createEmptyRepository( - zone, - 'Repository hosting deployment files for this zone of the parent organization.', - infraGroup.id, - ) + return await this.zoneApi.getOrCreateInfraProject(zone) } public async getProjectToken(tokenName: string) { @@ -198,17 +345,9 @@ export class GitlabProjectApi extends PluginApi { })) } - public async createEmptyRepository(repoName: string, description?: string | undefined, groupId?: number | undefined) { - const namespaceId = groupId || (await this.getOrCreateProjectGroup()).id - const project = await this.api.Projects.create({ - name: repoName, - path: repoName, - namespaceId, - description, - }) - // Dépôt tout juste créé, zéro branche => pas d'erreur (filesTree undefined) - await this.api.Commits.create(project.id, 'main', 'ci: 🌱 First commit', []) - return project + public async createEmptyProjectRepository(repoName: string, description?: string | undefined) { + const namespaceId = (await this.getOrCreateProjectGroup()).id + return this.createEmptyRepository(repoName, namespaceId, description) } public async createCloneRepository(repoName: string, externalRepoUrn: string, creds?: RepoCreds) { @@ -226,101 +365,6 @@ export class GitlabProjectApi extends PluginApi { }) } - public async commitCreateOrUpdate( - repoId: number, - fileContent: string, - filePath: string, - branch: string = 'main', - comment: string = 'ci: :robot_face: Update file content', - ): Promise { - let action: CommitAction['action'] = 'create' - - const branches = await this.api.Branches.all(repoId) - if (branches.some(b => b.name === branch)) { - let actualFile: RepositoryFileExpandedSchema | undefined - try { - actualFile = await this.api.RepositoryFiles.show(repoId, filePath, branch) - } catch (_) {} - if (actualFile) { - const newContentDigest = createHash('sha256').update(fileContent).digest('hex') - if (actualFile.content_sha256 === newContentDigest) { - // Already up-to-date - return false - } - // Update needed - action = 'update' - } - } - - const commitAction: CommitAction = { - action, - filePath, - content: fileContent, - } - this.addActions(repoId, branch, comment, [commitAction]) - - return true - } - - /** - * Fonction pour supprimer une liste de fichiers d'un repo - * @param repoId - * @param files - * @param branch - * @param comment - */ - public async commitDelete( - repoId: number, - files: string[], - branch: string = 'main', - comment: string = 'ci: :robot_face: Delete files', - ): Promise { - if (files.length) { - const commitActions: CommitAction[] = files.map((filePath) => { - return { - action: 'delete', - filePath, - } - }) - this.addActions(repoId, branch, comment, commitActions) - return true - } - return false - } - - public async listFiles(repoId: number, options: AllRepositoryTreesOptions & PaginationRequestOptions<'keyset'> = {}) { - options.path = options?.path ?? '/' - options.ref = options?.ref ?? 'main' - options.recursive = options?.recursive ?? false - try { - const files: RepositoryTreeSchema[] = await this.api.Repositories.allRepositoryTrees(repoId, options) - // if (depth >= 0) { - // for (const file of files) { - // if (file.type !== 'tree') { - // return [] - // } - // const childrenFiles = await this.listFiles(repoId, { depth: depth - 1, ...options, path: file.path }) - // console.trace({ file, childrenFiles }) - - // files.push(...childrenFiles) - // } - // } - return files - } catch (error) { - const { cause } = error as GitbeakerRequestError - if (cause?.description === '404 Tree Not Found') { - // Empty repository, with zero commit ==> Zero files - return [] - } else { - throw error - } - } - } - - public async deleteRepository(repoId: number) { - return this.api.Projects.remove(repoId, { permanentlyRemove: true }) - } - // Special Repositories public async getSpecialRepositories(): Promise { return this.specialRepositories @@ -470,34 +514,4 @@ export class GitlabProjectApi extends PluginApi { ], }) } - - private addActions(repoId: number, branch: string, comment: string, commitActions: CommitAction[]) { - if (!this.pendingCommits[repoId]) { - this.pendingCommits[repoId] = { branches: {} } - } - if (this.pendingCommits[repoId].branches[branch]) { - this.pendingCommits[repoId].branches[branch].actions.push(...commitActions) - this.pendingCommits[repoId].branches[branch].messages.push(comment) - } else { - this.pendingCommits[repoId].branches[branch] = { - actions: commitActions, - messages: [comment], - } - } - } - - public async commitFiles() { - let filesUpdated: number = 0 - for (const [id, repo] of objectEntries(this.pendingCommits)) { - for (const [branch, details] of objectEntries(repo.branches)) { - const filesNumber = details.actions.length - if (filesNumber) { - filesUpdated += filesNumber - const message = [`ci: :robot_face: Update ${filesNumber} file${filesNumber > 1 ? 's' : ''}`, ...details.messages.filter(m => m)].join('\n') - await this.api.Commits.create(id, branch, message, details.actions) - } - } - } - return filesUpdated - } } diff --git a/plugins/gitlab/src/env.d.ts b/plugins/gitlab/src/env.d.ts index 81cd03469..46f7f90d7 100644 --- a/plugins/gitlab/src/env.d.ts +++ b/plugins/gitlab/src/env.d.ts @@ -1 +1,2 @@ +/// /// diff --git a/plugins/gitlab/src/functions.ts b/plugins/gitlab/src/functions.ts index fa1b97d5f..fda632db9 100644 --- a/plugins/gitlab/src/functions.ts +++ b/plugins/gitlab/src/functions.ts @@ -1,5 +1,5 @@ -import { parseError, specificallyDisabled } from '@cpn-console/hooks' -import type { PluginResult, Project, ProjectLite, StepCall, UniqueRepo } from '@cpn-console/hooks' +import { okStatus, parseError, specificallyDisabled } from '@cpn-console/hooks' +import type { PluginResult, Project, ProjectLite, StepCall, UniqueRepo, ZoneObject } from '@cpn-console/hooks' import { insert } from '@cpn-console/shared' import { deleteGroup } from './group.js' import { createUsername, getUser } from './user.js' @@ -99,7 +99,6 @@ export const upsertDsoProject: StepCall = async (payload) => { const { gitlab: gitlabApi, vault: vaultApi } = payload.apis await gitlabApi.getOrCreateProjectGroup() - await gitlabApi.getOrCreateInfraGroup() const { failedInUpsertUsers } = await ensureMembers(gitlabApi, project) if (failedInUpsertUsers) { @@ -186,7 +185,41 @@ export const syncRepository: StepCall = async (payload) => { } } -export const commitFiles: StepCall = async (payload) => { +export const upsertZone: StepCall = async (payload) => { + const returnResult: PluginResult = okStatus + try { + const gitlabApi = payload.apis.gitlab + await gitlabApi.getOrCreateInfraProject(payload.args.slug) + return returnResult + } catch (error) { + returnResult.error = parseError(cleanGitlabError(error)) + returnResult.status.result = 'KO' + returnResult.status.message = 'Can\'t reconcile please inspect logs' + return returnResult + } +} + +export const deleteZone: StepCall = async (payload) => { + const returnResult: PluginResult = { + status: { + result: 'OK', + message: 'Deleted', + }, + } + try { + const gitlabApi = payload.apis.gitlab + const zoneRepo = await gitlabApi.getOrCreateInfraProject(payload.args.slug) + await gitlabApi.deleteRepository(zoneRepo.id) + return returnResult + } catch (error) { + returnResult.error = parseError(cleanGitlabError(error)) + returnResult.status.result = 'KO' + returnResult.status.message = 'Can\'t reconcile please inspect logs' + return returnResult + } +} + +export const commitFiles: StepCall = async (payload) => { const returnResult = payload.results.gitlab try { const filesUpdated = await payload.apis.gitlab.commitFiles() diff --git a/plugins/gitlab/src/index.ts b/plugins/gitlab/src/index.ts index 6771e2a24..7dc8d0d6f 100644 --- a/plugins/gitlab/src/index.ts +++ b/plugins/gitlab/src/index.ts @@ -1,16 +1,18 @@ -import type { DeclareModuleGenerator, DefaultArgs, Plugin, Project, UniqueRepo } from '@cpn-console/hooks' +import type { DeclareModuleGenerator, DefaultArgs, Plugin, Project, UniqueRepo, ZoneObject } from '@cpn-console/hooks' import { checkApi, commitFiles, deleteDsoProject, + deleteZone, getDsoProjectSecrets, syncRepository, upsertDsoProject, + upsertZone, } from './functions.js' import { getGroupRootId } from './utils.js' import infos from './infos.js' import monitor from './monitor.js' -import { GitlabProjectApi } from './class.js' +import { GitlabProjectApi, GitlabZoneApi } from './class.js' const onlyApi = { api: (project: Project | UniqueRepo) => new GitlabProjectApi(project) } @@ -47,6 +49,19 @@ export const plugin: Plugin = { post: commitFiles, }, }, + upsertZone: { + api: () => new GitlabZoneApi(), + steps: { + main: upsertZone, + post: commitFiles, + }, + }, + deleteZone: { + api: () => new GitlabZoneApi(), + steps: { + main: deleteZone, + }, + }, }, monitor, start, @@ -56,7 +71,9 @@ declare module '@cpn-console/hooks' { interface HookPayloadApis { gitlab: Args extends Project | UniqueRepo ? GitlabProjectApi - : undefined + : Args extends ZoneObject + ? GitlabZoneApi + : undefined } interface ProjectStore extends DeclareModuleGenerator {} interface Config extends DeclareModuleGenerator {} diff --git a/plugins/gitlab/src/repositories.ts b/plugins/gitlab/src/repositories.ts index 308b60871..401c13cf1 100644 --- a/plugins/gitlab/src/repositories.ts +++ b/plugins/gitlab/src/repositories.ts @@ -30,12 +30,12 @@ export async function ensureRepositories(gitlabApi: GitlabProjectApi, project: P if (!gitlabRepositories.find(repo => repo.name === infraAppsRepoName)) { promises.push( - gitlabApi.createEmptyRepository(infraAppsRepoName), + gitlabApi.createEmptyProjectRepository(infraAppsRepoName), ) } if (!gitlabRepositories.find(repo => repo.name === internalMirrorRepoName)) { promises.push( - gitlabApi.createEmptyRepository(internalMirrorRepoName) + gitlabApi.createEmptyProjectRepository(internalMirrorRepoName) .then(mirrorRepo => provisionMirror(mirrorRepo.id)), ) } @@ -52,7 +52,7 @@ async function ensureRepositoryExists(gitlabRepositories: CondensedProjectSchema if (!gitlabRepository) { gitlabRepository = repository.externalRepoUrl ? await gitlabApi.createCloneRepository(repository.internalRepoName, externalRepoUrn, repository.newCreds ?? { username: currentVaultSecret?.data.GIT_INPUT_USER, token: currentVaultSecret?.data.GIT_INPUT_PASSWORD }) - : await gitlabApi.createEmptyRepository(repository.internalRepoName) + : await gitlabApi.createEmptyProjectRepository(repository.internalRepoName) } if (!repository.externalRepoUrl) { diff --git a/plugins/kubernetes/src/api.ts b/plugins/kubernetes/src/api.ts index b1f85ee54..d4e5308eb 100644 --- a/plugins/kubernetes/src/api.ts +++ b/plugins/kubernetes/src/api.ts @@ -1,51 +1,16 @@ import { ApisApi, CoreV1Api, KubeConfig } from '@kubernetes/client-node' import type { ClusterObject } from '@cpn-console/hooks' +import { inClusterLabel } from '@cpn-console/shared' import { AnyObjectsApi } from './customApiClass.js' export function createCoreV1Api(cluster: ClusterObject) { - if (!cluster.user.keyData && !cluster.user.token) { - // Special case: disable direct calls to the cluster - console.log(`Direct kubernetes API calls are disabled for cluster ${cluster.label}`) - return - } - const kc = new KubeConfig() - const clusterConfig = { - ...cluster.cluster, - skipTLSVerify: cluster.cluster.skipTLSVerify ?? false, - name: 'You should pass !', - } - const userConfig = { - ...cluster.user, - name: cluster.id, - } - if (cluster.cluster.skipTLSVerify) { - delete clusterConfig.caData - } - kc.loadFromClusterAndUser(clusterConfig, userConfig) - return kc.makeApiClient(CoreV1Api) + const kc = makeClusterApi(cluster) + return kc ? kc.makeApiClient(CoreV1Api) : undefined } export function createApisApi(cluster: ClusterObject) { - if (!cluster.user.keyData && !cluster.user.token) { - // Special case: disable direct calls to the cluster - console.log(`Direct kubernetes API calls are disabled for cluster ${cluster.label}`) - return - } - const kc = new KubeConfig() - const clusterConfig = { - ...cluster.cluster, - skipTLSVerify: cluster.cluster.skipTLSVerify ?? false, - name: 'You should pass !', - } - const userConfig = { - ...cluster.user, - name: cluster.id, - } - if (cluster.cluster.skipTLSVerify) { - delete clusterConfig.caData - } - kc.loadFromClusterAndUser(clusterConfig, userConfig) - return kc.makeApiClient(ApisApi) + const kc = makeClusterApi(cluster) + return kc ? kc.makeApiClient(ApisApi) : undefined } export function createCoreV1Apis(clusters: ClusterObject[]) { @@ -53,23 +18,32 @@ export function createCoreV1Apis(clusters: ClusterObject[]) { } export function createCustomObjectApi(cluster: ClusterObject) { + const kc = makeClusterApi(cluster) + return kc ? kc.makeApiClient(AnyObjectsApi) : undefined +} + +function makeClusterApi(cluster: ClusterObject): KubeConfig | undefined { if (!cluster.user.keyData && !cluster.user.token) { // Special case: disable direct calls to the cluster - return + return undefined } const kc = new KubeConfig() - const clusterConfig = { - ...cluster.cluster, - skipTLSVerify: cluster.cluster.skipTLSVerify ?? false, - name: 'You should pass !', - } - const userConfig = { - ...cluster.user, - name: cluster.id, - } - if (cluster.cluster.skipTLSVerify) { - delete clusterConfig.caData - } - kc.loadFromClusterAndUser(clusterConfig, userConfig) - return kc.makeApiClient(AnyObjectsApi) + if (cluster.label === inClusterLabel) { + kc.loadFromCluster() + } else { + const clusterConfig = { + ...cluster.cluster, + skipTLSVerify: cluster.cluster.skipTLSVerify ?? false, + name: 'You should pass !', + } + const userConfig = { + ...cluster.user, + name: cluster.id, + } + if (cluster.cluster.skipTLSVerify) { + delete clusterConfig.caData + } + kc.loadFromClusterAndUser(clusterConfig, userConfig) + } + return kc } diff --git a/plugins/kubernetes/src/class.ts b/plugins/kubernetes/src/class.ts index 2149bdd5b..46bf2aa3a 100644 --- a/plugins/kubernetes/src/class.ts +++ b/plugins/kubernetes/src/class.ts @@ -103,9 +103,7 @@ class KubernetesNamespace { try { await this.anyObjectApi.getNamespacedCustomObject(r.group, r.version, nsName, r.plural, r.name) await this.anyObjectApi.deleteNamespacedCustomObject(r.group, r.version, nsName, r.plural, r.name) - } catch (error) { - console.log(error) - } + } catch (_error) { } return this.anyObjectApi.createNamespacedCustomObject(r.group, r.version, nsName, r.plural, objToCreate) } diff --git a/plugins/vault/README.md b/plugins/vault/README.md index 48b66f4b6..ff70b3751 100644 --- a/plugins/vault/README.md +++ b/plugins/vault/README.md @@ -6,7 +6,8 @@ Plugin de gestion du plugin Vault | Env var | valeur possible | description | | --------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| VAULT_TOKEN | chaine | Root token ou token ayant les pleins droits sur le Vault | -| VAULT_URL | *url* | Url public d'accès au Vault | -| VAULT_INTERNAL_URL | *url* ou vide | Url par laquelle la console interroge le service Vault, si absent utilisation de l'url public | -| VAULT__HIDE_PROJECT_SERVICE | "true" ou vide | Décide si le plugin masque ou non le service dans l'interface du projet. Ne désactive pas la fonctionnalité du store projet seulement l'affichage. | +| VAULT_TOKEN | chaine | Root token ou token ayant les pleins droits sur le Vault | +| VAULT_URL | *url* | Url public d'accès au Vault | +| VAULT_INTERNAL_URL | *url* ou vide | Url par laquelle la console interroge le service Vault, si absent utilisation de l'url public | +| VAULT__HIDE_PROJECT_SERVICE | "true" ou vide | Décide si le plugin masque ou non le service dans l'interface du projet. Ne désactive pas la fonctionnalité du store projet seulement l'affichage. | +| VAULT__DISABLE_VAULT_SECRETS | "true" ou vide | Désactiver le déploiement des ressources nécessaires au Vault Secret Operator dans le namespace cible | diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 1732dc9b6..227e083e7 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@cpn-console/vault-plugin", "type": "module", - "version": "2.2.0", + "version": "2.2.1", "private": false, "description": "", "main": "dist/index.js", diff --git a/plugins/vault/src/class.ts b/plugins/vault/src/class.ts index e849cb57b..26b82f5bc 100644 --- a/plugins/vault/src/class.ts +++ b/plugins/vault/src/class.ts @@ -3,7 +3,7 @@ import axios from 'axios' import type { ProjectLite } from '@cpn-console/hooks' import { PluginApi } from '@cpn-console/hooks' import getConfig from './config.js' -import { getAuthMethod, isAppRoleEnabled } from './utils.js' +import { generateKVConfigUpdate, getAuthMethod, isAppRoleEnabled } from './utils.js' interface ReadOptions { throwIfNoEntry: boolean @@ -131,14 +131,14 @@ export class VaultProjectApi extends PluginApi { Project = { upsert: async () => { const token = await this.getToken() - let kvRes = await this.axios({ + const kvRes = await this.axios({ method: 'get', - url: `/v1/sys/mounts/${this.projectKvName}`, + url: `/v1/sys/mounts/${this.projectKvName}/tune`, headers: { 'X-Vault-Token': token }, validateStatus: code => [400, 200].includes(code), }) if (kvRes.status === 400) { - kvRes = await this.axios({ + await this.axios({ method: 'post', url: `/v1/sys/mounts/${this.projectKvName}`, headers: { @@ -149,10 +149,24 @@ export class VaultProjectApi extends PluginApi { config: { force_no_cache: true, }, + options: { + version: 2, + }, }, }) + } else { // means 200 status + const configUpdate = generateKVConfigUpdate(kvRes.data) + if (configUpdate) { + await this.axios({ + method: 'put', + url: `/v1/sys/mounts/${this.projectKvName}/tune`, + headers: { + 'X-Vault-Token': token, + }, + data: configUpdate, + }) + } } - // TODO faire une vérif des paramétrages sur 200 await this.Policy.ensureAll() await this.Group.upsert() @@ -249,12 +263,11 @@ export class VaultProjectApi extends PluginApi { }) }, delete: async () => { - const existingGroup = await this.axios({ + await this.axios({ method: 'delete', url: `/v1/identity/group/name/${this.groupName}`, headers: { 'X-Vault-Token': await this.getToken() }, }) - console.log({ existingGroup }) }, } diff --git a/plugins/vault/src/config.ts b/plugins/vault/src/config.ts index 130248614..36362e1b0 100644 --- a/plugins/vault/src/config.ts +++ b/plugins/vault/src/config.ts @@ -6,6 +6,7 @@ class Config { token: string projectsRootDir: string hideProjectService: boolean + disableVaultSecrets: boolean constructor() { this.token = requiredEnv('VAULT_TOKEN') this.publicUrl = removeTrailingSlash(requiredEnv('VAULT_URL')) @@ -14,6 +15,7 @@ class Config { ? removeTrailingSlash(process.env.VAULT_INTERNAL_URL) : this.publicUrl this.hideProjectService = process.env.VAULT__HIDE_PROJECT_SERVICE === 'true' + this.disableVaultSecrets = process.env.VAULT__DISABLE_VAULT_SECRETS === 'true' } } diff --git a/plugins/vault/src/functions.ts b/plugins/vault/src/functions.ts index 1e5f26db5..d3b06c218 100644 --- a/plugins/vault/src/functions.ts +++ b/plugins/vault/src/functions.ts @@ -1,6 +1,7 @@ -import { parseError } from '@cpn-console/hooks' +import { okStatus, parseError } from '@cpn-console/hooks' import type { Project, ProjectLite, StepCall } from '@cpn-console/hooks' import { generateVaultAuth, generateVsoSecret, generateVsoVaultConnection } from './vso.js' +import getConfig from './config.js' export const upsertProject: StepCall = async (payload) => { try { @@ -30,7 +31,9 @@ export const deployAuth: StepCall = async (payload) => { throw new Error('no Vault available') } const appRoleCreds = await payload.apis.vault.Role.getCredentials() - + if (getConfig().disableVaultSecrets) { + return okStatus + } // loop on each env to verify if vault CRDs are installed on the cluster for (const ns of Object.values(kubeApi.namespaces)) { const apiVersions = await ns.apisApi?.getAPIVersions() @@ -66,11 +69,7 @@ export const deployAuth: StepCall = async (payload) => { }) } } - return { - status: { - result: 'OK', - }, - } + return okStatus } catch (error) { return { error: parseError(error), diff --git a/plugins/vault/src/utils.ts b/plugins/vault/src/utils.ts index 9afcd6d4a..4d1facf85 100644 --- a/plugins/vault/src/utils.ts +++ b/plugins/vault/src/utils.ts @@ -13,3 +13,14 @@ export async function isAppRoleEnabled(axiosInstance: AxiosInstance, token: stri const methods = await getAuthMethod(axiosInstance, token) return Object.keys(methods).includes('approle/') } + +export const minimumConfig = { + type: 'kv', + options: { + version: 2, + }, +} +export function generateKVConfigUpdate(config: Record): typeof minimumConfig | void { + if (config?.type !== minimumConfig.type) return minimumConfig + if (config?.options?.version !== minimumConfig.options.version) return minimumConfig +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e18a5878..57278ed76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,7 +15,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^2.26.0 - version: 2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)) + version: 2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) '@commitlint/cli': specifier: ^19.3.0 version: 19.3.0(@types/node@22.8.2)(typescript@5.5.3) @@ -103,7 +103,7 @@ importers: version: 13.13.2 cypress-vite: specifier: ^1.5.0 - version: 1.5.0(vite@5.3.3(@types/node@22.8.2)) + version: 1.5.0(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) devDependencies: '@cpn-console/eslint-config': specifier: workspace:^ @@ -131,10 +131,10 @@ importers: version: 0.61.9 '@vitejs/plugin-vue': specifier: ^5.0.5 - version: 5.0.5(vite@5.3.3(@types/node@22.8.2))(vue@3.5.6(typescript@5.5.3)) + version: 5.0.5(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))(vue@3.5.6(typescript@5.5.3)) '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) '@vue/eslint-config-typescript': specifier: ^13.0.0 version: 13.0.0(eslint-plugin-vue@9.27.0(eslint@9.7.0))(eslint@9.7.0)(typescript@5.5.3) @@ -170,25 +170,31 @@ importers: version: 5.5.3 unocss: specifier: ^0.61.9 - version: 0.61.9(postcss@8.4.39)(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2)) + version: 0.61.9(postcss@8.4.39)(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) unplugin-auto-import: specifier: ^0.17.8 - version: 0.17.8(rollup@4.18.1) + version: 0.17.8(rollup@2.79.2) unplugin-vue-components: specifier: ^0.27.2 - version: 0.27.2(@babel/parser@7.25.6)(rollup@4.18.1)(vue@3.5.6(typescript@5.5.3)) + version: 0.27.2(@babel/parser@7.26.2)(rollup@2.79.2)(vue@3.5.6(typescript@5.5.3)) vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) + vite-plugin-pwa: + specifier: ^0.21.0 + version: 0.21.0(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) vue-eslint-parser: specifier: ^9.4.3 version: 9.4.3(eslint@9.7.0) vue-tsc: specifier: ^2.0.22 version: 2.0.26(typescript@5.5.3) + workbox-window: + specifier: ^7.3.0 + version: 7.3.0 apps/server: dependencies: @@ -293,7 +299,7 @@ importers: version: 6.19.2 vitest-mock-extended: specifier: ^1.3.1 - version: 1.3.1(typescript@5.5.3)(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.3.1(typescript@5.5.3)(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) devDependencies: '@cpn-console/eslint-config': specifier: workspace:^ @@ -312,7 +318,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) fastify-plugin: specifier: ^4.5.1 version: 4.5.1 @@ -336,19 +342,19 @@ importers: version: 3.4.7(typescript@5.5.3) vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vite-node: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2) + version: 1.6.0(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) packages/eslintconfig: devDependencies: '@antfu/eslint-config': specifier: ^2.27.3 - version: 2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)) + version: 2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) packages/hooks: dependencies: @@ -360,7 +366,7 @@ importers: version: 0.4.0 vitest-mock-extended: specifier: ^1.3.1 - version: 1.3.1(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.3.1(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) zod: specifier: ^3.23.8 version: 3.23.8 @@ -379,7 +385,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^2.1.1 - version: 2.1.1(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)) + version: 2.1.1(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -397,7 +403,7 @@ importers: version: 6.19.2 vitest: specifier: ^2.1.1 - version: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3) + version: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) packages/shared: dependencies: @@ -428,7 +434,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -440,13 +446,13 @@ importers: version: 5.4.5 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vite-node: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2) + version: 1.6.0(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) packages/test-utils: dependencies: @@ -531,7 +537,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -543,10 +549,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/gitlab: dependencies: @@ -589,7 +595,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -601,10 +607,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/harbor: dependencies: @@ -641,7 +647,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -656,10 +662,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/keycloak: dependencies: @@ -687,7 +693,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -699,10 +705,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/kubernetes: dependencies: @@ -739,7 +745,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -751,10 +757,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/nexus: dependencies: @@ -785,7 +791,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -797,10 +803,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/sonarqube: dependencies: @@ -834,7 +840,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -846,10 +852,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) plugins/vault: dependencies: @@ -880,7 +886,7 @@ importers: version: 22.8.2 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)) + version: 1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) nodemon: specifier: ^3.1.4 version: 3.1.4 @@ -892,10 +898,10 @@ importers: version: 5.5.3 vite: specifier: ^5.3.2 - version: 5.3.3(@types/node@22.8.2) + version: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + version: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) packages: @@ -961,6 +967,12 @@ packages: '@antfu/utils@0.7.10': resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + '@aws-crypto/sha256-browser@5.2.0': resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} @@ -1090,10 +1102,18 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.25.4': resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.25.2': resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} @@ -1106,20 +1126,53 @@ packages: resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.24.7': resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.2': resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.24.8': resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.25.9': + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-environment-visitor@7.24.7': resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} @@ -1136,10 +1189,18 @@ packages: resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.24.8': resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} engines: {node: '>=6.9.0'} @@ -1152,28 +1213,62 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.24.7': resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.24.8': resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.24.7': resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.24.7': resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} @@ -1182,14 +1277,30 @@ packages: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.24.8': resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.25.6': resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} @@ -1208,6 +1319,59 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.24.7': resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} @@ -1220,139 +1384,472 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 - '@babel/plugin-transform-typescript@7.24.8': - resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.24.7': - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - - '@clack/core@0.3.4': - resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@clack/prompts@0.7.0': - resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} - bundledDependencies: - - is-unicode-supported + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/cli@19.3.0': - resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} - engines: {node: '>=v18'} - hasBin: true + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} - engines: {node: '>=v18'} + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/ensure@19.0.3': - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} - engines: {node: '>=v18'} + '@babel/plugin-transform-exponentiation-operator@7.25.9': + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/format@19.3.0': - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} - engines: {node: '>=v18'} + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/is-ignored@19.2.2': - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} - engines: {node: '>=v18'} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} - engines: {node: '>=v18'} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/load@19.2.0': - resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} - engines: {node: '>=v18'} + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/message@19.0.0': - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/parse@19.0.3': - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} - engines: {node: '>=v18'} + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/read@19.2.1': - resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} - engines: {node: '>=v18'} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-modules-commonjs@7.25.9': + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/to-lines@19.0.0': - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} - engines: {node: '>=v18'} + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/top-level@19.0.0': - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} - engines: {node: '>=v18'} + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} - engines: {node: '>=v18'} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@csstools/css-parser-algorithms@2.7.1': - resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} - engines: {node: ^14 || ^16 || >=18} + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} peerDependencies: - '@csstools/css-tokenizer': ^2.4.1 + '@babel/core': ^7.0.0-0 - '@csstools/css-tokenizer@2.4.1': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.24.8': + resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.8': + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@clack/core@0.3.4': + resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + + '@clack/prompts@0.7.0': + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + bundledDependencies: + - is-unicode-supported + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@commitlint/cli@19.3.0': + resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.2.2': + resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.0.3': + resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.0.3': + resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.0.0': + resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + engines: {node: '>=v18'} + + '@commitlint/format@19.3.0': + resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.2.2': + resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.2.2': + resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + engines: {node: '>=v18'} + + '@commitlint/load@19.2.0': + resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + engines: {node: '>=v18'} + + '@commitlint/message@19.0.0': + resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.0.3': + resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + engines: {node: '>=v18'} + + '@commitlint/read@19.2.1': + resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.1.0': + resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.0.3': + resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.0.0': + resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.0.0': + resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + engines: {node: '>=v18'} + + '@commitlint/types@19.0.3': + resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + engines: {node: '>=v18'} + + '@csstools/css-parser-algorithms@2.7.1': + resolution: {integrity: sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.4.1 + + '@csstools/css-tokenizer@2.4.1': resolution: {integrity: sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==} engines: {node: ^14 || ^16 || >=18} @@ -1855,6 +2352,9 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -1935,6 +2435,46 @@ packages: '@prisma/get-platform@5.19.1': resolution: {integrity: sha512-sCeoJ+7yt0UjnR+AXZL7vXlg5eNxaFOwC23h0KvW1YIXUoa7+W2ZcAUhoEQBmJTW4GrFqCuZ8YSP0mkDa4k3Zg==} + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + '@rollup/pluginutils@5.1.0': resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -2227,6 +2767,9 @@ packages: peerDependencies: eslint: '>=8.40.0' + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + '@swc/helpers@0.5.11': resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} @@ -2270,6 +2813,9 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} @@ -2297,6 +2843,9 @@ packages: '@types/request@2.48.12': resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} @@ -2309,6 +2858,9 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -2890,6 +3442,21 @@ packages: axios@1.7.7: resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2958,6 +3525,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-recipes@1.3.4: resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==} @@ -2967,6 +3539,9 @@ packages: buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -3017,6 +3592,9 @@ packages: caniuse-lite@1.0.30001653: resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} + caniuse-lite@1.0.30001680: + resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -3266,6 +3844,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + css-functions-list@3.2.2: resolution: {integrity: sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==} engines: {node: '>=12 || >=16'} @@ -3393,6 +3975,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -3496,9 +4082,17 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + electron-to-chromium@1.5.13: resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} + electron-to-chromium@1.5.60: + resolution: {integrity: sha512-HcraRUkTKJ+8yA3b10i9qvhUlPBRDlKjn1XGek1zDGVfAKcvi8TsUnImGqLiEm9j6ZulxXIWWIo9BmbkbCTGgA==} + elliptic@6.5.5: resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} @@ -3595,6 +4189,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -3790,6 +4388,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -3924,6 +4525,14 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -3936,6 +4545,9 @@ packages: resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} engines: {node: '>=18'} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4070,6 +4682,9 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -4300,6 +4915,9 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4459,6 +5077,9 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -4474,6 +5095,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} @@ -4493,6 +5118,10 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + is-retry-allowed@2.2.0: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} @@ -4575,6 +5204,11 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + javascript-time-ago@2.5.11: resolution: {integrity: sha512-Zeyf5R7oM1fSMW9zsU3YgAYwE0bimEeF54Udn2ixGd8PUwu+z1Yc5t4Y8YScJDMHD6uCx6giLt3VJR5K4CMwbg==} @@ -4699,6 +5333,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -4747,6 +5385,10 @@ packages: resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} engines: {node: '> 0.8'} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -4817,6 +5459,9 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.isfinite@3.3.2: resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==} @@ -4838,6 +5483,9 @@ packages: lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -4884,6 +5532,9 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} @@ -4977,6 +5628,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -5487,6 +6142,10 @@ packages: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5565,6 +6224,9 @@ packages: resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} engines: {node: '>=0.12'} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -5617,6 +6279,19 @@ packages: reftools@1.1.9: resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regexp-ast-analysis@0.7.1: resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -5629,10 +6304,21 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} hasBin: true + regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} + hasBin: true + relative-time-format@1.1.6: resolution: {integrity: sha512-aCv3juQw4hT1/P/OrVltKWLlp15eW1GRcwP1XdxHrPdZE9MtgqFpegjnTjLhi2m2WI9MT/hQQtE+tjEWG1hgkQ==} @@ -5730,6 +6416,11 @@ packages: engines: {node: 14 >=14.20 || 16 >=16.20 || >=18} hasBin: true + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} + engines: {node: '>=10.0.0'} + hasBin: true + rollup@4.18.1: resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5816,6 +6507,9 @@ packages: resolution: {integrity: sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==} engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-index@1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} @@ -5936,6 +6630,9 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + smtp-address-parser@1.1.0: resolution: {integrity: sha512-Gz11jbNU0plrReU9Sj7fmshSBxxJ9ShdD2q4ktHIHo/rpTH6lFyQoYHYKINPJtPe8aHFnsbtW46Ls0tCCBsIZg==} engines: {node: '>=0.10'} @@ -5966,6 +6663,21 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -6047,6 +6759,10 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + string.prototype.padend@3.1.6: resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} engines: {node: '>= 0.4'} @@ -6068,6 +6784,10 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -6080,6 +6800,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -6194,6 +6918,19 @@ packages: resolution: {integrity: sha512-XQs0S8fuAkQWuqhDeCdMlJXDX80D7EOVLDPVFkna9yQfzS+PHKgfxcei0jf6/+QAWcjqrnC8uM3fSAnrQl+XYg==} engines: {node: '>=18'} + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -6230,6 +6967,10 @@ packages: tinyexec@0.3.0: resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + tinypool@0.8.4: resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} engines: {node: '>=14.0.0'} @@ -6293,6 +7034,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + tr46@5.0.0: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} @@ -6378,6 +7122,10 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -6453,10 +7201,26 @@ packages: resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} engines: {node: '>=18.17'} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + unicode-emoji-modifier-base@1.0.0: resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -6464,6 +7228,10 @@ packages: unimport@3.7.2: resolution: {integrity: sha512-91mxcZTadgXyj3lFWmrGT8GyoRHWuE5fqPOjg5RVtF6vj+OfM5G6WCzXjuYtSgELE5ggB34RY4oiCSEP8I3AHw==} + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} @@ -6528,12 +7296,22 @@ packages: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + update-browserslist-db@1.1.0: resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6592,6 +7370,18 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true + vite-plugin-pwa@0.21.0: + resolution: {integrity: sha512-gnDE5sN2hdxA4vTl0pe6PCTPXqChk175jH8dZVVTBjFhWarZZoXaAdoTIKCIa8Zbx94sC0CnCOyERBWpxvry+g==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@vite-pwa/assets-generator': ^0.2.6 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + workbox-build: ^7.3.0 + workbox-window: ^7.3.0 + peerDependenciesMeta: + '@vite-pwa/assets-generator': + optional: true + vite@5.3.3: resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6730,6 +7520,9 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -6756,6 +7549,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -6784,6 +7580,55 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + workbox-background-sync@7.3.0: + resolution: {integrity: sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==} + + workbox-broadcast-update@7.3.0: + resolution: {integrity: sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA==} + + workbox-build@7.3.0: + resolution: {integrity: sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ==} + engines: {node: '>=16.0.0'} + + workbox-cacheable-response@7.3.0: + resolution: {integrity: sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA==} + + workbox-core@7.3.0: + resolution: {integrity: sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==} + + workbox-expiration@7.3.0: + resolution: {integrity: sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ==} + + workbox-google-analytics@7.3.0: + resolution: {integrity: sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg==} + + workbox-navigation-preload@7.3.0: + resolution: {integrity: sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg==} + + workbox-precaching@7.3.0: + resolution: {integrity: sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw==} + + workbox-range-requests@7.3.0: + resolution: {integrity: sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ==} + + workbox-recipes@7.3.0: + resolution: {integrity: sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg==} + + workbox-routing@7.3.0: + resolution: {integrity: sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A==} + + workbox-strategies@7.3.0: + resolution: {integrity: sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg==} + + workbox-streams@7.3.0: + resolution: {integrity: sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw==} + + workbox-sw@7.3.0: + resolution: {integrity: sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA==} + + workbox-window@7.3.0: + resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -6933,7 +7778,7 @@ snapshots: ts-deepmerge: 6.2.1 zod: 3.23.8 - '@antfu/eslint-config@2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3))': + '@antfu/eslint-config@2.27.3(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(@vue/compiler-sfc@3.5.6)(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0))': dependencies: '@antfu/install-pkg': 0.4.1 '@clack/prompts': 0.7.0 @@ -6941,7 +7786,7 @@ snapshots: '@stylistic/eslint-plugin': 2.6.4(eslint@9.7.0)(typescript@5.5.3) '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.7.0)(typescript@5.5.3))(eslint@9.7.0)(typescript@5.5.3) '@typescript-eslint/parser': 8.3.0(eslint@9.7.0)(typescript@5.5.3) - '@vitest/eslint-plugin': 1.0.5(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)) + '@vitest/eslint-plugin': 1.0.5(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)) eslint: 9.7.0 eslint-config-flat-gitignore: 0.1.8 eslint-flat-config-utils: 0.3.1 @@ -6986,6 +7831,13 @@ snapshots: '@antfu/utils@0.7.10': {} + '@apideck/better-ajv-errors@0.3.6(ajv@8.16.0)': + dependencies: + ajv: 8.16.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + '@aws-crypto/sha256-browser@5.2.0': dependencies: '@aws-crypto/sha256-js': 5.2.0 @@ -7399,8 +8251,16 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.0 + '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.26.2': {} + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 @@ -7414,7 +8274,7 @@ snapshots: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7435,10 +8295,29 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.26.2': + 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 + '@babel/helper-annotate-as-pure@7.24.7': dependencies: '@babel/types': 7.24.8 + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.0 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-compilation-targets@7.25.2': dependencies: '@babel/compat-data': 7.25.4 @@ -7447,6 +8326,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -7462,6 +8349,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.6(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.24.7': dependencies: '@babel/types': 7.24.8 @@ -7482,6 +8400,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.25.6 @@ -7489,6 +8414,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.24.8(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -7510,12 +8442,36 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.24.7': dependencies: '@babel/types': 7.24.8 + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.0 + '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.9': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -7525,6 +8481,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.6 @@ -7532,6 +8497,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-simple-access@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.24.8 @@ -7539,16 +8511,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-split-export-declaration@7.24.7': dependencies: '@babel/types': 7.24.8 '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helpers@7.25.6': dependencies: '@babel/template': 7.25.0 @@ -7569,34 +8562,498 @@ snapshots: dependencies: '@babel/types': 7.25.6 + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + '@babel/preset-env@7.26.0(@babel/core@7.25.2)': dependencies: + '@babel/compat-data': 7.26.2 '@babel/core': 7.25.2 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.25.2) + core-js-compat: 3.38.1 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.25.2)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.0 + esutils: 2.0.3 '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': dependencies: @@ -7609,6 +9066,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 @@ -7621,6 +9082,12 @@ snapshots: '@babel/parser': 7.25.6 '@babel/types': 7.25.6 + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@babel/traverse@7.24.8': dependencies: '@babel/code-frame': 7.24.7 @@ -7631,7 +9098,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.8 '@babel/types': 7.24.8 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7643,7 +9110,19 @@ snapshots: '@babel/parser': 7.25.6 '@babel/template': 7.25.0 '@babel/types': 7.25.6 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.6(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7660,6 +9139,11 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@clack/core@0.3.4': @@ -8014,7 +9498,7 @@ snapshots: '@eslint/config-array@0.17.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8022,7 +9506,7 @@ snapshots: '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) espree: 10.1.0 globals: 14.0.0 ignore: 5.3.1 @@ -8187,7 +9671,7 @@ snapshots: '@antfu/install-pkg': 0.4.1 '@antfu/utils': 0.7.10 '@iconify/types': 2.0.0 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) kolorist: 1.8.0 local-pkg: 0.5.0 mlly: 1.7.1 @@ -8228,6 +9712,11 @@ snapshots: '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': @@ -8339,13 +9828,53 @@ snapshots: dependencies: '@prisma/debug': 5.19.1 - '@rollup/pluginutils@5.1.0(rollup@4.18.1)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(rollup@2.79.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + magic-string: 0.25.9 + rollup: 2.79.2 + + '@rollup/plugin-terser@0.4.4(rollup@2.79.2)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.36.0 + optionalDependencies: + rollup: 2.79.2 + + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.2 + + '@rollup/pluginutils@5.1.0(rollup@2.79.2)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.1 + rollup: 2.79.2 '@rollup/rollup-android-arm-eabi@4.18.1': optional: true @@ -8710,6 +10239,13 @@ snapshots: - supports-color - typescript + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + '@swc/helpers@0.5.11': dependencies: tslib: 2.6.3 @@ -8752,6 +10288,8 @@ snapshots: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 + '@types/estree@0.0.39': {} + '@types/estree@1.0.5': {} '@types/js-yaml@4.0.9': {} @@ -8785,6 +10323,8 @@ snapshots: '@types/tough-cookie': 4.0.5 form-data: 2.5.1 + '@types/resolve@1.20.2': {} + '@types/sinonjs__fake-timers@8.1.1': optional: true @@ -8795,6 +10335,8 @@ snapshots: '@types/tough-cookie@4.0.5': {} + '@types/trusted-types@2.0.7': {} + '@types/unist@2.0.11': {} '@types/ws@8.5.10': @@ -8861,7 +10403,7 @@ snapshots: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.3) '@typescript-eslint/visitor-keys': 8.3.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) eslint: 9.7.0 optionalDependencies: typescript: 5.5.3 @@ -8882,7 +10424,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.3) '@typescript-eslint/utils': 7.16.0(eslint@9.7.0)(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) eslint: 9.7.0 ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: @@ -8894,7 +10436,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.3) '@typescript-eslint/utils': 8.3.0(eslint@9.7.0)(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) ts-api-utils: 1.3.0(typescript@5.5.3) optionalDependencies: typescript: 5.5.3 @@ -8912,7 +10454,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.16.0 '@typescript-eslint/visitor-keys': 7.16.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -8927,7 +10469,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.3.0 '@typescript-eslint/visitor-keys': 8.3.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -8970,21 +10512,21 @@ snapshots: '@typescript-eslint/types': 8.3.0 eslint-visitor-keys: 3.4.3 - '@unocss/astro@0.61.9(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2))': + '@unocss/astro@0.61.9(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))': dependencies: '@unocss/core': 0.61.9 '@unocss/reset': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2)) + '@unocss/vite': 0.61.9(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) optionalDependencies: - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.61.9(rollup@4.18.1)': + '@unocss/cli@0.61.9(rollup@2.79.2)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/preset-uno': 0.61.9 @@ -9113,10 +10655,10 @@ snapshots: dependencies: '@unocss/core': 0.61.9 - '@unocss/vite@0.61.9(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2))': + '@unocss/vite@0.61.9(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) '@unocss/config': 0.61.9 '@unocss/core': 0.61.9 '@unocss/inspector': 0.61.9 @@ -9125,17 +10667,17 @@ snapshots: chokidar: 3.6.0 fast-glob: 3.3.2 magic-string: 0.30.11 - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - rollup - supports-color - '@vitejs/plugin-vue@5.0.5(vite@5.3.3(@types/node@22.8.2))(vue@3.5.6(typescript@5.5.3))': + '@vitejs/plugin-vue@5.0.5(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))(vue@3.5.6(typescript@5.5.3))': dependencies: - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) vue: 3.5.6(typescript@5.5.3) - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3))': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -9150,15 +10692,15 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + vitest: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3))': + '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 @@ -9168,17 +10710,17 @@ snapshots: std-env: 3.7.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3) + vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.0.5(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3))': + '@vitest/eslint-plugin@1.0.5(@typescript-eslint/utils@8.3.0(eslint@9.7.0)(typescript@5.5.3))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0))': dependencies: eslint: 9.7.0 optionalDependencies: '@typescript-eslint/utils': 8.3.0(eslint@9.7.0)(typescript@5.5.3) typescript: 5.5.3 - vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3) + vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) '@vitest/expect@1.6.0': dependencies: @@ -9193,13 +10735,13 @@ snapshots: chai: 5.1.1 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.8.2))': + '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))': dependencies: '@vitest/spy': 2.1.1 estree-walker: 3.0.3 magic-string: 0.30.11 optionalDependencies: - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) '@vitest/pretty-format@2.1.1': dependencies: @@ -9389,7 +10931,7 @@ snapshots: agent-base@7.1.1: dependencies: - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9522,13 +11064,11 @@ snapshots: dependencies: lodash: 4.17.21 - async@3.2.5: - optional: true + async@3.2.5: {} asynckit@0.4.0: {} - at-least-node@1.0.0: - optional: true + at-least-node@1.0.0: {} atomic-sleep@1.0.0: {} @@ -9572,6 +11112,30 @@ snapshots: transitivePeerDependencies: - debug + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.25.2): + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + core-js-compat: 3.38.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -9679,6 +11243,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001680 + electron-to-chromium: 1.5.60 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + bs-recipes@1.3.4: {} buffer-crc32@0.2.13: @@ -9687,6 +11258,8 @@ snapshots: buffer-equal-constant-time@1.0.1: optional: true + buffer-from@1.1.2: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -9730,6 +11303,8 @@ snapshots: caniuse-lite@1.0.30001653: {} + caniuse-lite@1.0.30001680: {} + caseless@0.12.0: {} chai@4.4.1: @@ -9884,8 +11459,7 @@ snapshots: comment-parser@1.4.1: {} - common-tags@1.8.2: - optional: true + common-tags@1.8.2: {} compare-func@2.0.0: dependencies: @@ -9988,6 +11562,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crypto-random-string@2.0.0: {} + css-functions-list@3.2.2: {} css-tree@2.3.1: @@ -10003,11 +11579,11 @@ snapshots: csstype@3.1.3: {} - cypress-vite@1.5.0(vite@5.3.3(@types/node@22.8.2)): + cypress-vite@1.5.0(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)): dependencies: chokidar: 3.6.0 debug: 4.3.5(supports-color@5.5.0) - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - supports-color optional: true @@ -10123,9 +11699,11 @@ snapshots: supports-color: 8.1.1 optional: true - debug@4.3.6: + debug@4.3.6(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 decimal.js@10.4.3: {} @@ -10139,6 +11717,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge@4.3.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -10230,8 +11810,14 @@ snapshots: ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 + electron-to-chromium@1.5.13: {} + electron-to-chromium@1.5.60: {} + elliptic@6.5.5: dependencies: bn.js: 4.12.0 @@ -10260,7 +11846,7 @@ snapshots: engine.io-client@6.5.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) engine.io-parser: 5.2.3 ws: 8.17.1 xmlhttprequest-ssl: 2.0.0 @@ -10280,7 +11866,7 @@ snapshots: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) engine.io-parser: 5.2.3 ws: 8.17.1 transitivePeerDependencies: @@ -10437,6 +12023,8 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -10498,7 +12086,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.3) '@typescript-eslint/utils': 8.3.0(eslint@9.7.0)(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) doctrine: 3.0.0 eslint: 9.7.0 eslint-import-resolver-node: 0.3.9 @@ -10517,7 +12105,7 @@ snapshots: '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint: 9.7.0 espree: 10.1.0 @@ -10587,7 +12175,7 @@ snapshots: eslint-plugin-toml@0.11.1(eslint@9.7.0): dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) eslint: 9.7.0 eslint-compat-utils: 0.5.1(eslint@9.7.0) lodash: 4.17.21 @@ -10637,7 +12225,7 @@ snapshots: eslint-plugin-yml@1.14.0(eslint@9.7.0): dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) eslint: 9.7.0 eslint-compat-utils: 0.5.1(eslint@9.7.0) lodash: 4.17.21 @@ -10678,7 +12266,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.0.2 eslint-visitor-keys: 4.0.0 @@ -10726,6 +12314,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@1.0.1: {} + estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -10783,7 +12373,7 @@ snapshots: extract-zip@2.0.1(supports-color@8.1.1): dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -10907,6 +12497,10 @@ snapshots: pend: 1.2.0 optional: true + fdir@6.4.2(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -10920,6 +12514,10 @@ snapshots: dependencies: flat-cache: 5.0.0 + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -11032,7 +12630,6 @@ snapshots: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - optional: true fs.realpath@1.0.0: {} @@ -11066,6 +12663,8 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-own-enumerable-property-symbols@3.0.2: {} + get-stream@5.2.0: dependencies: pump: 3.0.0 @@ -11279,7 +12878,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -11309,7 +12908,7 @@ snapshots: https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -11328,6 +12927,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb@7.1.1: {} + ieee754@1.2.1: {} ignore-by-default@1.0.1: {} @@ -11348,7 +12949,7 @@ snapshots: importx@0.4.4: dependencies: bundle-require: 5.0.0(esbuild@0.21.5) - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) esbuild: 0.21.5 jiti: 2.0.0-beta.3 jiti-v1: jiti@1.21.6 @@ -11471,6 +13072,8 @@ snapshots: is-path-inside: 3.0.3 optional: true + is-module@1.0.0: {} + is-negative-zero@2.0.3: {} is-number-like@1.0.8: @@ -11483,6 +13086,8 @@ snapshots: is-number@7.0.0: {} + is-obj@1.0.1: {} + is-obj@2.0.0: {} is-path-inside@3.0.3: {} @@ -11496,14 +13101,15 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-regexp@1.0.0: {} + is-retry-allowed@2.2.0: {} is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - is-stream@2.0.1: - optional: true + is-stream@2.0.1: {} is-stream@3.0.0: {} @@ -11573,6 +13179,13 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + javascript-time-ago@2.5.11: dependencies: relative-time-format: 1.1.6 @@ -11653,7 +13266,7 @@ snapshots: json-schema-resolver@2.0.0: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) rfdc: 1.4.1 uri-js: 4.4.1 transitivePeerDependencies: @@ -11687,12 +13300,13 @@ snapshots: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - optional: true jsonparse@1.3.1: {} jsonpath-plus@8.1.0: {} + jsonpointer@5.0.1: {} + jsprim@1.4.2: dependencies: assert-plus: 1.0.0 @@ -11762,6 +13376,8 @@ snapshots: lazy-ass@1.6.0: optional: true + leven@3.1.0: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -11858,6 +13474,8 @@ snapshots: lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} + lodash.isfinite@3.3.2: {} lodash.isplainobject@4.0.6: {} @@ -11873,6 +13491,8 @@ snapshots: lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} lodash.truncate@4.4.2: {} @@ -11926,6 +13546,10 @@ snapshots: yallist: 4.0.0 optional: true + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + magic-string@0.30.10: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -11972,7 +13596,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -12011,6 +13635,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -12518,8 +14146,9 @@ snapshots: prettier@3.3.2: {} - pretty-bytes@5.6.0: - optional: true + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} pretty-format@29.7.0: dependencies: @@ -12594,6 +14223,10 @@ snapshots: discontinuous-range: 1.0.0 ret: 0.1.15 + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + range-parser@1.2.1: {} rate-limiter-flexible@4.0.1: {} @@ -12659,6 +14292,18 @@ snapshots: reftools@1.1.9: {} + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.26.0 + regexp-ast-analysis@0.7.1: dependencies: '@eslint-community/regexpp': 4.11.0 @@ -12673,10 +14318,25 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 + regexpu-core@6.1.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.2 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + regjsparser@0.10.0: dependencies: jsesc: 0.5.0 + regjsparser@0.11.2: + dependencies: + jsesc: 3.0.2 + relative-time-format@1.1.6: {} request-compose@2.1.6: {} @@ -12782,6 +14442,10 @@ snapshots: dependencies: glob: 10.4.5 + rollup@2.79.2: + optionalDependencies: + fsevents: 2.3.3 + rollup@4.18.1: dependencies: '@types/estree': 1.0.5 @@ -12890,6 +14554,10 @@ snapshots: transitivePeerDependencies: - supports-color + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + serve-index@1.9.1: dependencies: accepts: 1.3.8 @@ -13033,13 +14701,15 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + smob@1.5.0: {} + smtp-address-parser@1.1.0: dependencies: nearley: 2.20.1 socket.io-adapter@2.5.5: dependencies: - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -13049,7 +14719,7 @@ snapshots: socket.io-client@4.7.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) engine.io-client: 6.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -13060,7 +14730,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -13069,7 +14739,7 @@ snapshots: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) engine.io: 6.5.5 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 @@ -13086,6 +14756,19 @@ snapshots: source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -13170,6 +14853,21 @@ snapshots: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + 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 + string.prototype.padend@3.1.6: dependencies: call-bind: 1.0.7 @@ -13204,6 +14902,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -13214,6 +14918,8 @@ snapshots: strip-bom@3.0.0: {} + strip-comments@2.0.1: {} + strip-final-newline@2.0.0: optional: true @@ -13387,6 +15093,22 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terser@5.36.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -13420,6 +15142,11 @@ snapshots: tinyexec@0.3.0: {} + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.2(picomatch@4.0.2) + picomatch: 4.0.2 + tinypool@0.8.4: {} tinypool@1.0.1: {} @@ -13465,6 +15192,10 @@ snapshots: tr46@0.0.3: {} + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + tr46@5.0.0: dependencies: punycode: 2.3.1 @@ -13538,6 +15269,8 @@ snapshots: type-detect@4.0.8: {} + type-fest@0.16.0: {} + type-fest@0.20.2: {} type-fest@0.21.3: @@ -13617,13 +15350,24 @@ snapshots: undici@6.19.2: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-emoji-modifier-base@1.0.0: {} + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.1.0: {} - unimport@3.7.2(rollup@4.18.1): + unimport@3.7.2(rollup@2.79.2): dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) acorn: 8.12.1 escape-string-regexp: 5.0.0 estree-walker: 3.0.3 @@ -13639,6 +15383,10 @@ snapshots: transitivePeerDependencies: - rollup + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + unist-util-stringify-position@2.0.3: dependencies: '@types/unist': 2.0.11 @@ -13647,13 +15395,12 @@ snapshots: universalify@0.2.0: {} - universalify@2.0.1: - optional: true + universalify@2.0.1: {} - unocss@0.61.9(postcss@8.4.39)(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2)): + unocss@0.61.9(postcss@8.4.39)(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)): dependencies: - '@unocss/astro': 0.61.9(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2)) - '@unocss/cli': 0.61.9(rollup@4.18.1) + '@unocss/astro': 0.61.9(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) + '@unocss/cli': 0.61.9(rollup@2.79.2) '@unocss/core': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9 '@unocss/postcss': 0.61.9(postcss@8.4.39) @@ -13671,9 +15418,9 @@ snapshots: '@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-directives': 0.61.9 '@unocss/transformer-variant-group': 0.61.9 - '@unocss/vite': 0.61.9(rollup@4.18.1)(vite@5.3.3(@types/node@22.8.2)) + '@unocss/vite': 0.61.9(rollup@2.79.2)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) optionalDependencies: - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - postcss - rollup @@ -13681,23 +15428,23 @@ snapshots: unpipe@1.0.0: {} - unplugin-auto-import@0.17.8(rollup@4.18.1): + unplugin-auto-import@0.17.8(rollup@2.79.2): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) fast-glob: 3.3.2 local-pkg: 0.5.0 magic-string: 0.30.10 minimatch: 9.0.5 - unimport: 3.7.2(rollup@4.18.1) + unimport: 3.7.2(rollup@2.79.2) unplugin: 1.11.0 transitivePeerDependencies: - rollup - unplugin-vue-components@0.27.2(@babel/parser@7.25.6)(rollup@4.18.1)(vue@3.5.6(typescript@5.5.3)): + unplugin-vue-components@0.27.2(@babel/parser@7.26.2)(rollup@2.79.2)(vue@3.5.6(typescript@5.5.3)): dependencies: '@antfu/utils': 0.7.10 - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.0(rollup@2.79.2) chokidar: 3.6.0 debug: 4.3.5(supports-color@5.5.0) fast-glob: 3.3.2 @@ -13708,7 +15455,7 @@ snapshots: unplugin: 1.11.0 vue: 3.5.6(typescript@5.5.3) optionalDependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.26.2 transitivePeerDependencies: - rollup - supports-color @@ -13723,12 +15470,20 @@ snapshots: untildify@4.0.0: optional: true + upath@1.2.0: {} + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.0 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -13767,13 +15522,13 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite-node@1.6.0(@types/node@22.8.2): + vite-node@1.6.0(@types/node@22.8.2)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.5(supports-color@5.5.0) pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -13784,12 +15539,12 @@ snapshots: - supports-color - terser - vite-node@2.1.1(@types/node@22.8.2): + vite-node@2.1.1(@types/node@22.8.2)(terser@5.36.0): dependencies: cac: 6.7.14 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) pathe: 1.1.2 - vite: 5.3.3(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -13800,7 +15555,18 @@ snapshots: - supports-color - terser - vite@5.3.3(@types/node@22.8.2): + vite-plugin-pwa@0.21.0(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0): + dependencies: + debug: 4.3.6(supports-color@8.1.1) + pretty-bytes: 6.1.1 + tinyglobby: 0.2.10 + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) + workbox-build: 7.3.0 + workbox-window: 7.3.0 + transitivePeerDependencies: + - supports-color + + vite@5.3.3(@types/node@22.8.2)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.39 @@ -13808,20 +15574,21 @@ snapshots: optionalDependencies: '@types/node': 22.8.2 fsevents: 2.3.3 + terser: 5.36.0 - vitest-mock-extended@1.3.1(typescript@5.5.3)(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)): + vitest-mock-extended@1.3.1(typescript@5.5.3)(vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)): dependencies: ts-essentials: 9.4.2(typescript@5.5.3) typescript: 5.5.3 - vitest: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3) + vitest: 1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) - vitest-mock-extended@1.3.1(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)): + vitest-mock-extended@1.3.1(typescript@5.5.3)(vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0)): dependencies: ts-essentials: 9.4.2(typescript@5.5.3) typescript: 5.5.3 - vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3) + vitest: 2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0) - vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3): + vitest@1.6.0(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -13840,8 +15607,8 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.3.3(@types/node@22.8.2) - vite-node: 1.6.0(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) + vite-node: 1.6.0(@types/node@22.8.2)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.2 @@ -13855,17 +15622,17 @@ snapshots: - supports-color - terser - vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3): + vitest@2.1.1(@types/node@22.8.2)(jsdom@24.1.3)(terser@5.36.0): dependencies: '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.8.2)) + '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.3.3(@types/node@22.8.2)(terser@5.36.0)) '@vitest/pretty-format': 2.1.1 '@vitest/runner': 2.1.1 '@vitest/snapshot': 2.1.1 '@vitest/spy': 2.1.1 '@vitest/utils': 2.1.1 chai: 5.1.1 - debug: 4.3.6 + debug: 4.3.6(supports-color@8.1.1) magic-string: 0.30.11 pathe: 1.1.2 std-env: 3.7.0 @@ -13873,8 +15640,8 @@ snapshots: tinyexec: 0.3.0 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.3.3(@types/node@22.8.2) - vite-node: 2.1.1(@types/node@22.8.2) + vite: 5.3.3(@types/node@22.8.2)(terser@5.36.0) + vite-node: 2.1.1(@types/node@22.8.2)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.8.2 @@ -13946,6 +15713,8 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: {} + webidl-conversions@7.0.0: {} webpack-sources@3.2.3: {} @@ -13968,6 +15737,12 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -14001,6 +15776,119 @@ snapshots: word-wrap@1.2.5: {} + workbox-background-sync@7.3.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.3.0 + + workbox-broadcast-update@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-build@7.3.0: + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.16.0) + '@babel/core': 7.25.2 + '@babel/preset-env': 7.26.0(@babel/core@7.25.2) + '@babel/runtime': 7.26.0 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 15.3.0(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.2) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.16.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.2 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.3.0 + workbox-broadcast-update: 7.3.0 + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-google-analytics: 7.3.0 + workbox-navigation-preload: 7.3.0 + workbox-precaching: 7.3.0 + workbox-range-requests: 7.3.0 + workbox-recipes: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + workbox-streams: 7.3.0 + workbox-sw: 7.3.0 + workbox-window: 7.3.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-core@7.3.0: {} + + workbox-expiration@7.3.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.3.0 + + workbox-google-analytics@7.3.0: + dependencies: + workbox-background-sync: 7.3.0 + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + + workbox-navigation-preload@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-precaching@7.3.0: + dependencies: + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + + workbox-range-requests@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-recipes@7.3.0: + dependencies: + workbox-cacheable-response: 7.3.0 + workbox-core: 7.3.0 + workbox-expiration: 7.3.0 + workbox-precaching: 7.3.0 + workbox-routing: 7.3.0 + workbox-strategies: 7.3.0 + + workbox-routing@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-strategies@7.3.0: + dependencies: + workbox-core: 7.3.0 + + workbox-streams@7.3.0: + dependencies: + workbox-core: 7.3.0 + workbox-routing: 7.3.0 + + workbox-sw@7.3.0: {} + + workbox-window@7.3.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 7.3.0 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -14077,7 +15965,7 @@ snapshots: yargs@17.1.1: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3