diff --git a/.env.example b/.env.example index 6957df0..d1cfe3a 100644 --- a/.env.example +++ b/.env.example @@ -17,4 +17,6 @@ REDIS_PORT=6379 REDIS_PASSWORD= SMTP_HOST= SMTP_PORT= -RESEND_API_KEY= \ No newline at end of file +RESEND_API_KEY= +OPENSEARCH_HOST=http://localhost +OPENSEARCH_CORE=tethys-records \ No newline at end of file diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 45aa628..732fb75 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v3 - run: echo "The ${{ github.repository }} repository has been cloned to the runner." - run: echo "The workflow is now ready to test your code on the runner." - - name: List files in the repository: + - name: List files in the repository run: | ls ${{ github.workspace }} - run: echo "This job's status is ${{ job.status }}." diff --git a/.gitea/workflows/checkReferenceType.yaml b/.gitea/workflows/checkReferenceType.yaml new file mode 100644 index 0000000..ab88380 --- /dev/null +++ b/.gitea/workflows/checkReferenceType.yaml @@ -0,0 +1,78 @@ +# This is a Gitea Actions workflow configuration file for running CI tests on the `feat/checkReferenceType` branch. +# The workflow is named "CI" and runs on the latest Ubuntu environment using a Node.js 20 Docker container. +# It sets up a PostgreSQL service with specified environment variables and health checks. +# The workflow includes the following steps: +# 1. Checkout the repository using the actions/checkout@v3 action. +# 2. Install Node.js dependencies using `npm ci`. +# 3. Create a `.env.test` file by copying from `.env.example`. +# 4. Set up environment variables in the `.env.test` file, including database connection details and other app-specific settings. +# 5. Run functional tests using the `node ace test functional --groups "ReferenceValidation"` command. +name: CI +run-name: Running tests for checkReferenceType branch +on: + push: + branches: + - feat/checkReferenceType + +jobs: + container-job: + runs-on: ubuntu-latest + # Docker Hub image that `container-job` executes in + container: node:20-bullseye + + services: + # Label used to access the service container + postgres: + image: postgres:latest + env: + POSTGRES_USER: alice + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB: tethys_dev + # ports: + # - 5432:5432 + options: | + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # - name: Set up Node.js + # uses: actions/setup-node@v2 + # with: + # node-version: '20' + + - name: Install dependencies + run: npm ci + + - name: Create .env.test file + run: cp .env.example .env.test + + - name: Set up environment variables + run: | + echo "DB_CONNECTION=pg" >> .env.test + echo "PG_HOST=postgres" >> .env.test + echo "PG_PORT=5432" >> .env.test + echo "PG_USER=alice" >> .env.test + echo "PG_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env.test + echo "PG_DB_NAME=tethys_dev" >> .env.test + echo "NODE_ENV=test" >> .env.test + echo "ASSETS_DRIVER=fake" >> .env.test + echo "SESSION_DRIVER=memory" >> .env.test + echo "HASH_DRIVER=bcrypt" >> .env.test + echo "HOST=127.0.0.1" >> .env.test + echo "PORT=3333" >> .env.test + echo "APP_NAME=TethysCloud" >> .env.test + echo "APP_URL=http://${HOST}:${PORT}" >> .env.test + echo "CACHE_VIEWS=false" >> .env.test + echo "APP_KEY=pfi5N2ACN4tMJ5d8d8BPHfh3FEuvleej" >> .env.test + echo "DRIVE_DISK=local" >> .env.test + echo "OAI_LIST_SIZE=200" >> .env.test + echo "OPENSEARCH_HOST=${{ secrets.OPENSEARCH_HOST }}" >> .env.test + echo "OPENSEARCH_CORE=tethys-records" >> .env.test + + - name: Run tests + run: node ace test functional --groups "ReferenceValidation" diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 35a3f43..916f839 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -4,7 +4,13 @@ name: CI Pipeline run-name: ${{ github.actor }} is running CI pipeline # trigger build when pushing, or when creating a pull request -on: [push, pull_request] +on: + push: + branches: + - master + pull_request: + branches: + - master jobs: # Label of the container job @@ -12,7 +18,7 @@ jobs: # run build on latest ubuntu runs-on: ubuntu-latest - container: node:18-bullseye + container: node:20-bullseye services: mydb: @@ -70,6 +76,7 @@ jobs: && echo "CACHE_VIEWS=false" >> .env.test && echo "APP_KEY=pfi5N2ACN4tMJ5d8d8BPHfh3FEuvleej" >> .env.test && echo "DRIVE_DISK=local" >> .env.test + && echo "OAI_LIST_SIZE=200" >> .env.test # finally run the tests # - run: npm test @@ -95,3 +102,4 @@ jobs: # uses: coverallsapp/github-action@master # with: # github-token: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.gitignore b/.gitignore index f0bd219..6d6d265 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ coverage tmp docker-compose.yml .env.test +public/assets diff --git a/Dockerfile b/Dockerfile index 0e42158..9f88544 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,57 +1,63 @@ ################## First Stage - Creating base ######################### # Created a variable to hold our node base image -ARG NODE_IMAGE=node:20-bookworm-slim +ARG NODE_IMAGE=node:22-trixie-slim FROM $NODE_IMAGE AS base + # Install dumb-init and ClamAV, and perform ClamAV database update -RUN apt update \ - && apt-get install -y dumb-init clamav clamav-daemon nano \ +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + dumb-init \ + clamav \ + clamav-daemon \ + clamdscan \ + ca-certificates \ && rm -rf /var/lib/apt/lists/* \ # Creating folders and changing ownerships - && mkdir -p /home/node/app && chown node:node /home/node/app \ - && mkdir -p /var/lib/clamav \ + && mkdir -p /home/node/app \ + && mkdir -p /var/lib/clamav \ && mkdir /usr/local/share/clamav \ - && chown -R node:clamav /var/lib/clamav /usr/local/share/clamav /etc/clamav \ - # permissions && mkdir /var/run/clamav \ - && chown node:clamav /var/run/clamav \ - && chmod 750 /var/run/clamav -# ----------------------------------------------- -# --- ClamAV & FeshClam ------------------------- -# ----------------------------------------------- -# RUN \ -# chmod 644 /etc/clamav/freshclam.conf && \ -# freshclam && \ -# mkdir /var/run/clamav && \ - # chown -R clamav:root /var/run/clamav + && mkdir -p /var/log/clamav \ + && mkdir -p /tmp/clamav-logs \ + + # Set ownership and permissions + && chown node:node /home/node/app \ + # && chown -R node:clamav /var/lib/clamav /usr/local/share/clamav /etc/clamav /var/run/clamav \ + && chown -R node:clamav /var/lib/clamav /usr/local/share/clamav /etc/clamav /var/run/clamav /var/log/clamav \ + && chown -R node:clamav /etc/clamav \ + && chmod 755 /tmp/clamav-logs \ + && chmod 750 /var/run/clamav \ + && chmod 755 /var/lib/clamav \ + && chmod 755 /var/log/clamav \ + # Add node user to clamav group and allow sudo for clamav commands + && usermod -a -G clamav node + # && chmod 666 /var/run/clamav/clamd.socket + # Make directories group-writable so node (as member of clamav group) can access them + # && chmod 750 /var/run/clamav /var/lib/clamav /var/log/clamav /tmp/clamav-logs -# # initial update of av databases -# RUN freshclam -# Configure Clam AV... +# Configure ClamAV - copy config files before switching user +# COPY --chown=node:clamav ./*.conf /etc/clamav/ COPY --chown=node:clamav ./*.conf /etc/clamav/ -# # permissions -# RUN mkdir /var/run/clamav && \ -# chown node:clamav /var/run/clamav && \ -# chmod 750 /var/run/clamav + + # Setting the working directory WORKDIR /home/node/app # Changing the current active user to "node" + +# Download initial ClamAV database as root before switching users USER node +RUN freshclam --quiet || echo "Initial database download failed - will retry at runtime" -# initial update of av databases -RUN freshclam - -# VOLUME /var/lib/clamav +# Copy entrypoint script COPY --chown=node:clamav docker-entrypoint.sh /home/node/app/docker-entrypoint.sh RUN chmod +x /home/node/app/docker-entrypoint.sh ENV TZ="Europe/Vienna" - - ################## Second Stage - Installing dependencies ########## # In this stage, we will start installing dependencies FROM base AS dependencies @@ -70,7 +76,6 @@ ENV NODE_ENV=production # We run "node ace build" to build the app (dist folder) for production RUN node ace build --ignore-ts-errors # RUN node ace build --production -# RUN node ace build --ignore-ts-errors ################## Final Stage - Production ######################### @@ -88,6 +93,7 @@ RUN npm ci --omit=dev # Copy files to the working directory from the build folder the user COPY --chown=node:node --from=build /home/node/app/build . # Expose port +# EXPOSE 3310 EXPOSE 3333 ENTRYPOINT ["/home/node/app/docker-entrypoint.sh"] # Run the command to start the server using "dumb-init" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..23bb390 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ + +MIT License + +Copyright (c) 2025 Tethys Research Repository + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE \ No newline at end of file diff --git a/ace.js b/ace.js index a313518..98fb5cb 100644 --- a/ace.js +++ b/ace.js @@ -15,10 +15,11 @@ /** * Register hook to process TypeScript files using ts-node */ -import { register } from 'node:module' -register('ts-node/esm', import.meta.url) +// import { register } from 'node:module'; +// register('ts-node/esm', import.meta.url); +import 'ts-node-maintained/register/esm'; /** * Import ace console entrypoint */ -await import('./bin/console.js') +await import('./bin/console.js'); diff --git a/adonisrc.ts b/adonisrc.ts index 0c424f9..824d4c8 100644 --- a/adonisrc.ts +++ b/adonisrc.ts @@ -1,7 +1,7 @@ -import { defineConfig } from '@adonisjs/core/app' +import { defineConfig } from '@adonisjs/core/app'; export default defineConfig({ - /* + /* |-------------------------------------------------------------------------- | Commands |-------------------------------------------------------------------------- @@ -10,12 +10,12 @@ export default defineConfig({ | will be scanned automatically from the "./commands" directory. */ - commands: [ - () => import('@adonisjs/core/commands'), - () => import('@adonisjs/lucid/commands'), - () => import('@adonisjs/mail/commands') - ], - /* + commands: [ + () => import('@adonisjs/core/commands'), + () => import('@adonisjs/lucid/commands'), + () => import('@adonisjs/mail/commands') + ], + /* |-------------------------------------------------------------------------- | Preloads |-------------------------------------------------------------------------- @@ -23,19 +23,23 @@ export default defineConfig({ | List of modules to import before starting the application. | */ - preloads: [ - () => import('./start/routes.js'), - () => import('./start/kernel.js'), - () => import('#start/validator'), - () => import('#start/rules/unique'), - () => import('#start/rules/translated_language'), - () => import('#start/rules/unique_person'), - () => import('#start/rules/file_length'), - () => import('#start/rules/file_scan'), - () => import('#start/rules/allowed_extensions_mimetypes'), - () => import('#start/rules/dependent_array_min_length') - ], - /* + preloads: [ + () => import('./start/routes.js'), + () => import('./start/kernel.js'), + () => import('#start/validator'), + // () => import('#start/rules/unique'), + // () => import('#start/rules/translated_language'), + // () => import('#start/rules/unique_person'), + // // () => import('#start/rules/file_length'), + // // () => import('#start/rules/file_scan'), + // // () => import('#start/rules/allowed_extensions_mimetypes'), + // () => import('#start/rules/dependent_array_min_length'), + // () => import('#start/rules/referenceValidation'), + // () => import('#start/rules/valid_mimetype'), + // () => import('#start/rules/array_contains_types'), + // () => import('#start/rules/orcid'), + ], + /* |-------------------------------------------------------------------------- | Service providers |-------------------------------------------------------------------------- @@ -44,48 +48,49 @@ export default defineConfig({ | application | */ - providers: [ - // () => import('./providers/AppProvider.js'), - () => import('@adonisjs/core/providers/app_provider'), - () => import('@adonisjs/core/providers/hash_provider'), - { - file: () => import('@adonisjs/core/providers/repl_provider'), - environment: ['repl', 'test'], - }, - () => import('@adonisjs/session/session_provider'), - () => import('@adonisjs/core/providers/edge_provider'), - () => import('@adonisjs/shield/shield_provider'), - // () => import('@eidellev/inertia-adonisjs'), - // () => import('@adonisjs/inertia/inertia_provider'), - () => import('#providers/app_provider'), - () => import('#providers/inertia_provider'), - () => import('@adonisjs/lucid/database_provider'), - () => import('@adonisjs/auth/auth_provider'), - // () => import('@eidellev/adonis-stardust'), - () => import('@adonisjs/redis/redis_provider'), - () => import('@adonisjs/encore/encore_provider'), - () => import('@adonisjs/static/static_provider'), - () => import('#providers/stardust_provider'), - () => import('#providers/query_builder_provider'), - () => import('#providers/token_worker_provider'), - // () => import('#providers/validator_provider'), - () => import('#providers/drive/provider/drive_provider'), - // () => import('@adonisjs/core/providers/vinejs_provider'), - () => import('#providers/vinejs_provider'), - () => import('@adonisjs/mail/mail_provider') - // () => import('#providers/mail_provider'), - ], - metaFiles: [ - { - pattern: 'public/**', - reloadServer: false, - }, - { - pattern: 'resources/views/**/*.edge', - reloadServer: false, - }, - ], - /* + providers: [ + // () => import('./providers/AppProvider.js'), + () => import('@adonisjs/core/providers/app_provider'), + () => import('@adonisjs/core/providers/hash_provider'), + { + file: () => import('@adonisjs/core/providers/repl_provider'), + environment: ['repl', 'test'], + }, + () => import('@adonisjs/session/session_provider'), + () => import('@adonisjs/core/providers/edge_provider'), + () => import('@adonisjs/shield/shield_provider'), + // () => import('@eidellev/inertia-adonisjs'), + // () => import('@adonisjs/inertia/inertia_provider'), + () => import('#providers/app_provider'), + () => import('#providers/inertia_provider'), + () => import('@adonisjs/lucid/database_provider'), + () => import('@adonisjs/auth/auth_provider'), + // () => import('@eidellev/adonis-stardust'), + () => import('@adonisjs/redis/redis_provider'), + // () => import('@adonisjs/encore/encore_provider'), + () => import('@adonisjs/static/static_provider'), + () => import('#providers/stardust_provider'), + () => import('#providers/query_builder_provider'), + () => import('#providers/token_worker_provider'), + () => import('#providers/rule_provider'), + // () => import('#providers/drive/provider/drive_provider'), + () => import('@adonisjs/drive/drive_provider'), + // () => import('@adonisjs/core/providers/vinejs_provider'), + () => import('#providers/vinejs_provider'), + () => import('@adonisjs/mail/mail_provider'), + () => import('@adonisjs/vite/vite_provider'), + ], + metaFiles: [ + { + pattern: 'public/**', + reloadServer: false, + }, + { + pattern: 'resources/views/**/*.edge', + reloadServer: false, + }, + ], + /* |-------------------------------------------------------------------------- | Tests |-------------------------------------------------------------------------- @@ -94,22 +99,24 @@ export default defineConfig({ | and add additional suites. | */ - tests: { - suites: [ - { - files: ['tests/unit/**/*.spec(.ts|.js)'], - name: 'unit', - timeout: 2000, - }, - { - files: ['tests/functional/**/*.spec(.ts|.js)'], - name: 'functional', - timeout: 30000, - }, - ], - forceExit: false, - }, - - - -}) + tests: { + suites: [ + { + files: ['tests/unit/**/*.spec(.ts|.js)'], + name: 'unit', + timeout: 2000, + }, + { + files: ['tests/functional/**/*.spec(.ts|.js)'], + name: 'functional', + timeout: 30000, + }, + ], + forceExit: false, + }, + assetsBundler: false, + hooks: { + onBuildStarting: [() => import('@adonisjs/vite/build_hook')], + }, + // assetsBundler: false +}); diff --git a/app/Controllers/Http/Admin/AdminuserController.ts b/app/Controllers/Http/Admin/AdminuserController.ts index ce99724..2962cbd 100644 --- a/app/Controllers/Http/Admin/AdminuserController.ts +++ b/app/Controllers/Http/Admin/AdminuserController.ts @@ -85,7 +85,9 @@ export default class AdminuserController { // return response.badRequest(error.messages); throw error; } - const input = request.only(['login', 'email', 'password', 'first_name', 'last_name']); + + const input: Record = request.only(['login', 'email','first_name', 'last_name']); + input.password = request.input('new_password'); const user = await User.create(input); if (request.input('roles')) { const roles: Array = request.input('roles'); @@ -95,7 +97,6 @@ export default class AdminuserController { session.flash('message', 'User has been created successfully'); return response.redirect().toRoute('settings.user.index'); } - public async show({ request, inertia }: HttpContext) { const id = request.param('id'); const user = await User.query().where('id', id).firstOrFail(); @@ -139,9 +140,11 @@ export default class AdminuserController { }); // password is optional - let input; - if (request.input('password')) { - input = request.only(['login', 'email', 'password', 'first_name', 'last_name']); + let input: Record; + + if (request.input('new_password')) { + input = request.only(['login', 'email', 'first_name', 'last_name']); + input.password = request.input('new_password'); } else { input = request.only(['login', 'email', 'first_name', 'last_name']); } @@ -156,7 +159,6 @@ export default class AdminuserController { session.flash('message', 'User has been updated successfully'); return response.redirect().toRoute('settings.user.index'); } - public async destroy({ request, response, session }: HttpContext) { const id = request.param('id'); const user = await User.findOrFail(id); diff --git a/app/Controllers/Http/Admin/MimetypeController.ts b/app/Controllers/Http/Admin/MimetypeController.ts index 716c4fb..561c0ad 100644 --- a/app/Controllers/Http/Admin/MimetypeController.ts +++ b/app/Controllers/Http/Admin/MimetypeController.ts @@ -25,6 +25,7 @@ export default class MimetypeController { const newDatasetSchema = vine.object({ name: vine.string().trim().isUnique({ table: 'mime_types', column: 'name' }), file_extension: vine.array(vine.string()).minLength(1), // define at least one extension for the new mimetype + alternate_mimetype: vine.array(vine.string().isValidMimetype()).distinct().optional(), // define alias mimetypes enabled: vine.boolean(), }); // await request.validate({ schema: newDatasetSchema, messages: this.messages }); @@ -32,18 +33,22 @@ export default class MimetypeController { // Step 2 - Validate request body against the schema // await request.validate({ schema: newDatasetSchema, messages: this.messages }); const validator = vine.compile(newDatasetSchema); - validator.messagesProvider = new SimpleMessagesProvider(this.messages); - await request.validateUsing(validator); + validator.messagesProvider = new SimpleMessagesProvider(this.messages); + await request.validateUsing(validator, { messagesProvider: new SimpleMessagesProvider(this.messages) }); } catch (error) { // Step 3 - Handle errors // return response.badRequest(error.messages); throw error; } - const input = request.only(['name', 'enabled', 'file_extension']); + const input = request.only(['name', 'enabled', 'file_extension', 'alternate_mimetype']); // Concatenate the file_extensions array into a string with '|' as the separator if (Array.isArray(input.file_extension)) { input.file_extension = input.file_extension.join('|'); } + // Concatenate the alias_mimetype array into a string with '|' as the separator + if (Array.isArray(input.alternate_mimetype)) { + input.alternate_mimetype = input.alternate_mimetype.join('|'); + } await MimeType.create(input); // if (request.input('roles')) { // const roles: Array = request.input('roles'); @@ -59,7 +64,7 @@ export default class MimetypeController { 'maxLength': '{{ field }} must be less then {{ max }} characters long', 'isUnique': '{{ field }} must be unique, and this value is already taken', 'required': '{{ field }} is required', - 'file_extension.minLength': 'at least {{ min }} mimetypes must be defined', + 'file_extension.array.minLength': 'at least {{ min }} mimetypes must be defined', 'file_extension.*.string': 'Each file extension must be a valid string', // Adjusted to match the type }; diff --git a/app/Controllers/Http/Admin/mailsettings_controller.ts b/app/Controllers/Http/Admin/mailsettings_controller.ts index 43e9dc7..628a9fc 100644 --- a/app/Controllers/Http/Admin/mailsettings_controller.ts +++ b/app/Controllers/Http/Admin/mailsettings_controller.ts @@ -76,23 +76,24 @@ export default class MailSettingsController { public async sendTestMail({ response, auth }: HttpContext) { const user = auth.user!; const userEmail = user.email; - + // let mailManager = await app.container.make('mail.manager'); - // let iwas = mailManager.use(); + // let iwas = mailManager.use(); // let test = mail.config.mailers.smtp(); if (!userEmail) { return response.badRequest({ message: 'User email is not set. Please update your profile.' }); } try { - await mail.send((message) => { - message - // .from(Config.get('mail.from.address')) - .from('tethys@geosphere.at') - .to(userEmail) - .subject('Test Email') - .html('

If you received this email, the email configuration seems to be correct.

'); - }); + await mail.send( + (message) => { + message + // .from(Config.get('mail.from.address')) + .from('tethys@geosphere.at') + .to(userEmail) + .subject('Test Email') + .html('

If you received this email, the email configuration seems to be correct.

'); + }); return response.json({ success: true, message: 'Test email sent successfully' }); // return response.flash('Test email sent successfully!', 'message').redirect().back(); diff --git a/app/Controllers/Http/Api/AuthorsController.ts b/app/Controllers/Http/Api/AuthorsController.ts index 599da80..2b0bae1 100644 --- a/app/Controllers/Http/Api/AuthorsController.ts +++ b/app/Controllers/Http/Api/AuthorsController.ts @@ -4,17 +4,29 @@ import Person from '#models/person'; // node ace make:controller Author export default class AuthorsController { - public async index({}: HttpContext) { - // select * from gba.persons - // where exists (select * from gba.documents inner join gba.link_documents_persons on "documents"."id" = "link_documents_persons"."document_id" - // where ("link_documents_persons"."role" = 'author') and ("persons"."id" = "link_documents_persons"."person_id")); + public async index({}: HttpContext) { + const authors = await Person.query() - .whereHas('datasets', (dQuery) => { - dQuery.wherePivot('role', 'author'); - }) - .withCount('datasets', (query) => { - query.as('datasets_count'); - }); + .select([ + 'id', + 'academic_title', + 'first_name', + 'last_name', + 'identifier_orcid', + 'status', + 'name_type', + 'created_at' + // Note: 'email' is omitted + ]) + .preload('datasets') + .where('name_type', 'Personal') + .whereHas('datasets', (dQuery) => { + dQuery.wherePivot('role', 'author'); + }) + .withCount('datasets', (query) => { + query.as('datasets_count'); + }) + .orderBy('datasets_count', 'desc'); return authors; } @@ -25,7 +37,10 @@ export default class AuthorsController { if (request.input('filter')) { // users = users.whereRaw('name like %?%', [request.input('search')]) const searchTerm = request.input('filter'); - authors.whereILike('first_name', `%${searchTerm}%`).orWhereILike('last_name', `%${searchTerm}%`); + authors.andWhere((query) => { + query.whereILike('first_name', `%${searchTerm}%`) + .orWhereILike('last_name', `%${searchTerm}%`); + }); // .orWhere('email', 'like', `%${searchTerm}%`); } diff --git a/app/Controllers/Http/Api/AvatarController.ts b/app/Controllers/Http/Api/AvatarController.ts index 96b158c..d7c532f 100644 --- a/app/Controllers/Http/Api/AvatarController.ts +++ b/app/Controllers/Http/Api/AvatarController.ts @@ -1,65 +1,212 @@ import type { HttpContext } from '@adonisjs/core/http'; import { StatusCodes } from 'http-status-codes'; -// import * as fs from 'fs'; -// import * as path from 'path'; +import redis from '@adonisjs/redis/services/main'; -const prefixes = ['von', 'van']; +const PREFIXES = ['von', 'van', 'de', 'del', 'della', 'di', 'da', 'dos', 'du', 'le', 'la']; +const DEFAULT_SIZE = 50; +const MIN_SIZE = 16; +const MAX_SIZE = 512; +const FONT_SIZE_RATIO = 0.4; +const COLOR_LIGHTENING_PERCENT = 60; +const COLOR_DARKENING_FACTOR = 0.6; +const CACHE_TTL = 24 * 60 * 60; // 24 hours instead of 1 hour -// node ace make:controller Author export default class AvatarController { public async generateAvatar({ request, response }: HttpContext) { try { - const { name, background, textColor, size } = request.only(['name', 'background', 'textColor', 'size']); + const { name, size = DEFAULT_SIZE } = request.only(['name', 'size']); + + // Enhanced validation + if (!name || typeof name !== 'string' || name.trim().length === 0) { + return response.status(StatusCodes.BAD_REQUEST).json({ + error: 'Name is required and must be a non-empty string', + }); + } + + const parsedSize = this.validateSize(size); + if (!parsedSize.isValid) { + return response.status(StatusCodes.BAD_REQUEST).json({ + error: parsedSize.error, + }); + } + + // Build a unique cache key for the given name and size + const cacheKey = `avatar:${this.sanitizeName(name)}-${parsedSize.value}`; + // const cacheKey = `avatar:${name.trim().toLowerCase()}-${size}`; + try { + const cachedSvg = await redis.get(cacheKey); + if (cachedSvg) { + this.setResponseHeaders(response); + return response.send(cachedSvg); + } + } catch (redisError) { + // Log redis error but continue without cache + console.warn('Redis cache read failed:', redisError); + } - // Generate initials - // const initials = name - // .split(' ') - // .map((part) => part.charAt(0).toUpperCase()) - // .join(''); const initials = this.getInitials(name); + const colors = this.generateColors(name); + const svgContent = this.createSvg(size, colors, initials); - // Define SVG content with dynamic values for initials, background color, text color, and size - const svgContent = ` - - - ${initials} - - `; - - // Set response headers for SVG content - response.header('Content-type', 'image/svg+xml'); - response.header('Cache-Control', 'no-cache'); - response.header('Pragma', 'no-cache'); - response.header('Expires', '0'); + // // Cache the generated avatar for future use, e.g. 1 hour expiry + try { + await redis.setex(cacheKey, CACHE_TTL, svgContent); + } catch (redisError) { + // Log but don't fail the request + console.warn('Redis cache write failed:', redisError); + } + this.setResponseHeaders(response); return response.send(svgContent); } catch (error) { - return response.status(StatusCodes.OK).json({ error: error.message }); + console.error('Avatar generation error:', error); + return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ + error: 'Failed to generate avatar', + }); } } - private getInitials(name: string) { - const parts = name.split(' '); - let initials = ''; + private validateSize(size: any): { isValid: boolean; value?: number; error?: string } { + const numSize = Number(size); - if (parts.length >= 2) { + if (isNaN(numSize)) { + return { isValid: false, error: 'Size must be a valid number' }; + } + + if (numSize < MIN_SIZE || numSize > MAX_SIZE) { + return { + isValid: false, + error: `Size must be between ${MIN_SIZE} and ${MAX_SIZE}`, + }; + } + + return { isValid: true, value: Math.floor(numSize) }; + } + + private sanitizeName(name: string): string { + return name + .trim() + .toLowerCase() + .replace(/[^a-z0-9\s-]/gi, ''); + } + + private getInitials(name: string): string { + const sanitized = name.trim().replace(/\s+/g, ' '); // normalize whitespace + const parts = sanitized + .split(' ') + .filter((part) => part.length > 0) + .map((part) => part.trim()); + + if (parts.length === 0) { + return 'NA'; + } + + if (parts.length === 1) { + // For single word, take first 2 characters or first char if only 1 char + return parts[0].substring(0, Math.min(2, parts[0].length)).toUpperCase(); + } + + return this.getMultiWordInitials(parts); + } + + private getMultiWordInitials(parts: string[]): string { + // Filter out prefixes and short words + const significantParts = parts.filter((part) => !PREFIXES.includes(part.toLowerCase()) && part.length > 1); + + if (significantParts.length === 0) { + // Fallback to first and last regardless of prefixes const firstName = parts[0]; const lastName = parts[parts.length - 1]; - - const firstInitial = firstName.charAt(0).toUpperCase(); - const lastInitial = lastName.charAt(0).toUpperCase(); - - if (prefixes.includes(lastName.toLowerCase()) && lastName === lastName.toUpperCase()) { - initials = firstInitial + lastName.charAt(1).toUpperCase(); - } else { - initials = firstInitial + lastInitial; - } - } else if (parts.length === 1) { - initials = parts[0].substring(0, 2).toUpperCase(); + return (firstName.charAt(0) + lastName.charAt(0)).toUpperCase(); } - return initials; + if (significantParts.length === 1) { + return significantParts[0].substring(0, 2).toUpperCase(); + } + + // Take first and last significant parts + const firstName = significantParts[0]; + const lastName = significantParts[significantParts.length - 1]; + return (firstName.charAt(0) + lastName.charAt(0)).toUpperCase(); + } + + private generateColors(name: string): { background: string; text: string } { + const baseColor = this.getColorFromName(name); + return { + background: this.lightenColor(baseColor, COLOR_LIGHTENING_PERCENT), + text: this.darkenColor(baseColor), + }; + } + + private createSvg(size: number, colors: { background: string; text: string }, initials: string): string { + const fontSize = Math.max(12, Math.floor(size * FONT_SIZE_RATIO)); // Ensure readable font size + + // Escape any potential HTML/XML characters in initials + const escapedInitials = this.escapeXml(initials); + + return ` + + ${escapedInitials} + `; + } + + private escapeXml(text: string): string { + return text.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + } + + private setResponseHeaders(response: HttpContext['response']): void { + response.header('Content-Type', 'image/svg+xml'); + response.header('Cache-Control', 'public, max-age=86400'); // Cache for 1 day + response.header('ETag', `"${Date.now()}"`); // Simple ETag + } + + private getColorFromName(name: string): string { + let hash = 0; + const normalizedName = name.toLowerCase().trim(); + + for (let i = 0; i < normalizedName.length; i++) { + hash = normalizedName.charCodeAt(i) + ((hash << 5) - hash); + hash = hash & hash; // Convert to 32-bit integer + } + + // Ensure we get vibrant colors by constraining the color space + const colorParts = []; + for (let i = 0; i < 3; i++) { + let value = (hash >> (i * 8)) & 0xff; + // Ensure minimum color intensity for better contrast + value = Math.max(50, value); + colorParts.push(value.toString(16).padStart(2, '0')); + } + return colorParts.join(''); + } + + private lightenColor(hexColor: string, percent: number): string { + const r = parseInt(hexColor.substring(0, 2), 16); + const g = parseInt(hexColor.substring(2, 4), 16); + const b = parseInt(hexColor.substring(4, 6), 16); + + const lightenValue = (value: number) => Math.min(255, Math.floor(value + (255 - value) * (percent / 100))); + + const newR = lightenValue(r); + const newG = lightenValue(g); + const newB = lightenValue(b); + + return ((newR << 16) | (newG << 8) | newB).toString(16).padStart(6, '0'); + } + + private darkenColor(hexColor: string): string { + const r = parseInt(hexColor.slice(0, 2), 16); + const g = parseInt(hexColor.slice(2, 4), 16); + const b = parseInt(hexColor.slice(4, 6), 16); + + const darkenValue = (value: number) => Math.max(0, Math.floor(value * COLOR_DARKENING_FACTOR)); + + const darkerR = darkenValue(r); + const darkerG = darkenValue(g); + const darkerB = darkenValue(b); + + return ((darkerR << 16) + (darkerG << 8) + darkerB).toString(16).padStart(6, '0'); } } diff --git a/app/Controllers/Http/Api/DatasetController.ts b/app/Controllers/Http/Api/DatasetController.ts index 41befe6..9106521 100644 --- a/app/Controllers/Http/Api/DatasetController.ts +++ b/app/Controllers/Http/Api/DatasetController.ts @@ -1,19 +1,36 @@ import type { HttpContext } from '@adonisjs/core/http'; -// import Person from 'App/Models/Person'; import Dataset from '#models/dataset'; import { StatusCodes } from 'http-status-codes'; +import DatasetReference from '#models/dataset_reference'; // node ace make:controller Author export default class DatasetController { - public async index({}: HttpContext) { - // select * from gba.persons - // where exists (select * from gba.documents inner join gba.link_documents_persons on "documents"."id" = "link_documents_persons"."document_id" - // where ("link_documents_persons"."role" = 'author') and ("persons"."id" = "link_documents_persons"."person_id")); - const datasets = await Dataset.query().where('server_state', 'published').orWhere('server_state', 'deleted'); + /** + * GET /api/datasets + * Find all published datasets + */ + public async index({ response }: HttpContext) { + try { + const datasets = await Dataset.query() + .where(function (query) { + query.where('server_state', 'published').orWhere('server_state', 'deleted'); + }) + .preload('titles') + .preload('identifier') + .orderBy('server_date_published', 'desc'); - return datasets; + return response.status(StatusCodes.OK).json(datasets); + } catch (error) { + return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ + message: error.message || 'Some error occurred while retrieving datasets.', + }); + } } + /** + * GET /api/dataset + * Find all published datasets + */ public async findAll({ response }: HttpContext) { try { const datasets = await Dataset.query() @@ -29,34 +46,279 @@ export default class DatasetController { } } - public async findOne({ params }: HttpContext) { - const datasets = await Dataset.query() - .where('publish_id', params.publish_id) - .preload('titles') - .preload('descriptions') - .preload('user') - .preload('authors', (builder) => { - builder.orderBy('pivot_sort_order', 'asc'); - }) - .preload('contributors', (builder) => { - builder.orderBy('pivot_sort_order', 'asc'); - }) - .preload('subjects') - .preload('coverage') - .preload('licenses') - .preload('references') - .preload('project') - .preload('referenced_by', (builder) => { - builder.preload('dataset', (builder) => { - builder.preload('identifier'); - }); - }) - .preload('files', (builder) => { - builder.preload('hashvalues'); - }) - .preload('identifier') - .firstOrFail(); + /** + * GET /api/dataset/:publish_id + * Find one dataset by publish_id + */ + public async findOne({ response, params }: HttpContext) { + try { + const dataset = await Dataset.query() + .where('publish_id', params.publish_id) + .preload('titles') + .preload('descriptions') // Using 'descriptions' instead of 'abstracts' + .preload('user', (builder) => { + builder.select(['id', 'firstName', 'lastName', 'avatar', 'login']); + }) + .preload('authors', (builder) => { + builder + .select(['id', 'academic_title', 'first_name', 'last_name', 'identifier_orcid', 'status', 'name_type']) + .withCount('datasets', (query) => { + query.as('datasets_count'); + }) + .pivotColumns(['role', 'sort_order']) + .orderBy('pivot_sort_order', 'asc'); + }) + .preload('contributors', (builder) => { + builder + .select(['id', 'academic_title', 'first_name', 'last_name', 'identifier_orcid', 'status', 'name_type']) + .withCount('datasets', (query) => { + query.as('datasets_count'); + }) + .pivotColumns(['role', 'sort_order', 'contributor_type']) + .orderBy('pivot_sort_order', 'asc'); + }) + .preload('subjects') + .preload('coverage') + .preload('licenses') + .preload('references') + .preload('project') + // .preload('referenced_by', (builder) => { + // builder.preload('dataset', (builder) => { + // builder.preload('identifier'); + // }); + // }) + .preload('files', (builder) => { + builder.preload('hashvalues'); + }) + .preload('identifier') + .first(); // Use first() instead of firstOrFail() to handle not found gracefully - return datasets; + if (!dataset) { + return response.status(StatusCodes.NOT_FOUND).json({ + message: `Cannot find Dataset with publish_id=${params.publish_id}.`, + }); + } + + // Build the version chain + const versionChain = await this.buildVersionChain(dataset); + + // Add version chain to response + const responseData = { + ...dataset.toJSON(), + versionChain: versionChain, + }; + + // return response.status(StatusCodes.OK).json(dataset); + return response.status(StatusCodes.OK).json(responseData); + } catch (error) { + return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ + message: error.message || `Error retrieving Dataset with publish_id=${params.publish_id}.`, + }); + } + } + + /** + * GET /:prefix/:value + * Find dataset by identifier (e.g., https://doi.tethys.at/10.24341/tethys.99.2) + */ + public async findByIdentifier({ response, params }: HttpContext) { + const identifierValue = `${params.prefix}/${params.value}`; + + // Optional: Validate DOI format + if (!identifierValue.match(/^10\.\d+\/[a-zA-Z0-9._-]+\.[0-9]+(?:\.[0-9]+)*$/)) { + return response.status(StatusCodes.BAD_REQUEST).json({ + message: `Invalid DOI format: ${identifierValue}`, + }); + } + + try { + // Method 1: Using subquery with whereIn (most similar to your original) + const dataset = await Dataset.query() + // .whereIn('id', (subQuery) => { + // subQuery.select('dataset_id').from('dataset_identifiers').where('value', identifierValue); + // }) + .whereHas('identifier', (builder) => { + builder.where('value', identifierValue); + }) + .preload('titles') + .preload('descriptions') // Using 'descriptions' instead of 'abstracts' + .preload('user', (builder) => { + builder.select(['id', 'firstName', 'lastName', 'avatar', 'login']); + }) + .preload('authors', (builder) => { + builder + .select(['id', 'academic_title', 'first_name', 'last_name', 'identifier_orcid', 'status', 'name_type']) + .withCount('datasets', (query) => { + query.as('datasets_count'); + }) + .pivotColumns(['role', 'sort_order']) + .wherePivot('role', 'author') + .orderBy('pivot_sort_order', 'asc'); + }) + .preload('contributors', (builder) => { + builder + .select(['id', 'academic_title', 'first_name', 'last_name', 'identifier_orcid', 'status', 'name_type']) + .withCount('datasets', (query) => { + query.as('datasets_count'); + }) + .pivotColumns(['role', 'sort_order', 'contributor_type']) + .wherePivot('role', 'contributor') + .orderBy('pivot_sort_order', 'asc'); + }) + .preload('subjects') + .preload('coverage') + .preload('licenses') + .preload('references') + .preload('project') + // .preload('referenced_by', (builder) => { + // builder.preload('dataset', (builder) => { + // builder.preload('identifier'); + // }); + // }) + .preload('files', (builder) => { + builder.preload('hashvalues'); + }) + .preload('identifier') + .first(); + + if (!dataset) { + return response.status(StatusCodes.NOT_FOUND).json({ + message: `Cannot find Dataset with identifier=${identifierValue}.`, + }); + } + // Build the version chain + const versionChain = await this.buildVersionChain(dataset); + + // Add version chain to response + const responseData = { + ...dataset.toJSON(), + versionChain: versionChain, + }; + + // return response.status(StatusCodes.OK).json(dataset); + return response.status(StatusCodes.OK).json(responseData); + } catch (error) { + return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ + message: error.message || `Error retrieving Dataset with identifier=${identifierValue}.`, + }); + } + } + + /** + * Build the complete version chain for a dataset + * Traverses both backwards (previous versions) and forwards (newer versions) + */ + private async buildVersionChain(dataset: Dataset) { + const versionChain = { + current: { + id: dataset.id, + publish_id: dataset.publish_id, + doi: dataset.identifier?.value || null, + main_title: dataset.mainTitle || null, + server_date_published: dataset.server_date_published, + }, + previousVersions: [] as any[], + newerVersions: [] as any[], + }; + + // Get all previous versions (going backwards in time) + versionChain.previousVersions = await this.getPreviousVersions(dataset.id); + + // Get all newer versions (going forwards in time) + versionChain.newerVersions = await this.getNewerVersions(dataset.id); + + return versionChain; + } + + /** + * Recursively get all previous versions + */ + private async getPreviousVersions(datasetId: number, visited: Set = new Set()): Promise { + // Prevent infinite loops + if (visited.has(datasetId)) { + return []; + } + visited.add(datasetId); + + const previousVersions: any[] = []; + + // Find references where this dataset "IsNewVersionOf" another dataset + const previousRefs = await DatasetReference.query() + .where('document_id', datasetId) + .where('relation', 'IsNewVersionOf') + .whereNotNull('related_document_id'); + + for (const ref of previousRefs) { + if (!ref.related_document_id) continue; + + const previousDataset = await Dataset.query() + .where('id', ref.related_document_id) + .preload('identifier') + .preload('titles') + .first(); + + if (previousDataset) { + const versionInfo = { + id: previousDataset.id, + publish_id: previousDataset.publish_id, + doi: previousDataset.identifier?.value || null, + main_title: previousDataset.mainTitle || null, + server_date_published: previousDataset.server_date_published, + relation: 'IsPreviousVersionOf', // From perspective of current dataset + }; + + previousVersions.push(versionInfo); + + // Recursively get even older versions + const olderVersions = await this.getPreviousVersions(previousDataset.id, visited); + previousVersions.push(...olderVersions); + } + } + + return previousVersions; + } + + /** + * Recursively get all newer versions + */ + private async getNewerVersions(datasetId: number, visited: Set = new Set()): Promise { + // Prevent infinite loops + if (visited.has(datasetId)) { + return []; + } + visited.add(datasetId); + + const newerVersions: any[] = []; + + // Find references where this dataset "IsPreviousVersionOf" another dataset + const newerRefs = await DatasetReference.query() + .where('document_id', datasetId) + .where('relation', 'IsPreviousVersionOf') + .whereNotNull('related_document_id'); + + for (const ref of newerRefs) { + if (!ref.related_document_id) continue; + + const newerDataset = await Dataset.query().where('id', ref.related_document_id).preload('identifier').preload('titles').first(); + + if (newerDataset) { + const versionInfo = { + id: newerDataset.id, + publish_id: newerDataset.publish_id, + doi: newerDataset.identifier?.value || null, + main_title: newerDataset.mainTitle || null, + server_date_published: newerDataset.server_date_published, + relation: 'IsNewVersionOf', // From perspective of current dataset + }; + + newerVersions.push(versionInfo); + + // Recursively get even newer versions + const evenNewerVersions = await this.getNewerVersions(newerDataset.id, visited); + newerVersions.push(...evenNewerVersions); + } + } + + return newerVersions; } } diff --git a/app/Controllers/Http/Api/FileController.ts b/app/Controllers/Http/Api/FileController.ts index 3c1f3d4..8a400ad 100644 --- a/app/Controllers/Http/Api/FileController.ts +++ b/app/Controllers/Http/Api/FileController.ts @@ -2,53 +2,103 @@ import type { HttpContext } from '@adonisjs/core/http'; import File from '#models/file'; import { StatusCodes } from 'http-status-codes'; import * as fs from 'fs'; -import * as path from 'path'; +import { DateTime } from 'luxon'; // node ace make:controller Author export default class FileController { // @Get("download/:id") public async findOne({ response, params }: HttpContext) { const id = params.id; - const file = await File.findOrFail(id); - // const file = await File.findOne({ - // where: { id: id }, - // }); - if (file) { - const filePath = '/storage/app/public/' + file.pathName; - const ext = path.extname(filePath); - const fileName = file.label + ext; - try { - fs.accessSync(filePath, fs.constants.R_OK); //| fs.constants.W_OK); - // console.log("can read/write:", path); - - response - .header('Cache-Control', 'no-cache private') - .header('Content-Description', 'File Transfer') - .header('Content-Type', file.mimeType) - .header('Content-Disposition', 'inline; filename=' + fileName) - .header('Content-Transfer-Encoding', 'binary') - .header('Access-Control-Allow-Origin', '*') - .header('Access-Control-Allow-Methods', 'GET,POST'); - - response.status(StatusCodes.OK).download(filePath); - } catch (err) { - // console.log("no access:", path); - response.status(StatusCodes.NOT_FOUND).send({ - message: `File with id ${id} doesn't exist on file server`, - }); - } + // const file = await File.findOrFail(id); + // Load file with its related dataset to check embargo + const file = await File.query() + .where('id', id) + .preload('dataset') // or 'dataset' - whatever your relationship is named + .firstOrFail(); - // res.status(StatusCodes.OK).sendFile(filePath, (err) => { - // // res.setHeader("Content-Type", "application/json"); - // // res.removeHeader("Content-Disposition"); - // res.status(StatusCodes.NOT_FOUND).send({ - // message: `File with id ${id} doesn't exist on file server`, - // }); - // }); - } else { - response.status(StatusCodes.NOT_FOUND).send({ + if (!file) { + return response.status(StatusCodes.NOT_FOUND).send({ message: `Cannot find File with id=${id}.`, }); } + + const dataset = file.dataset; + // Files from unpublished datasets are now blocked + if (dataset.server_state !== 'published') { + return response.status(StatusCodes.FORBIDDEN).send({ + message: `File access denied: Dataset is not published.`, + }); + } + if (dataset && this.isUnderEmbargo(dataset.embargo_date)) { + return response.status(StatusCodes.FORBIDDEN).send({ + message: `File is under embargo until ${dataset.embargo_date?.toFormat('yyyy-MM-dd')}`, + }); + } + + // Proceed with file download + const filePath = '/storage/app/data/' + file.pathName; + const fileExt = file.filePath.split('.').pop() || ''; + // const fileName = file.label + fileExt; + const fileName = file.label.toLowerCase().endsWith(`.${fileExt.toLowerCase()}`) ? file.label : `${file.label}.${fileExt}`; + + // Determine if file can be previewed inline in browser + const canPreviewInline = (mimeType: string): boolean => { + const type = mimeType.toLowerCase(); + return ( + type === 'application/pdf' || + type.startsWith('image/') || + type.startsWith('text/') || + type === 'application/json' || + type === 'application/xml' || + // Uncomment if you want video/audio inline + type.startsWith('video/') || + type.startsWith('audio/') + ); + }; + const disposition = canPreviewInline(file.mimeType) ? 'inline' : 'attachment'; + + try { + fs.accessSync(filePath, fs.constants.R_OK); //| fs.constants.W_OK); + // console.log("can read/write:", filePath); + + response + .header('Cache-Control', 'no-cache private') + .header('Content-Description', 'File Transfer') + .header('Content-Type', file.mimeType) + .header('Content-Disposition', `${disposition}; filename="${fileName}"`) + .header('Content-Transfer-Encoding', 'binary') + .header('Access-Control-Allow-Origin', '*') + .header('Access-Control-Allow-Methods', 'GET'); + + response.status(StatusCodes.OK).download(filePath); + } catch (err) { + // console.log("no access:", path); + response.status(StatusCodes.NOT_FOUND).send({ + message: `File with id ${id} doesn't exist on file server`, + }); + } + } + + /** + * Check if the dataset is under embargo + * Compares only dates (ignoring time) for embargo check + * @param embargoDate - The embargo date from dataset + * @returns true if under embargo, false if embargo has passed or no embargo set + */ + private isUnderEmbargo(embargoDate: DateTime | null): boolean { + // No embargo date set - allow download + if (!embargoDate) { + return false; + } + + // Get current date at start of day (00:00:00) + const today = DateTime.now().startOf('day'); + + // Get embargo date at start of day (00:00:00) + const embargoDateOnly = embargoDate.startOf('day'); + + // File is under embargo if embargo date is after today + // This means the embargo lifts at the start of the embargo date + return embargoDateOnly >= today; } } diff --git a/app/Controllers/Http/Api/HomeController.ts b/app/Controllers/Http/Api/HomeController.ts index 020f651..fdec7f9 100644 --- a/app/Controllers/Http/Api/HomeController.ts +++ b/app/Controllers/Http/Api/HomeController.ts @@ -17,7 +17,8 @@ export default class HomeController { // .preload('authors') // .orderBy('server_date_published'); - const datasets = await db.from('documents as doc') + const datasets = await db + .from('documents as doc') .select(['publish_id', 'server_date_published', db.raw(`date_part('year', server_date_published) as pub_year`)]) .where('server_state', serverState) .innerJoin('link_documents_persons as ba', 'doc.id', 'ba.document_id') @@ -59,7 +60,6 @@ export default class HomeController { // const year = params.year; // const from = parseInt(year); try { - // const datasets = await Database.from('documents as doc') // .select([Database.raw(`date_part('month', server_date_published) as pub_month`), Database.raw('COUNT(*) as count')]) // .where('server_state', serverState) @@ -68,9 +68,12 @@ export default class HomeController { // .groupBy('pub_month'); // // .orderBy('server_date_published'); - const years = [2021, 2022, 2023]; // Add the second year + // Calculate the last 4 years including the current year + const currentYear = new Date().getFullYear(); + const years = Array.from({ length: 4 }, (_, i) => currentYear - (i + 1)).reverse(); - const result = await db.from('documents as doc') + const result = await db + .from('documents as doc') .select([ db.raw(`date_part('year', server_date_published) as pub_year`), db.raw(`date_part('month', server_date_published) as pub_month`), @@ -83,7 +86,7 @@ export default class HomeController { .groupBy('pub_year', 'pub_month') .orderBy('pub_year', 'asc') .orderBy('pub_month', 'asc'); - + const labels = Array.from({ length: 12 }, (_, i) => i + 1); // Assuming 12 months const inputDatasets: Map = result.reduce((acc, item) => { @@ -100,15 +103,15 @@ export default class HomeController { acc[pub_year].data[pub_month - 1] = parseInt(count); - return acc ; + return acc; }, {}); const outputDatasets = Object.entries(inputDatasets).map(([year, data]) => ({ data: data.data, label: year, borderColor: data.borderColor, - fill: data.fill - })); + fill: data.fill, + })); const data = { labels: labels, @@ -126,11 +129,11 @@ export default class HomeController { private getRandomHexColor() { const letters = '0123456789ABCDEF'; let color = '#'; - + for (let i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } - + return color; } } @@ -139,5 +142,4 @@ interface ChartDataset { label: string; borderColor: string; fill: boolean; - } diff --git a/app/Controllers/Http/Api/UserController.ts b/app/Controllers/Http/Api/UserController.ts index 975e5e2..1d7a14a 100644 --- a/app/Controllers/Http/Api/UserController.ts +++ b/app/Controllers/Http/Api/UserController.ts @@ -9,6 +9,24 @@ import BackupCode from '#models/backup_code'; // Here we are generating secret and recovery codes for the user that’s enabling 2FA and storing them to our database. export default class UserController { + public async getSubmitters({ response }: HttpContext) { + try { + const submitters = await User.query() + .preload('roles', (query) => { + query.where('name', 'submitter') + }) + .whereHas('roles', (query) => { + query.where('name', 'submitter') + }) + .exec(); + return submitters; + } catch (error) { + return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({ + message: 'Invalid TOTP state', + }); + } + } + public async enable({ auth, response, request }: HttpContext) { const user = (await User.find(auth.user?.id)) as User; // await user.load('totp_secret'); diff --git a/app/Controllers/Http/Api/collections_controller.ts b/app/Controllers/Http/Api/collections_controller.ts new file mode 100644 index 0000000..04dcdb2 --- /dev/null +++ b/app/Controllers/Http/Api/collections_controller.ts @@ -0,0 +1,36 @@ +import type { HttpContext } from '@adonisjs/core/http'; +import Collection from '#models/collection'; + +export default class CollectionsController { + public async show({ params, response }: HttpContext) { + // Get the collection id from route parameters + const collectionId = params.id; + + // Find the selected collection by id + const collection = await Collection.find(collectionId); + if (!collection) { + return response.status(404).json({ message: 'Collection not found' }); + } + + // Query for narrower concepts: collections whose parent_id equals the selected collection's id + const narrowerCollections = await Collection.query().where('parent_id', collection.id) || []; + + // For broader concept, if the selected collection has a parent_id fetch that record (otherwise null) + const broaderCollection: Collection[] | never[] | null = await (async () => { + if (collection.parent_id) { + // Try to fetch the parent... + const parent = await Collection.find(collection.parent_id) + // If found, return it wrapped in an array; if not found, return null (or empty array if you prefer) + return parent ? [parent] : null + } + return [] + })() + + // Return the selected collection along with its narrower and broader concepts in JSON format + return response.json({ + selectedCollection: collection, + narrowerCollections, + broaderCollection, + }); + } +} diff --git a/app/Controllers/Http/Auth/AuthController.ts b/app/Controllers/Http/Auth/AuthController.ts index 71256f2..08b1c05 100644 --- a/app/Controllers/Http/Auth/AuthController.ts +++ b/app/Controllers/Http/Auth/AuthController.ts @@ -5,7 +5,7 @@ import BackupCode from '#models/backup_code'; // import InvalidCredentialException from 'App/Exceptions/InvalidCredentialException'; import { authValidator } from '#validators/auth'; import hash from '@adonisjs/core/services/hash'; - +import db from '@adonisjs/lucid/services/db'; import TwoFactorAuthProvider from '#app/services/TwoFactorAuthProvider'; // import { Authenticator } from '@adonisjs/auth'; // import { LoginState } from 'Contracts/enums'; @@ -29,6 +29,10 @@ export default class AuthController { const { email, password } = request.only(['email', 'password']); try { + + await db.connection().rawQuery('SELECT 1') + + // // attempt to verify credential and login user // await auth.use('web').attempt(email, plainPassword); @@ -51,6 +55,9 @@ export default class AuthController { await auth.use('web').login(user); } catch (error) { + if (error.code === 'ECONNREFUSED') { + throw error + } // if login fails, return vague form message and redirect back session.flash('message', 'Your username, email, or password is incorrect'); return response.redirect().back(); diff --git a/app/Controllers/Http/Auth/UserController.ts b/app/Controllers/Http/Auth/UserController.ts index 442aaca..46a8d48 100644 --- a/app/Controllers/Http/Auth/UserController.ts +++ b/app/Controllers/Http/Auth/UserController.ts @@ -6,6 +6,11 @@ import hash from '@adonisjs/core/services/hash'; // import { schema, rules } from '@adonisjs/validator'; import vine from '@vinejs/vine'; import BackupCodeStorage, { SecureRandom } from '#services/backup_code_storage'; +import path from 'path'; +import crypto from 'crypto'; +// import drive from '#services/drive'; +import drive from '@adonisjs/drive/services/main'; +import logger from '@adonisjs/core/services/logger'; // Here we are generating secret and recovery codes for the user that’s enabling 2FA and storing them to our database. export default class UserController { @@ -28,7 +33,7 @@ export default class UserController { user: user, twoFactorEnabled: user.isTwoFactorEnabled, // code: await TwoFactorAuthProvider.generateQrCode(user), - backupState: backupState, + backupState: backupState, }); } @@ -40,10 +45,8 @@ export default class UserController { // }); const passwordSchema = vine.object({ // first step - old_password: vine - .string() - .trim() - .regex(/^[a-zA-Z0-9]+$/), + old_password: vine.string().trim(), + // .regex(/^[a-zA-Z0-9]+$/), new_password: vine.string().confirmed({ confirmationField: 'confirm_password' }).trim().minLength(8).maxLength(255), }); try { @@ -54,9 +57,9 @@ export default class UserController { // return response.badRequest(error.messages); throw error; } - + try { - const user = await auth.user as User; + const user = (await auth.user) as User; const { old_password, new_password } = request.only(['old_password', 'new_password']); // if (!(old_password && new_password && confirm_password)) { @@ -82,6 +85,171 @@ export default class UserController { } } + public async profile({ inertia, auth }: HttpContext) { + const user = await User.find(auth.user?.id); + // let test = await drive.use().getUrl(user?.avatar); + // user?.preload('roles'); + const avatarFullPathUrl = user?.avatar ? await drive.use('public').getUrl(user.avatar) : null; + return inertia.render('profile/show', { + user: user, + defaultUrl: avatarFullPathUrl, + }); + } + + /** + * Update the user's profile information. + * + * @param {HttpContext} ctx - The HTTP context object. + * @returns {Promise} + */ + public async profileUpdate({ auth, request, response, session }: HttpContext) { + if (!auth.user) { + session.flash('error', 'You must be logged in to update your profile.'); + return response.redirect().toRoute('login'); + } + + const updateProfileValidator = vine.withMetaData<{ userId: number }>().compile( + vine.object({ + first_name: vine.string().trim().minLength(4).maxLength(255), + last_name: vine.string().trim().minLength(4).maxLength(255), + login: vine.string().trim().minLength(4).maxLength(255), + email: vine + .string() + .trim() + .maxLength(255) + .email() + .normalizeEmail() + .isUnique({ table: 'accounts', column: 'email', whereNot: (field) => field.meta.userId }), + avatar: vine + .myfile({ + size: '2mb', + extnames: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'], + }) + // .allowedMimetypeExtensions({ + // allowedExtensions: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'], + // }) + .optional(), + }), + ); + + const user = await User.find(auth.user.id); + if (!user) { + session.flash('error', 'User not found.'); + return response.redirect().toRoute('login'); + } + + try { + // validate update form + await request.validateUsing(updateProfileValidator, { + meta: { + userId: user.id, + }, + }); + + const { login, email, first_name, last_name } = request.only(['login', 'email', 'first_name', 'last_name']); + const sanitizedData: { [key: string]: any } = { + login: login?.trim(), + email: email?.toLowerCase().trim(), + first_name: first_name?.trim(), + last_name: last_name?.trim(), + // avatar: "", + }; + const toCamelCase = (str: string) => str.replace(/_([a-z])/g, (g) => g[1].toUpperCase()); + const hasInputChanges = Object.keys(sanitizedData).some((key) => { + const camelKey = toCamelCase(key); + return sanitizedData[key] !== (user.$attributes as { [key: string]: any })[camelKey]; + }); + + let hasAvatarChanged = false; + const avatar = request.file('avatar'); + if (avatar) { + const fileHash = crypto + .createHash('sha256') + .update(avatar.clientName + avatar.size) + .digest('hex'); + const fileName = `avatar-${fileHash}.${avatar.extname}`; + const avatarFullPath = path.join('/uploads', `${user.login}`, fileName); + + if (user.avatar != avatarFullPath) { + if (user.avatar) { + await drive.use('public').delete(user.avatar); + } + hasAvatarChanged = user.avatar !== avatarFullPath; + await avatar.moveToDisk(avatarFullPath, 'public', { + name: fileName, + overwrite: true, // overwrite in case of conflict + disk: 'public', + }); + sanitizedData.avatar = avatarFullPath; + } + } + + if (!hasInputChanges && !hasAvatarChanged) { + session.flash('message', 'No changes were made.'); + return response.redirect().back(); + } + + await user.merge(sanitizedData).save(); + session.flash('message', 'User has been updated successfully'); + return response.redirect().toRoute('settings.profile.edit'); + } catch (error) { + logger.error('Profile update failed:', error); + // session.flash('errors', 'Profile update failed. Please try again.'); + // return response.redirect().back(); + throw error; + } + } + + public async passwordUpdate({ auth, request, response, session }: HttpContext) { + // const passwordSchema = schema.create({ + // old_password: schema.string({ trim: true }, [rules.required()]), + // new_password: schema.string({ trim: true }, [rules.minLength(8), rules.maxLength(255), rules.confirmed('confirm_password')]), + // confirm_password: schema.string({ trim: true }, [rules.required()]), + // }); + const passwordSchema = vine.object({ + // first step + old_password: vine.string().trim(), + // .regex(/^[a-zA-Z0-9]+$/), + new_password: vine.string().confirmed({ confirmationField: 'confirm_password' }).trim().minLength(8).maxLength(255), + }); + try { + // await request.validate({ schema: passwordSchema }); + const validator = vine.compile(passwordSchema); + await request.validateUsing(validator); + } catch (error) { + // return response.badRequest(error.messages); + throw error; + } + + try { + const user = (await auth.user) as User; + const { old_password, new_password } = request.only(['old_password', 'new_password']); + + // if (!(old_password && new_password && confirm_password)) { + // return response.status(400).send({ warning: 'Old password and new password are required.' }); + // } + + // Verify if the provided old password matches the user's current password + const isSame = await hash.verify(user.password, old_password); + if (!isSame) { + session.flash('warning', 'Old password is incorrect.'); + return response.redirect().back(); + // return response.flash('warning', 'Old password is incorrect.').redirect().back(); + } + + // Hash the new password before updating the user's password + user.password = new_password; + await user.save(); + + // return response.status(200).send({ message: 'Password updated successfully.' }); + session.flash({ message: 'Password updated successfully.' }); + return response.redirect().toRoute('settings.profile.edit'); + } catch (error) { + // return response.status(500).send({ message: 'Internal server error.' }); + return response.flash('warning', `Invalid server state. Internal server error.`).redirect().back(); + } + } + public async enableTwoFactorAuthentication({ auth, response, session }: HttpContext): Promise { // const user: User | undefined = auth?.user; const user = (await User.find(auth.user?.id)) as User; @@ -115,7 +283,7 @@ export default class UserController { } else { session.flash('error', 'User not found.'); } - + return response.redirect().back(); // return inertia.render('Auth/AccountInfo', { // // status: { diff --git a/app/Controllers/Http/Editor/DatasetController.ts b/app/Controllers/Http/Editor/DatasetController.ts index acaf505..f2a0417 100644 --- a/app/Controllers/Http/Editor/DatasetController.ts +++ b/app/Controllers/Http/Editor/DatasetController.ts @@ -3,7 +3,7 @@ import { Client } from '@opensearch-project/opensearch'; import User from '#models/user'; import Dataset from '#models/dataset'; import DatasetIdentifier from '#models/dataset_identifier'; -import XmlModel from '#app/Library/XmlModel'; +import DatasetXmlSerializer from '#app/Library/DatasetXmlSerializer'; import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; import { create } from 'xmlbuilder2'; import { readFileSync } from 'fs'; @@ -18,9 +18,33 @@ import { HttpException } from 'node-exceptions'; import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model'; import vine, { SimpleMessagesProvider } from '@vinejs/vine'; import mail from '@adonisjs/mail/services/main'; -// import { resolveMx } from 'dns/promises'; -// import * as net from 'net'; import { validate } from 'deep-email-validator'; +import { + TitleTypes, + DescriptionTypes, + ContributorTypes, + PersonNameTypes, + ReferenceIdentifierTypes, + RelationTypes, + SubjectTypes, + DatasetTypes, +} from '#contracts/enums'; +import { TransactionClientContract } from '@adonisjs/lucid/types/database'; +import db from '@adonisjs/lucid/services/db'; +import Project from '#models/project'; +import License from '#models/license'; +import Language from '#models/language'; +import File from '#models/file'; +import Coverage from '#models/coverage'; +import Title from '#models/title'; +import Description from '#models/description'; +import Subject from '#models/subject'; +import DatasetReference from '#models/dataset_reference'; +import Collection from '#models/collection'; +import CollectionRole from '#models/collection_role'; +import { updateEditorDatasetValidator } from '#validators/dataset'; +import { savePersons } from '#app/utils/utility-functions'; + // Create a new instance of the client const client = new Client({ node: 'http://localhost:9200' }); // replace with your OpenSearch endpoint @@ -63,8 +87,15 @@ export default class DatasetsController { } datasets.orderBy(attribute, sortOrder); } else { - // users.orderBy('created_at', 'desc'); - datasets.orderBy('id', 'asc'); + // datasets.orderBy('id', 'asc'); + // Custom ordering to prioritize rejected_editor state + datasets.orderByRaw(` + CASE + WHEN server_state = 'rejected_reviewer' THEN 0 + ELSE 1 + END ASC, + id ASC + `); } // const users = await User.query().orderBy('login').paginate(page, limit); @@ -157,10 +188,16 @@ export default class DatasetsController { } } - public async approve({ request, inertia, response }: HttpContext) { + public async approve({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); + + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + // $dataset = Dataset::with('user:id,login')->findOrFail($id); - const dataset = await Dataset.findOrFail(id); + const dataset = await Dataset.query().where('id', id).where('editor_id', user.id).firstOrFail(); const validStates = ['editor_accepted', 'rejected_reviewer']; if (!validStates.includes(dataset.server_state)) { @@ -186,7 +223,7 @@ export default class DatasetsController { }); } - public async approveUpdate({ request, response }: HttpContext) { + public async approveUpdate({ request, response, auth }: HttpContext) { const approveDatasetSchema = vine.object({ reviewer_id: vine.number(), }); @@ -199,7 +236,11 @@ export default class DatasetsController { throw error; } const id = request.param('id'); - const dataset = await Dataset.findOrFail(id); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + const dataset = await Dataset.query().where('id', id).where('editor_id', user.id).firstOrFail(); const validStates = ['editor_accepted', 'rejected_reviewer']; if (!validStates.includes(dataset.server_state)) { @@ -217,6 +258,9 @@ export default class DatasetsController { if (dataset.reject_reviewer_note != null) { dataset.reject_reviewer_note = null; } + if (dataset.reject_editor_note != null) { + dataset.reject_editor_note = null; + } //save main and additional titles const reviewer_id = request.input('reviewer_id', null); @@ -227,10 +271,15 @@ export default class DatasetsController { } } - public async reject({ request, inertia, response }: HttpContext) { + public async reject({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } const dataset = await Dataset.query() .where('id', id) + .where('editor_id', user.id) // Ensure the user is the editor of the dataset // .preload('titles') // .preload('descriptions') .preload('user', (builder) => { @@ -255,77 +304,17 @@ export default class DatasetsController { }); } - // private async checkEmailDomain(email: string): Promise { - // const domain = email.split('@')[1]; - - // try { - // // Step 1: Check MX records for the domain - // const mxRecords = await resolveMx(domain); - // if (mxRecords.length === 0) { - // return false; // No MX records, can't send email - // } - - // // Sort MX records by priority - // mxRecords.sort((a, b) => a.priority - b.priority); - - // // Step 2: Attempt SMTP connection to the first available mail server - // const smtpServer = mxRecords[0].exchange; - - // return await this.checkMailboxExists(smtpServer, email); - // } catch (error) { - // console.error('Error during MX lookup or SMTP validation:', error); - // return false; - // } - // } - - //// Helper function to check if the mailbox exists using SMTP - // private async checkMailboxExists(smtpServer: string, email: string): Promise { - // return new Promise((resolve, reject) => { - // const socket = net.createConnection(25, smtpServer); - - // socket.on('connect', () => { - // socket.write(`HELO ${smtpServer}\r\n`); - // socket.write(`MAIL FROM: \r\n`); - // socket.write(`RCPT TO: <${email}>\r\n`); - // }); - - // socket.on('data', (data) => { - // const response = data.toString(); - // if (response.includes('250')) { - // // 250 is an SMTP success code - // socket.end(); - // resolve(true); // Email exists - // } else if (response.includes('550')) { - // // 550 means the mailbox doesn't exist - // socket.end(); - // resolve(false); // Email doesn't exist - // } - // }); - - // socket.on('error', (error) => { - // console.error('SMTP connection error:', error); - // socket.end(); - // resolve(false); - // }); - - // socket.on('end', () => { - // // SMTP connection closed - // }); - - // socket.setTimeout(5000, () => { - // // Timeout after 5 seconds - // socket.end(); - // resolve(false); // Assume email doesn't exist if no response - // }); - // }); - // } - public async rejectUpdate({ request, response, auth }: HttpContext) { const authUser = auth.user!; + + if (!authUser) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } const id = request.param('id'); const dataset = await Dataset.query() .where('id', id) + .where('editor_id', authUser.id) // Ensure the user is the editor of the dataset .preload('user', (builder) => { builder.select('id', 'login', 'email'); }) @@ -353,7 +342,7 @@ export default class DatasetsController { return response .flash( `Invalid server state. Dataset with id ${id} cannot be rejected. Datset has server state ${dataset.server_state}.`, - 'warning' + 'warning', ) .redirect() .toRoute('editor.dataset.list'); @@ -388,7 +377,9 @@ export default class DatasetsController { emailStatusMessage = ` A rejection email was successfully sent to ${dataset.user.email}.`; } catch (error) { logger.error(error); - return response.flash('Dataset has not been rejected due to an email error: ' + error.message, 'error').toRoute('editor.dataset.list'); + return response + .flash('Dataset has not been rejected due to an email error: ' + error.message, 'error') + .toRoute('editor.dataset.list'); } } else { emailStatusMessage = ` However, the email could not be sent because the submitter's email address (${dataset.user.email}) is not valid.`; @@ -404,11 +395,16 @@ export default class DatasetsController { .toRoute('editor.dataset.list'); } - public async publish({ request, inertia, response }: HttpContext) { + public async publish({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } const dataset = await Dataset.query() .where('id', id) + .where('editor_id', user.id) // Ensure the user is the editor of the dataset .preload('titles') .preload('authors') // .preload('persons', (builder) => { @@ -430,10 +426,14 @@ export default class DatasetsController { return inertia.render('Editor/Dataset/Publish', { dataset, + can: { + reject: await auth.user?.can(['dataset-editor-reject']), + publish: await auth.user?.can(['dataset-publish']), + }, }); } - public async publishUpdate({ request, response }: HttpContext) { + public async publishUpdate({ request, response, auth }: HttpContext) { const publishDatasetSchema = vine.object({ publisher_name: vine.string().trim(), }); @@ -445,7 +445,12 @@ export default class DatasetsController { throw error; } const id = request.param('id'); - const dataset = await Dataset.findOrFail(id); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + const dataset = await Dataset.query().where('id', id).where('editor_id', user.id).firstOrFail(); // let test = await Dataset.getMax('publish_id'); // const maxPublishId = await Database.from('documents').max('publish_id as max_publish_id').first(); @@ -471,10 +476,139 @@ export default class DatasetsController { } } - public async doiCreate({ request, inertia }: HttpContext) { + public async rejectToReviewer({ request, inertia, response, auth }: HttpContext) { + const id = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + const dataset = await Dataset.query() + .where('id', id) + .where('editor_id', user.id) // Ensure the user is the editor of the dataset + .preload('reviewer', (builder) => { + builder.select('id', 'login', 'email'); + }) + .firstOrFail(); + + const validStates = ['reviewed']; + if (!validStates.includes(dataset.server_state)) { + // session.flash('errors', 'Invalid server state!'); + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be rejected to the reviewer. Datset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('editor.dataset.list'); + } + + return inertia.render('Editor/Dataset/RejectToReviewer', { + dataset, + }); + } + + public async rejectToReviewerUpdate({ request, response, auth }: HttpContext) { + const authUser = auth.user!; + + if (!authUser) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + const id = request.param('id'); const dataset = await Dataset.query() .where('id', id) + .where('editor_id', authUser.id) // Ensure the user is the editor of the dataset + .preload('reviewer', (builder) => { + builder.select('id', 'login', 'email'); + }) + .firstOrFail(); + + const newSchema = vine.object({ + server_state: vine.string().trim(), + reject_editor_note: vine.string().trim().minLength(10).maxLength(500), + send_mail: vine.boolean().optional(), + }); + + try { + // await request.validate({ schema: newSchema }); + const validator = vine.compile(newSchema); + await request.validateUsing(validator); + } catch (error) { + // return response.badRequest(error.messages); + throw error; + } + + const validStates = ['reviewed']; + if (!validStates.includes(dataset.server_state)) { + // throw new Error('Invalid server state!'); + // return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back(); + return response + .flash( + `Invalid server state. Dataset with id ${id} cannot be rejected to reviewer. Datset has server state ${dataset.server_state}.`, + 'warning', + ) + .redirect() + .toRoute('editor.dataset.list'); + } + + dataset.server_state = 'rejected_to_reviewer'; + const rejectEditorNote = request.input('reject_editor_note', ''); + dataset.reject_editor_note = rejectEditorNote; + + // add logic for sending reject message + const sendMail = request.input('send_email', false); + // const validRecipientEmail = await this.checkEmailDomain('arno.kaimbacher@outlook.at'); + const validationResult = await validate({ + email: dataset.reviewer.email, + validateSMTP: false, + }); + const validRecipientEmail: boolean = validationResult.valid; + + await dataset.save(); + + let emailStatusMessage = ''; + if (sendMail == true) { + if (dataset.reviewer.email && validRecipientEmail) { + try { + await mail.send((message) => { + message.to(dataset.reviewer.email).subject('Dataset Rejection Notification').html(` +

Dear ${dataset.reviewer.login},

+

Your dataset with ID ${dataset.id} has been rejected.

+

Reason for rejection: ${rejectEditorNote}

+

Best regards,
Your Tethys editor: ${authUser.login}

+ `); + }); + emailStatusMessage = ` A rejection email was successfully sent to ${dataset.reviewer.email}.`; + } catch (error) { + logger.error(error); + return response + .flash('Dataset has not been rejected due to an email error: ' + error.message, 'error') + .toRoute('editor.dataset.list'); + } + } else { + emailStatusMessage = ` However, the email could not be sent because the submitter's email address (${dataset.reviewer.email}) is not valid.`; + } + } + + return response + .flash( + `You have successfully rejected dataset ${dataset.id} reviewed by ${dataset.reviewer.login}.${emailStatusMessage}`, + 'message', + ) + .toRoute('editor.dataset.list'); + } + + public async doiCreate({ request, inertia, auth, response }: HttpContext) { + const id = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + const dataset = await Dataset.query() + .where('id', id) + .where('editor_id', user.id) // Ensure the user is the editor of the dataset .preload('titles') .preload('descriptions') // .preload('identifier') @@ -485,61 +619,494 @@ export default class DatasetsController { }); } - public async doiStore({ request, response }: HttpContext) { + public async doiStore({ request, response, auth }: HttpContext) { const dataId = request.param('publish_id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // Load dataset with minimal required relationships const dataset = await Dataset.query() - // .preload('xmlCache') + .where('editor_id', user.id) // Ensure the user is the editor of the dataset .where('publish_id', dataId) .firstOrFail(); + + const prefix = process.env.DATACITE_PREFIX || ''; + const base_domain = process.env.BASE_DOMAIN || ''; + + // Generate DOI metadata XML const xmlMeta = (await Index.getDoiRegisterString(dataset)) as string; - let prefix = ''; - let base_domain = ''; - // const datacite_environment = process.env.DATACITE_ENVIRONMENT || 'debug'; - prefix = process.env.DATACITE_PREFIX || ''; - base_domain = process.env.BASE_DOMAIN || ''; + // Prepare DOI registration data + const doiValue = `${prefix}/tethys.${dataset.publish_id}`; //'10.21388/tethys.213' + const landingPageUrl = `https://doi.${getDomain(base_domain)}/${prefix}/tethys.${dataset.publish_id}`; //https://doi.dev.tethys.at/10.21388/tethys.213 - // register DOI: - const doiValue = prefix + '/tethys.' + dataset.publish_id; //'10.21388/tethys.213' - const landingPageUrl = 'https://doi.' + getDomain(base_domain) + '/' + prefix + '/tethys.' + dataset.publish_id; //https://doi.dev.tethys.at/10.21388/tethys.213 + // Register DOI with DataCite const doiClient = new DoiClient(); const dataciteResponse = await doiClient.registerDoi(doiValue, xmlMeta, landingPageUrl); - if (dataciteResponse?.status === 201) { - // if response OK 201; save the Identifier value into db - const doiIdentifier = new DatasetIdentifier(); - doiIdentifier.value = doiValue; - doiIdentifier.dataset_id = dataset.id; - doiIdentifier.type = 'doi'; - doiIdentifier.status = 'findable'; - // save modified date of datset for re-caching model in db an update the search index - dataset.server_date_modified = DateTime.now(); - - // save updated dataset to db an index to OpenSearch - try { - await dataset.related('identifier').save(doiIdentifier); - const index_name = 'tethys-records'; - await Index.indexDocument(dataset, index_name); - } catch (error) { - logger.error(`${__filename}: Indexing document ${dataset.id} failed: ${error.message}`); - // Log the error or handle it as needed - throw new HttpException(error.message); - } - return response.toRoute('editor.dataset.list').flash('message', 'You have successfully created a DOI for the dataset!'); - } else { + if (dataciteResponse?.status !== 201) { const message = `Unexpected DataCite MDS response code ${dataciteResponse?.status}`; - // Log the error or handle it as needed throw new DoiClientException(dataciteResponse?.status, message); } + + // DOI registration successful - persist and index + try { + // Save identifier + await this.persistDoiAndIndex(dataset, doiValue); + + return response.toRoute('editor.dataset.list').flash('message', 'You have successfully created a DOI for the dataset!'); + } catch (error) { + logger.error(`${__filename}: Failed to persist DOI and index dataset ${dataset.id}: ${error.message}`); + throw new HttpException(error.message); + } + // return response.toRoute('editor.dataset.list').flash('message', xmlMeta); } + /** + * Persist DOI identifier and update search index + * Handles cache invalidation to ensure fresh indexing + */ + private async persistDoiAndIndex(dataset: Dataset, doiValue: string): Promise { + // Create DOI identifier + const doiIdentifier = new DatasetIdentifier(); + doiIdentifier.value = doiValue; + doiIdentifier.dataset_id = dataset.id; + doiIdentifier.type = 'doi'; + doiIdentifier.status = 'findable'; + + // Save identifier (this will trigger database insert) + await dataset.related('identifier').save(doiIdentifier); + + // Update dataset modification timestamp to reflect the change + dataset.server_date_modified = DateTime.now(); + await dataset.save(); + + // Invalidate stale XML cache + await this.invalidateDatasetCache(dataset); + + // Reload dataset with fresh state for indexing + const freshDataset = await Dataset.query().where('id', dataset.id).preload('identifier').preload('xmlCache').firstOrFail(); + + // Index to OpenSearch with fresh data + const index_name = process.env.OPENSEARCH_INDEX || 'tethys-records'; + await Index.indexDocument(freshDataset, index_name); + + logger.info(`Successfully created DOI ${doiValue} and indexed dataset ${dataset.id}`); + } + + /** + * Invalidate XML cache for dataset + * Ensures fresh cache generation on next access + */ + private async invalidateDatasetCache(dataset: Dataset): Promise { + await dataset.load('xmlCache'); + + if (dataset.xmlCache) { + await dataset.xmlCache.delete(); + logger.debug(`Invalidated XML cache for dataset ${dataset.id}`); + } + } + public async show({}: HttpContext) {} - public async edit({}: HttpContext) {} + public async edit({ request, inertia, response, auth }: HttpContext) { + const id = request.param('id'); + + // Check if user is authenticated + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // Prefilter by both id AND editor_id to ensure user has permission to edit + const datasetQuery = Dataset.query().where('id', id).where('editor_id', user.id); + datasetQuery + .preload('titles', (query) => query.orderBy('id', 'asc')) + .preload('descriptions', (query) => query.orderBy('id', 'asc')) + .preload('coverage') + .preload('licenses') + .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc')) + .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc')) + // .preload('subjects') + .preload('subjects', (builder) => { + builder.orderBy('id', 'asc').withCount('datasets'); + }) + .preload('references') + .preload('files', (query) => { + query.orderBy('sort_order', 'asc'); // Sort by sort_order column + }); + + // This will throw 404 if editor_id does not match logged in user + const dataset = await datasetQuery.firstOrFail(); + const validStates = ['editor_accepted', 'rejected_reviewer']; + if (!validStates.includes(dataset.server_state)) { + // session.flash('errors', 'Invalid server state!'); + return response + .flash( + `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`, + 'warning', + ) + .toRoute('editor.dataset.list'); + } + + const titleTypes = Object.entries(TitleTypes) + .filter(([value]) => value !== 'Main') + .map(([key, value]) => ({ value: key, label: value })); + + const descriptionTypes = Object.entries(DescriptionTypes) + .filter(([value]) => value !== 'Abstract') + .map(([key, value]) => ({ value: key, label: value })); + + const languages = await Language.query().where('active', true).pluck('part1', 'part1'); + + // const contributorTypes = Config.get('enums.contributor_types'); + const contributorTypes = Object.entries(ContributorTypes).map(([key, value]) => ({ value: key, label: value })); + + // const nameTypes = Config.get('enums.name_types'); + const nameTypes = Object.entries(PersonNameTypes).map(([key, value]) => ({ value: key, label: value })); + + // const messages = await Database.table('messages') + // .pluck('help_text', 'metadata_element'); + + const projects = await Project.query().pluck('label', 'id'); + + const currentDate = new Date(); + const currentYear = currentDate.getFullYear(); + const years = Array.from({ length: currentYear - 1990 + 1 }, (_, index) => 1990 + index); + + const licenses = await License.query().select('id', 'name_long').where('active', 'true').pluck('name_long', 'id'); + // const userHasRoles = user.roles; + // const datasetHasLicenses = await dataset.related('licenses').query().pluck('id'); + // const checkeds = dataset.licenses.first().id; + + // const doctypes = { + // analysisdata: { label: 'Analysis', value: 'analysisdata' }, + // measurementdata: { label: 'Measurements', value: 'measurementdata' }, + // monitoring: 'Monitoring', + // remotesensing: 'Remote Sensing', + // gis: 'GIS', + // models: 'Models', + // mixedtype: 'Mixed Type', + // }; + + return inertia.render('Editor/Dataset/Edit', { + dataset, + titletypes: titleTypes, + descriptiontypes: descriptionTypes, + contributorTypes, + nameTypes, + languages, + // messages, + projects, + licenses, + // datasetHasLicenses: Object.keys(datasetHasLicenses).map((key) => datasetHasLicenses[key]), //convert object to array with license ids + // checkeds, + years, + // languages, + subjectTypes: SubjectTypes, + referenceIdentifierTypes: Object.entries(ReferenceIdentifierTypes).map(([key, value]) => ({ value: key, label: value })), + relationTypes: Object.entries(RelationTypes).map(([key, value]) => ({ value: key, label: value })), + doctypes: DatasetTypes, + }); + } + + public async update({ request, response, session, auth }: HttpContext) { + // Get the dataset id from the route parameter + const datasetId = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // Retrieve the dataset and load its existing files + const dataset = await Dataset.query().where('id', datasetId).where('editor_id', user.id).firstOrFail(); + await dataset.load('files'); + + let trx: TransactionClientContract | null = null; + try { + await request.validateUsing(updateEditorDatasetValidator); + trx = await db.transaction(); + // const user = (await User.find(auth.user?.id)) as User; + // await this.createDatasetAndAssociations(user, request, trx); + // const dataset = await Dataset.findOrFail(datasetId); + + // save the licenses + const licenses: number[] = request.input('licenses', []); + // await dataset.useTransaction(trx).related('licenses').sync(licenses); + await dataset.useTransaction(trx).related('licenses').sync(licenses); + + // save authors and contributors + await dataset.useTransaction(trx).related('authors').sync([]); + await dataset.useTransaction(trx).related('contributors').sync([]); + await savePersons(dataset, request.input('authors', []), 'author', trx); + await savePersons(dataset, request.input('contributors', []), 'contributor', trx); + + //save the titles: + const titles = request.input('titles', []); + // const savedTitles:Array = []; + for (const titleData of titles) { + if (titleData.id) { + const title = await Title.findOrFail(titleData.id); + title.value = titleData.value; + title.language = titleData.language; + title.type = titleData.type; + if (title.$isDirty) { + await title.useTransaction(trx).save(); + // await dataset.useTransaction(trx).related('titles').save(title); + // savedTitles.push(title); + } + } else { + const title = new Title(); + title.fill(titleData); + // savedTitles.push(title); + await dataset.useTransaction(trx).related('titles').save(title); + } + } + + // save the abstracts + const descriptions = request.input('descriptions', []); + // const savedTitles:Array<Title> = []; + for (const descriptionData of descriptions) { + if (descriptionData.id) { + const description = await Description.findOrFail(descriptionData.id); + description.value = descriptionData.value; + description.language = descriptionData.language; + description.type = descriptionData.type; + if (description.$isDirty) { + await description.useTransaction(trx).save(); + // await dataset.useTransaction(trx).related('titles').save(title); + // savedTitles.push(title); + } + } else { + const description = new Description(); + description.fill(descriptionData); + // savedTitles.push(title); + await dataset.useTransaction(trx).related('descriptions').save(description); + } + } + + // Process all subjects/keywords from the request + const subjects = request.input('subjects'); + for (const subjectData of subjects) { + // Case 1: Subject already exists in the database (has an ID) + if (subjectData.id) { + // Retrieve the existing subject + const existingSubject = await Subject.findOrFail(subjectData.id); + + // Update subject properties from the request data + existingSubject.value = subjectData.value; + existingSubject.type = subjectData.type; + existingSubject.external_key = subjectData.external_key; + + // Only save if there are actual changes + if (existingSubject.$isDirty) { + await existingSubject.save(); + } + + // Note: The relationship between dataset and subject is already established, + // so we don't need to attach it again + } + // Case 2: New subject being added (no ID) + else { + // Check if a subject with the same value and type already exists in the database + const subject = await Subject.firstOrNew({ value: subjectData.value, type: subjectData.type }, subjectData); + + if (subject.$isNew === true) { + // If it's a completely new subject, create and associate it with the dataset + await dataset.useTransaction(trx).related('subjects').save(subject); + } else { + // If the subject already exists, just create the relationship + await dataset.useTransaction(trx).related('subjects').attach([subject.id]); + } + } + } + + const subjectsToDelete = request.input('subjectsToDelete', []); + for (const subjectData of subjectsToDelete) { + if (subjectData.id) { + // const subject = await Subject.findOrFail(subjectData.id); + const subject = await Subject.query() + .where('id', subjectData.id) + .preload('datasets', (builder) => { + builder.orderBy('id', 'asc'); + }) + .withCount('datasets') + .firstOrFail(); + + // Check if the subject is used by multiple datasets + if (subject.$extras.datasets_count > 1) { + // If used by multiple datasets, just detach it from the current dataset + await dataset.useTransaction(trx).related('subjects').detach([subject.id]); + } else { + // If only used by this dataset, delete the subject completely + + await dataset.useTransaction(trx).related('subjects').detach([subject.id]); + await subject.useTransaction(trx).delete(); + } + } + } + + // Process references + const references = request.input('references', []); + // First, get existing references to determine which ones to update vs. create + const existingReferences = await dataset.related('references').query(); + const existingReferencesMap: Map<number, DatasetReference> = new Map(existingReferences.map((ref) => [ref.id, ref])); + + for (const referenceData of references) { + if (existingReferencesMap.has(referenceData.id) && referenceData.id) { + // Update existing reference + const reference = existingReferencesMap.get(referenceData.id); + if (reference) { + reference.merge(referenceData); + if (reference.$isDirty) { + await reference.useTransaction(trx).save(); + } + } + } else { + // Create new reference + const dataReference = new DatasetReference(); + dataReference.fill(referenceData); + await dataset.useTransaction(trx).related('references').save(dataReference); + } + } + + // Handle references to delete if provided + const referencesToDelete = request.input('referencesToDelete', []); + for (const referenceData of referencesToDelete) { + if (referenceData.id) { + const reference = await DatasetReference.findOrFail(referenceData.id); + await reference.useTransaction(trx).delete(); + } + } + + // save coverage + const coverageData = request.input('coverage'); + if (coverageData) { + if (coverageData.id) { + const coverage = await Coverage.findOrFail(coverageData.id); + coverage.merge(coverageData); + if (coverage.$isDirty) { + await coverage.useTransaction(trx).save(); + } + } + } + + const input = request.only(['project_id', 'embargo_date', 'language', 'type', 'creating_corporation']); + // dataset.type = request.input('type'); + dataset.merge(input); + dataset.server_date_modified = DateTime.now(); + // let test: boolean = dataset.$isDirty; + await dataset.useTransaction(trx).save(); + + await trx.commit(); + // console.log('Dataset has been updated successfully'); + + session.flash('message', 'Dataset has been updated successfully'); + // return response.redirect().toRoute('user.index'); + return response.redirect().toRoute('editor.dataset.edit', [dataset.id]); + } catch (error) { + if (trx !== null) { + await trx.rollback(); + } + console.error('Failed to update dataset and related models:', error); + // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` }); + throw error; + } + } + + public async categorize({ inertia, request, response, auth }: HttpContext) { + const id = request.param('id'); + // Check if user is authenticated + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + // Preload dataset and its "collections" relation + const dataset = await Dataset.query().where('id', id).where('editor_id', user.id).preload('collections').firstOrFail(); + const validStates = ['editor_accepted', 'rejected_reviewer']; + if (!validStates.includes(dataset.server_state)) { + // session.flash('errors', 'Invalid server state!'); + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('editor.dataset.list'); + } + + const collectionRoles = await CollectionRole.query() + .whereIn('name', ['ddc', 'ccs']) + .preload('collections', (coll: Collection) => { + // preloa only top level collection with noparent_id + coll.whereNull('parent_id').orderBy('number', 'asc'); + }) + .exec(); + + return inertia.render('Editor/Dataset/Category', { + collectionRoles: collectionRoles, + dataset: dataset, + relatedCollections: dataset.collections, + }); + } + + public async categorizeUpdate({ request, response, session, auth }: HttpContext) { + // Get the dataset id from the route parameter + const id = request.param('id'); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + // Retrieve the dataset and load its existing files + const dataset = await Dataset.query().preload('files').where('id', id).where('editor_id', user.id).firstOrFail(); + + const validStates = ['editor_accepted', 'rejected_reviewer']; + if (!validStates.includes(dataset.server_state)) { + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be categorized. Dataset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('editor.dataset.list'); + } + + let trx: TransactionClientContract | null = null; + try { + trx = await db.transaction(); + // const user = (await User.find(auth.user?.id)) as User; + // await this.createDatasetAndAssociations(user, request, trx); + + // Retrieve the selected collections from the request. + // This should be an array of collection ids. + const collections: number[] = request.input('collections', []); + + // Synchronize the dataset collections using the transaction. + await dataset.useTransaction(trx).related('collections').sync(collections); + + // Commit the transaction.await trx.commit() + await trx.commit(); + + // Redirect with a success flash message. + // return response.flash('success', 'Dataset collections updated successfully!').redirect().toRoute('dataset.list'); + + session.flash('message', 'Dataset collections updated successfully!'); + return response.redirect().toRoute('editor.dataset.list'); + } catch (error) { + if (trx !== null) { + await trx.rollback(); + } + console.error('Failed tocatgorize dataset collections:', error); + // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` }); + throw error; + } + } // public async update({}: HttpContextContract) {} - public async update({ response }: HttpContext) { + public async updateOpensearch({ response }: HttpContext) { const id = 273; //request.param('id'); const dataset = await Dataset.query().preload('xmlCache').where('id', id).firstOrFail(); // add xml elements @@ -655,6 +1222,30 @@ export default class DatasetsController { } } + public async download({ params, response }: HttpContext) { + const id = params.id; + // Find the file by ID + const file = await File.findOrFail(id); + // const filePath = await drive.use('local').getUrl('/'+ file.filePath) + const filePath = file.filePath; + const fileExt = file.filePath.split('.').pop() || ''; + + // Check if label already includes the extension + const fileName = file.label.toLowerCase().endsWith(`.${fileExt.toLowerCase()}`) ? file.label : `${file.label}.${fileExt}`; + + // Set the response headers and download the file + response + .header('Cache-Control', 'no-cache private') + .header('Content-Description', 'File Transfer') + .header('Content-Type', file.mime_type || 'application/octet-stream') + // .header('Content-Disposition', 'inline; filename=' + fileName) + .header('Content-Transfer-Encoding', 'binary') + .header('Access-Control-Allow-Origin', '*') + .header('Access-Control-Allow-Methods', 'GET'); + response.attachment(fileName); + return response.download(filePath); + } + public async destroy({}: HttpContext) {} private async createXmlRecord(dataset: Dataset, datasetNode: XMLBuilder) { @@ -664,19 +1255,18 @@ export default class DatasetsController { } } - private async getDatasetXmlDomNode(dataset: Dataset) { - const xmlModel = new XmlModel(dataset); + private async getDatasetXmlDomNode(dataset: Dataset): Promise<XMLBuilder | null> { + const serializer = new DatasetXmlSerializer(dataset).enableCaching().excludeEmptyFields(); // xmlModel.setModel(dataset); - xmlModel.excludeEmptyFields(); - xmlModel.caching = true; - // const cache = dataset.xmlCache ? dataset.xmlCache : null; - // dataset.load('xmlCache'); + + // Load existing cache if available + await dataset.load('xmlCache'); if (dataset.xmlCache) { - xmlModel.xmlCache = dataset.xmlCache; + serializer.setCache(dataset.xmlCache); } // return cache.getDomDocument(); - const domDocument: XMLBuilder | null = await xmlModel.getDomDocument(); - return domDocument; + const xmlDocument: XMLBuilder | null = await serializer.toXmlDocument(); + return xmlDocument; } } diff --git a/app/Controllers/Http/Oai/OaiController.ts b/app/Controllers/Http/Oai/OaiController.ts index 6048ca4..47d1708 100644 --- a/app/Controllers/Http/Oai/OaiController.ts +++ b/app/Controllers/Http/Oai/OaiController.ts @@ -15,18 +15,17 @@ import { OaiModelException, BadOaiModelException } from '#app/exceptions/OaiMode import Dataset from '#models/dataset'; import Collection from '#models/collection'; import { getDomain, preg_match } from '#app/utils/utility-functions'; -import XmlModel from '#app/Library/XmlModel'; +import DatasetXmlSerializer from '#app/Library/DatasetXmlSerializer'; import logger from '@adonisjs/core/services/logger'; import ResumptionToken from '#app/Library/Oai/ResumptionToken'; // import Config from '@ioc:Adonis/Core/Config'; -import config from '@adonisjs/core/services/config' +import config from '@adonisjs/core/services/config'; // import { inject } from '@adonisjs/fold'; -import { inject } from '@adonisjs/core' +import { inject } from '@adonisjs/core'; // import { TokenWorkerContract } from "MyApp/Models/TokenWorker"; import TokenWorkerContract from '#library/Oai/TokenWorkerContract'; import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model'; - interface XslTParameter { [key: string]: any; } @@ -35,12 +34,14 @@ interface Dictionary { [index: string]: string; } -interface ListParameter { +interface PagingParameter { cursor: number; - totalIds: number; + totalLength: number; start: number; - reldocIds: (number | null)[]; + nextDocIds: number[]; + activeWorkIds: number[]; metadataPrefix: string; + queryParams: Object; } @inject() @@ -49,6 +50,7 @@ export default class OaiController { private sampleRegEx = /^[A-Za-zäüÄÜß0-9\-_.!~]+$/; private xsltParameter: XslTParameter; + private firstPublishedDataset: Dataset | null; /** * Holds xml representation of document information to be processed. * @@ -57,7 +59,6 @@ export default class OaiController { private xml: XMLBuilder; private proc; - constructor(public tokenWorker: TokenWorkerContract) { // Load the XSLT file this.proc = readFileSync('public/assets2/datasetxml2oai.sef.json'); @@ -85,9 +86,9 @@ export default class OaiController { let earliestDateFromDb; // const oaiRequest: OaiParameter = request.body; try { - const firstPublishedDataset: Dataset | null = await Dataset.earliestPublicationDate(); - firstPublishedDataset != null && - (earliestDateFromDb = firstPublishedDataset.server_date_published.toFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")); + this.firstPublishedDataset = await Dataset.earliestPublicationDate(); + this.firstPublishedDataset != null && + (earliestDateFromDb = this.firstPublishedDataset.server_date_published.toFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")); this.xsltParameter['earliestDatestamp'] = earliestDateFromDb; // start the request await this.handleRequest(oaiRequest, request); @@ -162,22 +163,19 @@ export default class OaiController { } else if (verb == 'GetRecord') { await this.handleGetRecord(oaiRequest); } else if (verb == 'ListRecords') { - await this.handleListRecords(oaiRequest); + // Get browser fingerprint from the request: + const browserFingerprint = this.getBrowserFingerprint(request); + await this.handleListRecords(oaiRequest, browserFingerprint); } else if (verb == 'ListIdentifiers') { - await this.handleListIdentifiers(oaiRequest); + // Get browser fingerprint from the request: + const browserFingerprint = this.getBrowserFingerprint(request); + await this.handleListIdentifiers(oaiRequest, browserFingerprint); } else if (verb == 'ListSets') { await this.handleListSets(); } else { this.handleIllegalVerb(); } } else { - // // try { - // // console.log("Async code example.") - // const err = new PageNotFoundException("verb not found"); - // throw err; - // // } catch (error) { // manually catching - // // next(error); // passing to default middleware error handler - // // } throw new OaiModelException( StatusCodes.INTERNAL_SERVER_ERROR, 'The verb provided in the request is illegal.', @@ -187,11 +185,11 @@ export default class OaiController { } protected handleIdentify() { - const email = process.env.OAI_EMAIL || 'repository@geosphere.at'; - const repositoryName = 'Tethys RDR'; - const repIdentifier = 'tethys.at'; - const sampleIdentifier = 'oai:' + repIdentifier + ':1'; //$this->_configuration->getSampleIdentifier(); - + // Get configuration values from environment or a dedicated configuration service + const email = process.env.OAI_EMAIL ?? 'repository@geosphere.at'; + const repositoryName = process.env.OAI_REPOSITORY_NAME ?? 'Tethys RDR'; + const repIdentifier = process.env.OAI_REP_IDENTIFIER ?? 'tethys.at'; + const sampleIdentifier = `oai:${repIdentifier}:1`; // Dataset::earliestPublicationDate()->server_date_published->format('Y-m-d\TH:i:s\Z') : null; // earliestDateFromDb!= null && (this.xsltParameter['earliestDatestamp'] = earliestDateFromDb?.server_date_published); @@ -216,7 +214,7 @@ export default class OaiController { const sets: { [key: string]: string } = { 'open_access': 'Set for open access licenses', - 'openaire_data': "OpenAIRE", + 'openaire_data': 'OpenAIRE', 'doc-type:ResearchData': 'Set for document type ResearchData', ...(await this.getSetsForDatasetTypes()), ...(await this.getSetsForCollections()), @@ -234,7 +232,15 @@ export default class OaiController { const repIdentifier = 'tethys.at'; this.xsltParameter['repIdentifier'] = repIdentifier; + // Validate that required parameter exists early + if (!('identifier' in oaiRequest)) { + throw new BadOaiModelException('The prefix of the identifier argument is unknown.'); + } + + // Validate and extract the dataset identifier from the request const dataId = this.validateAndGetIdentifier(oaiRequest); + + // Retrieve dataset with associated XML cache and collection roles const dataset = await Dataset.query() .where('publish_id', dataId) .preload('xmlCache') @@ -251,59 +257,61 @@ export default class OaiController { ); } + // Validate and set the metadata prefix parameter const metadataPrefix = this.validateAndGetMetadataPrefix(oaiRequest); this.xsltParameter['oai_metadataPrefix'] = metadataPrefix; - // do not deliver datasets which are restricted by document state defined in deliveringStates + + // Ensure that the dataset is in an exportable state this.validateDatasetState(dataset); - // add xml elements + // Build the XML for the dataset record and add it to the root node const datasetNode = this.xml.root().ele('Datasets'); await this.createXmlRecord(dataset, datasetNode); } - protected async handleListIdentifiers(oaiRequest: Dictionary) { - !this.tokenWorker.isConnected && (await this.tokenWorker.connect()); + protected async handleListIdentifiers(oaiRequest: Dictionary, browserFingerprint: string) { + if (!this.tokenWorker.isConnected) { + await this.tokenWorker.connect(); + } const maxIdentifier: number = config.get('oai.max.listidentifiers', 100); - await this.handleLists(oaiRequest, maxIdentifier); + await this.handleLists(oaiRequest, maxIdentifier, browserFingerprint); } - protected async handleListRecords(oaiRequest: Dictionary) { - !this.tokenWorker.isConnected && (await this.tokenWorker.connect()); + protected async handleListRecords(oaiRequest: Dictionary, browserFingerprint: string) { + if (!this.tokenWorker.isConnected) { + await this.tokenWorker.connect(); + } const maxRecords: number = config.get('oai.max.listrecords', 100); - await this.handleLists(oaiRequest, maxRecords); + await this.handleLists(oaiRequest, maxRecords, browserFingerprint); } - private async handleLists(oaiRequest: Dictionary, maxRecords: number) { - maxRecords = maxRecords || 100; + private async handleLists(oaiRequest: Dictionary, maxRecords: number, browserFingerprint: string) { const repIdentifier = 'tethys.at'; this.xsltParameter['repIdentifier'] = repIdentifier; const datasetNode = this.xml.root().ele('Datasets'); - // list initialisation - const numWrapper: ListParameter = { + const paginationParams: PagingParameter = { cursor: 0, - totalIds: 0, + totalLength: 0, start: maxRecords + 1, - reldocIds: [], + nextDocIds: [], + activeWorkIds: [], metadataPrefix: '', + queryParams: {}, }; - // resumptionToken is defined if ('resumptionToken' in oaiRequest) { - await this.handleResumptionToken(oaiRequest, maxRecords, numWrapper); + await this.handleResumptionToken(oaiRequest, maxRecords, paginationParams); } else { - // no resumptionToken is given - await this.handleNoResumptionToken(oaiRequest, numWrapper); + await this.handleNoResumptionToken(oaiRequest, paginationParams, maxRecords); } - // handling of document ids - const restIds = numWrapper.reldocIds as number[]; - const workIds = restIds.splice(0, maxRecords) as number[]; // array_splice(restIds, 0, maxRecords); + const nextIds: number[] = paginationParams.nextDocIds; + const workIds: number[] = paginationParams.activeWorkIds; - // no records returned - if (workIds.length == 0) { + if (workIds.length === 0) { throw new OaiModelException( StatusCodes.INTERNAL_SERVER_ERROR, 'The combination of the given values results in an empty list.', @@ -311,169 +319,222 @@ export default class OaiController { ); } - const datasets: Dataset[] = await Dataset.query() + const datasets = await Dataset.query() .whereIn('publish_id', workIds) .preload('xmlCache') .preload('collections', (builder) => { builder.preload('collectionRole'); }) .orderBy('publish_id'); - for (const dataset of datasets) { await this.createXmlRecord(dataset, datasetNode); } - - // store the further Ids in a resumption-file - const countRestIds = restIds.length; //84 - if (countRestIds > 0) { - const token = new ResumptionToken(); - token.startPosition = numWrapper.start; //101 - token.totalIds = numWrapper.totalIds; //184 - token.documentIds = restIds; //101 -184 - token.metadataPrefix = numWrapper.metadataPrefix; - - // $tokenWorker->storeResumptionToken($token); - const res: string = await this.tokenWorker.set(token); - - // set parameters for the resumptionToken-node - // const res = token.ResumptionId; - this.setParamResumption(res, numWrapper.cursor, numWrapper.totalIds); - } + await this.setResumptionToken(nextIds, paginationParams, browserFingerprint); } - private async handleResumptionToken(oaiRequest: Dictionary, maxRecords: number, numWrapper: ListParameter) { - const resParam = oaiRequest['resumptionToken']; //e.g. "158886496600000" + private async handleNoResumptionToken(oaiRequest: Dictionary, paginationParams: PagingParameter, maxRecords: number) { + this.validateMetadataPrefix(oaiRequest, paginationParams); + const finder: ModelQueryBuilderContract<typeof Dataset, Dataset> = Dataset.query().whereIn( + 'server_state', + this.deliveringDocumentStates, + ); + this.applySetFilter(finder, oaiRequest); + this.applyDateFilters(finder, oaiRequest); + await this.fetchAndSetResults(finder, paginationParams, oaiRequest, maxRecords); + } + + private async fetchAndSetResults( + finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, + paginationParams: PagingParameter, + oaiRequest: Dictionary, + maxRecords: number, + ) { + const totalResult = await finder + .clone() + .count('* as total') + .first() + .then((res) => res?.$extras.total); + paginationParams.totalLength = Number(totalResult); + + const combinedRecords: Dataset[] = await finder + .select('publish_id') + .orderBy('publish_id') + .offset(0) + .limit(maxRecords * 2); + + paginationParams.activeWorkIds = combinedRecords.slice(0, 100).map((dat) => Number(dat.publish_id)); + paginationParams.nextDocIds = combinedRecords.slice(100).map((dat) => Number(dat.publish_id)); + + // No resumption token was used – set queryParams from the current oaiRequest + paginationParams.queryParams = { + ...oaiRequest, + deliveringStates: this.deliveringDocumentStates, + }; + + // paginationParams.totalLength = 230; + } + + private async handleResumptionToken(oaiRequest: Dictionary, maxRecords: number, paginationParams: PagingParameter) { + const resParam = oaiRequest['resumptionToken']; const token = await this.tokenWorker.get(resParam); if (!token) { throw new OaiModelException(StatusCodes.INTERNAL_SERVER_ERROR, 'cache is outdated.', OaiErrorCodes.BADRESUMPTIONTOKEN); } - numWrapper.cursor = token.startPosition - 1; //startet dann bei Index 10 - numWrapper.start = token.startPosition + maxRecords; - numWrapper.totalIds = token.totalIds; - numWrapper.reldocIds = token.documentIds; - numWrapper.metadataPrefix = token.metadataPrefix; + // this.setResumptionParameters(token, maxRecords, paginationParams); + paginationParams.cursor = token.startPosition - 1; + paginationParams.start = token.startPosition + maxRecords; + paginationParams.totalLength = token.totalIds; + paginationParams.activeWorkIds = token.documentIds; + paginationParams.metadataPrefix = token.metadataPrefix; + paginationParams.queryParams = token.queryParams; + this.xsltParameter['oai_metadataPrefix'] = token.metadataPrefix; - this.xsltParameter['oai_metadataPrefix'] = numWrapper.metadataPrefix; + const finder = this.buildDatasetQueryViaToken(token); + const nextRecords: Dataset[] = await this.fetchNextRecords(finder, token, maxRecords); + paginationParams.nextDocIds = nextRecords.map((dat) => Number(dat.publish_id)); } - private async handleNoResumptionToken(oaiRequest: Dictionary, numWrapper: ListParameter) { - // no resumptionToken is given - if ('metadataPrefix' in oaiRequest) { - numWrapper.metadataPrefix = oaiRequest['metadataPrefix']; - } else { + private async setResumptionToken(nextIds: number[], paginationParams: PagingParameter, browserFingerprint: string) { + const countRestIds = nextIds.length; + if (countRestIds > 0) { + // const token = this.createResumptionToken(paginationParams, nextIds); + const token = new ResumptionToken(); + token.startPosition = paginationParams.start; + token.totalIds = paginationParams.totalLength; + token.documentIds = nextIds; + token.metadataPrefix = paginationParams.metadataPrefix; + token.queryParams = paginationParams.queryParams; + const res: string = await this.tokenWorker.set(token, browserFingerprint); + this.setParamResumption(res, paginationParams.cursor, paginationParams.totalLength); + } + } + + private buildDatasetQueryViaToken(token: ResumptionToken) { + const finder = Dataset.query(); + const originalQuery = token.queryParams || {}; + const deliveringStates = originalQuery.deliveringStates || this.deliveringDocumentStates; + + finder.whereIn('server_state', deliveringStates); + this.applySetFilter(finder, originalQuery); + this.applyDateFilters(finder, originalQuery); + + return finder; + } + + private async fetchNextRecords(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, token: ResumptionToken, maxRecords: number) { + return finder + .select('publish_id') + .orderBy('publish_id') + .offset(token.startPosition - 1 + maxRecords) + .limit(100); + } + + private validateMetadataPrefix(oaiRequest: Dictionary, paginationParams: PagingParameter) { + if (!('metadataPrefix' in oaiRequest)) { throw new OaiModelException( StatusCodes.INTERNAL_SERVER_ERROR, 'The prefix of the metadata argument is unknown.', OaiErrorCodes.BADARGUMENT, ); } - this.xsltParameter['oai_metadataPrefix'] = numWrapper.metadataPrefix; + paginationParams.metadataPrefix = oaiRequest['metadataPrefix']; + this.xsltParameter['oai_metadataPrefix'] = paginationParams.metadataPrefix; + } - let finder: ModelQueryBuilderContract<typeof Dataset, Dataset> = Dataset.query(); - // add server state restrictions - finder.whereIn('server_state', this.deliveringDocumentStates); - if ('set' in oaiRequest) { - const set = oaiRequest['set'] as string; - const setArray = set.split(':'); + private applySetFilter(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, queryParams: any) { + if ('set' in queryParams) { + const [setType, setValue] = queryParams['set'].split(':'); - if (setArray[0] == 'data-type') { - if (setArray.length == 2 && setArray[1]) { - finder.where('type', setArray[1]); - } - } else if (setArray[0] == 'open_access') { - const openAccessLicences = ['CC-BY-4.0', 'CC-BY-SA-4.0']; - finder.andWhereHas('licenses', (query) => { - query.whereIn('name', openAccessLicences); - }); - } else if (setArray[0] == 'ddc') { - if (setArray.length == 2 && setArray[1] != '') { - finder.andWhereHas('collections', (query) => { - query.where('number', setArray[1]); + switch (setType) { + case 'data-type': + setValue && finder.where('type', setValue); + break; + case 'open_access': + finder.andWhereHas('licenses', (query) => { + query.whereIn('name', ['CC-BY-4.0', 'CC-BY-SA-4.0']); }); - } + break; + case 'ddc': + setValue && + finder.andWhereHas('collections', (query) => { + query.where('number', setValue); + }); + break; } } + } - // const timeZone = "Europe/Vienna"; // Canonical time zone name - // &from=2020-09-03&until2020-09-03 - // &from=2020-09-11&until=2021-05-11 - if ('from' in oaiRequest && 'until' in oaiRequest) { - const from = oaiRequest['from'] as string; - let fromDate = dayjs(from); //.tz(timeZone); - const until = oaiRequest['until'] as string; - let untilDate = dayjs(until); //.tz(timeZone); - if (!fromDate.isValid() || !untilDate.isValid()) { - throw new OaiModelException(StatusCodes.INTERNAL_SERVER_ERROR, 'Date Parameter is not valid.', OaiErrorCodes.BADARGUMENT); - } - fromDate = dayjs.tz(from, 'Europe/Vienna'); - untilDate = dayjs.tz(until, 'Europe/Vienna'); + private applyDateFilters(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, queryParams: any) { + const { from, until } = queryParams; - if (from.length != until.length) { - throw new OaiModelException( - StatusCodes.INTERNAL_SERVER_ERROR, - 'The request has different granularities for the from and until parameters.', - OaiErrorCodes.BADARGUMENT, - ); - } - fromDate.hour() == 0 && (fromDate = fromDate.startOf('day')); - untilDate.hour() == 0 && (untilDate = untilDate.endOf('day')); + if (from && until) { + this.handleFromUntilFilter(finder, from, until); + } else if (from) { + this.handleFromFilter(finder, from); + } else if (until) { + this.handleUntilFilter(finder, until); + } + } - finder.whereBetween('server_date_published', [fromDate.format('YYYY-MM-DD HH:mm:ss'), untilDate.format('YYYY-MM-DD HH:mm:ss')]); - } else if ('from' in oaiRequest && !('until' in oaiRequest)) { - const from = oaiRequest['from'] as string; - let fromDate = dayjs(from); - if (!fromDate.isValid()) { - throw new OaiModelException( - StatusCodes.INTERNAL_SERVER_ERROR, - 'From date parameter is not valid.', - OaiErrorCodes.BADARGUMENT, - ); - } - fromDate = dayjs.tz(from, 'Europe/Vienna'); - fromDate.hour() == 0 && (fromDate = fromDate.startOf('day')); + private handleFromUntilFilter(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, from: string, until: string) { + const fromDate = this.parseDateWithValidation(from, 'From'); + const untilDate = this.parseDateWithValidation(until, 'Until'); - const now = dayjs(); - if (fromDate.isAfter(now)) { - throw new OaiModelException( - StatusCodes.INTERNAL_SERVER_ERROR, - 'Given from date is greater than now. The given values results in an empty list.', - OaiErrorCodes.NORECORDSMATCH, - ); - } else { - finder.andWhere('server_date_published', '>=', fromDate.format('YYYY-MM-DD HH:mm:ss')); - } - } else if (!('from' in oaiRequest) && 'until' in oaiRequest) { - const until = oaiRequest['until'] as string; - let untilDate = dayjs(until); - if (!untilDate.isValid()) { - throw new OaiModelException( - StatusCodes.INTERNAL_SERVER_ERROR, - 'Until date parameter is not valid.', - OaiErrorCodes.BADARGUMENT, - ); - } - untilDate = dayjs.tz(until, 'Europe/Vienna'); - untilDate.hour() == 0 && (untilDate = untilDate.endOf('day')); - - const firstPublishedDataset: Dataset = (await Dataset.earliestPublicationDate()) as Dataset; - const earliestPublicationDate = dayjs(firstPublishedDataset.server_date_published.toISO()); //format("YYYY-MM-DDThh:mm:ss[Z]")); - if (earliestPublicationDate.isAfter(untilDate)) { - throw new OaiModelException( - StatusCodes.INTERNAL_SERVER_ERROR, - `earliestDatestamp is greater than given until date. - The given values results in an empty list.`, - OaiErrorCodes.NORECORDSMATCH, - ); - } else { - finder.andWhere('server_date_published', '<=', untilDate.format('YYYY-MM-DD HH:mm:ss')); - } + if (from.length !== until.length) { + throw new OaiModelException( + StatusCodes.INTERNAL_SERVER_ERROR, + 'The request has different granularities for the from and until parameters.', + OaiErrorCodes.BADARGUMENT, + ); } - let reldocIdsDocs = await finder.select('publish_id').orderBy('publish_id'); - numWrapper.reldocIds = reldocIdsDocs.map((dat) => dat.publish_id); - numWrapper.totalIds = numWrapper.reldocIds.length; //212 + finder.whereBetween('server_date_published', [fromDate.format('YYYY-MM-DD HH:mm:ss'), untilDate.format('YYYY-MM-DD HH:mm:ss')]); + } + + private handleFromFilter(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, from: string) { + const fromDate = this.parseDateWithValidation(from, 'From'); + const now = dayjs(); + + if (fromDate.isAfter(now)) { + throw new OaiModelException( + StatusCodes.INTERNAL_SERVER_ERROR, + 'Given from date is greater than now. The given values results in an empty list.', + OaiErrorCodes.NORECORDSMATCH, + ); + } + + finder.andWhere('server_date_published', '>=', fromDate.format('YYYY-MM-DD HH:mm:ss')); + } + + private handleUntilFilter(finder: ModelQueryBuilderContract<typeof Dataset, Dataset>, until: string) { + const untilDate = this.parseDateWithValidation(until, 'Until'); + + const earliestPublicationDate = dayjs(this.firstPublishedDataset?.server_date_published.toISO()); + + if (earliestPublicationDate.isAfter(untilDate)) { + throw new OaiModelException( + StatusCodes.INTERNAL_SERVER_ERROR, + 'earliestDatestamp is greater than given until date. The given values results in an empty list.', + OaiErrorCodes.NORECORDSMATCH, + ); + } + + finder.andWhere('server_date_published', '<=', untilDate.format('YYYY-MM-DD HH:mm:ss')); + } + + private parseDateWithValidation(dateStr: string, label: string) { + let date = dayjs(dateStr); + if (!date.isValid()) { + throw new OaiModelException( + StatusCodes.INTERNAL_SERVER_ERROR, + `${label} date parameter is not valid.`, + OaiErrorCodes.BADARGUMENT, + ); + } + date = dayjs.tz(dateStr, 'Europe/Vienna'); + return date.hour() === 0 ? (label === 'From' ? date.startOf('day') : date.endOf('day')) : date; } private setParamResumption(res: string, cursor: number, totalIds: number) { @@ -545,19 +606,17 @@ export default class OaiController { } private async getDatasetXmlDomNode(dataset: Dataset) { - const xmlModel = new XmlModel(dataset); - // xmlModel.setModel(dataset); - xmlModel.excludeEmptyFields(); - xmlModel.caching = true; + const serializer = new DatasetXmlSerializer(dataset).enableCaching().excludeEmptyFields(); + // const cache = dataset.xmlCache ? dataset.xmlCache : null; // dataset.load('xmlCache'); if (dataset.xmlCache) { - xmlModel.xmlCache = dataset.xmlCache; + serializer.setCache(dataset.xmlCache); } - // return cache.getDomDocument(); - const domDocument: XMLBuilder | null = await xmlModel.getDomDocument(); - return domDocument; + // return cache.toXmlDocument(); + const xmlDocument: XMLBuilder | null = await serializer.toXmlDocument(); + return xmlDocument; } private addSpecInformation(domNode: XMLBuilder, information: string) { @@ -641,4 +700,30 @@ export default class OaiController { this.xsltParameter['oai_error_code'] = 'badVerb'; this.xsltParameter['oai_error_message'] = 'The verb provided in the request is illegal.'; } + + /** + * Helper method to build a browser fingerprint by combining: + * - User-Agent header, + * - the IP address, + * - Accept-Language header, + * - current timestamp rounded to the hour. + * + * Every new hour, this will return a different fingerprint. + */ + private getBrowserFingerprint(request: Request): string { + const userAgent = request.header('user-agent') || 'unknown'; + // Check for X-Forwarded-For header to use the client IP from the proxy if available. + const xForwardedFor = request.header('x-forwarded-for'); + let ip = request.ip(); + // console.log(ip); + if (xForwardedFor) { + // X-Forwarded-For may contain a comma-separated list of IPs; the first one is the client IP. + ip = xForwardedFor.split(',')[0].trim(); + // console.log('xforwardedfor ip' + ip); + } + const locale = request.header('accept-language') || 'default'; + // Round the current time to the start of the hour. + const timestampHour = dayjs().startOf('hour').format('YYYY-MM-DDTHH'); + return `${userAgent}-${ip}-${locale}-${timestampHour}`; + } } diff --git a/app/Controllers/Http/Reviewer/DatasetController.ts b/app/Controllers/Http/Reviewer/DatasetController.ts index 66600f4..27f9b46 100644 --- a/app/Controllers/Http/Reviewer/DatasetController.ts +++ b/app/Controllers/Http/Reviewer/DatasetController.ts @@ -9,6 +9,7 @@ import vine from '@vinejs/vine'; import mail from '@adonisjs/mail/services/main'; import logger from '@adonisjs/core/services/logger'; import { validate } from 'deep-email-validator'; +import File from '#models/file'; interface Dictionary { [index: string]: string; @@ -38,13 +39,21 @@ export default class DatasetsController { } datasets.orderBy(attribute, sortOrder); } else { - // users.orderBy('created_at', 'desc'); - datasets.orderBy('id', 'asc'); + // datasets.orderBy('id', 'asc'); + // Custom ordering to prioritize rejected_editor state + datasets.orderByRaw(` + CASE + WHEN server_state = 'rejected_to_reviewer' THEN 0 + ELSE 1 + END ASC, + id ASC + `); } // const users = await User.query().orderBy('login').paginate(page, limit); const myDatasets = await datasets - .where('server_state', 'approved') + // .where('server_state', 'approved') + .whereIn('server_state', ['approved', 'rejected_to_reviewer']) .where('reviewer_id', user.id) .preload('titles') @@ -62,7 +71,51 @@ export default class DatasetsController { }); } - public async review({ request, inertia, response }: HttpContext) { + public async review({ request, inertia, response, auth }: HttpContext) { + const id = request.param('id'); + const datasetQuery = Dataset.query().where('id', id); + + datasetQuery + .preload('titles', (query) => query.orderBy('id', 'asc')) + .preload('descriptions', (query) => query.orderBy('id', 'asc')) + .preload('coverage') + .preload('licenses') + .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc')) + .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc')) + // .preload('subjects') + .preload('subjects', (builder) => { + builder.orderBy('id', 'asc').withCount('datasets'); + }) + .preload('references') + .preload('project') + .preload('files', (query) => { + query.orderBy('sort_order', 'asc'); // Sort by sort_order column + }); + + const dataset = await datasetQuery.firstOrFail(); + + const validStates = ['approved', 'rejected_to_reviewer']; + if (!validStates.includes(dataset.server_state)) { + // session.flash('errors', 'Invalid server state!'); + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be reviewed. Datset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('reviewer.dataset.list'); + } + + return inertia.render('Reviewer/Dataset/Review', { + dataset, + can: { + review: await auth.user?.can(['dataset-review']), + reject: await auth.user?.can(['dataset-review-reject']), + }, + }); + } + + public async review_old({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); const dataset = await Dataset.query() .where('id', id) @@ -158,6 +211,10 @@ export default class DatasetsController { return inertia.render('Reviewer/Dataset/Review', { dataset, fields: fields, + can: { + review: await auth.user?.can(['dataset-review']), + reject: await auth.user?.can(['dataset-review-reject']), + }, }); } @@ -166,7 +223,7 @@ export default class DatasetsController { // const { id } = params; const dataset = await Dataset.findOrFail(id); - const validStates = ['approved']; + const validStates = ['approved', 'rejected_to_reviewer']; if (!validStates.includes(dataset.server_state)) { // throw new Error('Invalid server state!'); // return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back(); @@ -180,6 +237,10 @@ export default class DatasetsController { } dataset.server_state = 'reviewed'; + // if editor has rejected to reviewer: + if (dataset.reject_editor_note != null) { + dataset.reject_editor_note = null; + } try { // await dataset.related('editor').associate(user); // speichert schon ab @@ -203,7 +264,7 @@ export default class DatasetsController { }) .firstOrFail(); - const validStates = ['approved']; + const validStates = ['approved', 'rejected_to_reviewer']; if (!validStates.includes(dataset.server_state)) { // session.flash('errors', 'Invalid server state!'); return response @@ -250,12 +311,12 @@ export default class DatasetsController { throw error; } - const validStates = ['approved']; + const validStates = ['approved', 'rejected_to_reviewer']; if (!validStates.includes(dataset.server_state)) { // throw new Error('Invalid server state!'); // return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back(); return response - .flash( + .flash( `Invalid server state. Dataset with id ${id} cannot be rejected. Datset has server state ${dataset.server_state}.`, 'warning', ) @@ -276,7 +337,7 @@ export default class DatasetsController { validateSMTP: false, }); const validRecipientEmail: boolean = validationResult.valid; - let emailStatusMessage = ''; + // let emailStatusMessage = ''; if (sendMail == true) { if (dataset.editor.email && validRecipientEmail) { @@ -289,7 +350,7 @@ export default class DatasetsController { <p>Best regards,<br>Your Tethys reviewer: ${authUser.login}</p> `); }); - emailStatusMessage = ` A rejection email was successfully sent to ${dataset.editor.email}.`; + // emailStatusMessage = ` A rejection email was successfully sent to ${dataset.editor.email}.`; } catch (error) { logger.error(error); return response @@ -297,7 +358,7 @@ export default class DatasetsController { .toRoute('reviewer.dataset.list'); } } else { - emailStatusMessage = ` However, the email could not be sent because the editor's email address (${dataset.editor.email}) is not valid.`; + // emailStatusMessage = ` However, the email could not be sent because the editor's email address (${dataset.editor.email}) is not valid.`; } } @@ -307,4 +368,41 @@ export default class DatasetsController { .toRoute('reviewer.dataset.list') .flash(`You have rejected dataset ${dataset.id}! to editor ${dataset.editor.login}`, 'message'); } + + // public async download({ params, response }: HttpContext) { + // const id = params.id; + // // Find the file by ID + // const file = await File.findOrFail(id); + // // const filePath = await drive.use('local').getUrl('/'+ file.filePath) + // const filePath = file.filePath; + // const fileExt = file.filePath.split('.').pop() || ''; + // // Set the response headers and download the file + // response.header('Content-Type', file.mime_type || 'application/octet-stream'); + // response.attachment(`${file.label}.${fileExt}`); + // return response.download(filePath); + // } + + public async download({ params, response }: HttpContext) { + const id = params.id; + // Find the file by ID + const file = await File.findOrFail(id); + // const filePath = await drive.use('local').getUrl('/'+ file.filePath) + const filePath = file.filePath; + const fileExt = file.filePath.split('.').pop() || ''; + + // Check if label already includes the extension + const fileName = file.label.toLowerCase().endsWith(`.${fileExt.toLowerCase()}`) ? file.label : `${file.label}.${fileExt}`; + + // Set the response headers and download the file + response + .header('Cache-Control', 'no-cache private') + .header('Content-Description', 'File Transfer') + .header('Content-Type', file.mime_type || 'application/octet-stream') + // .header('Content-Disposition', 'inline; filename=' + fileName) + .header('Content-Transfer-Encoding', 'binary') + .header('Access-Control-Allow-Origin', '*') + .header('Access-Control-Allow-Methods', 'GET'); + response.attachment(fileName); + return response.download(filePath); + } } diff --git a/app/Controllers/Http/Submitter/DatasetController.ts b/app/Controllers/Http/Submitter/DatasetController.ts index 41a5733..d666e6f 100644 --- a/app/Controllers/Http/Submitter/DatasetController.ts +++ b/app/Controllers/Http/Submitter/DatasetController.ts @@ -8,6 +8,7 @@ import Description from '#models/description'; import Language from '#models/language'; import Coverage from '#models/coverage'; import Collection from '#models/collection'; +import CollectionRole from '#models/collection_role'; import dayjs from 'dayjs'; import Person from '#models/person'; import db from '@adonisjs/lucid/services/db'; @@ -28,21 +29,30 @@ import { } from '#contracts/enums'; import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model'; import DatasetReference from '#models/dataset_reference'; -import { cuid } from '@adonisjs/core/helpers'; import File from '#models/file'; import ClamScan from 'clamscan'; -// import { ValidationException } from '@adonisjs/validator'; -// import Drive from '@ioc:Adonis/Core/Drive'; -import drive from '#services/drive'; +import drive from '@adonisjs/drive/services/main'; +import path from 'path'; import { Exception } from '@adonisjs/core/exceptions'; import { MultipartFile } from '@adonisjs/core/types/bodyparser'; import * as crypto from 'crypto'; +import { pipeline } from 'node:stream/promises'; +import { createWriteStream } from 'node:fs'; +import type { Multipart } from '@adonisjs/bodyparser'; +import * as fs from 'fs'; +import { parseBytesSize, getConfigFor, getTmpPath, formatBytes } from '#app/utils/utility-functions'; + interface Dictionary { [index: string]: string; } import vine, { SimpleMessagesProvider, errors } from '@vinejs/vine'; export default class DatasetController { + /** + * Bodyparser config + */ + // config: BodyParserConfig = config.get('bodyparser'); + public async index({ auth, request, inertia }: HttpContext) { const user = (await User.find(auth.user?.id)) as User; const page = request.input('page', 1); @@ -66,8 +76,16 @@ export default class DatasetController { } datasets.orderBy(attribute, sortOrder); } else { - // users.orderBy('created_at', 'desc'); - datasets.orderBy('id', 'asc'); + // datasets.orderBy('id', 'asc'); + // Custom ordering to prioritize rejected_editor state + datasets.orderByRaw(` + CASE + WHEN server_state = 'rejected_editor' THEN 0 + WHEN server_state = 'rejected_reviewer' THEN 1 + ELSE 2 + END ASC, + id ASC + `); } // const results = await Database @@ -87,6 +105,7 @@ export default class DatasetController { 'reviewed', 'rejected_editor', 'rejected_reviewer', + 'rejected_to_reviewer', ]) .where('account_id', user.id) .preload('titles') @@ -188,7 +207,8 @@ export default class DatasetController { .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(2) + .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }), descriptions: vine .array( vine.object({ @@ -202,7 +222,8 @@ export default class DatasetController { .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(1), + .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }), authors: vine .array( vine.object({ @@ -213,8 +234,9 @@ export default class DatasetController { .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), }), ) .minLength(1) @@ -229,8 +251,9 @@ export default class DatasetController { .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), }), ) @@ -277,7 +300,8 @@ export default class DatasetController { .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(2) + .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }), descriptions: vine .array( vine.object({ @@ -291,7 +315,8 @@ export default class DatasetController { .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(1), + .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }), authors: vine .array( vine.object({ @@ -302,8 +327,9 @@ export default class DatasetController { .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), }), ) .minLength(1) @@ -318,8 +344,9 @@ export default class DatasetController { .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), }), ) @@ -363,7 +390,8 @@ export default class DatasetController { references: vine .array( vine.object({ - value: vine.string().trim().minLength(3).maxLength(255), + // value: vine.string().trim().minLength(3).maxLength(255), + value: vine.string().trim().minLength(3).maxLength(255).validateReference({ typeField: 'type' }), type: vine.enum(Object.values(ReferenceIdentifierTypes)), relation: vine.enum(Object.values(RelationTypes)), label: vine.string().trim().minLength(2).maxLength(255), @@ -398,21 +426,99 @@ export default class DatasetController { } public async store({ auth, request, response, session }: HttpContext) { - // node ace make:validator CreateDataset + // At the top of the store() method, declare an array to hold temporary file paths + const uploadedTmpFiles: string[] = []; + // Aggregated limit example (adjust as needed) + const multipartConfig = getConfigFor('multipart'); + const aggregatedLimit = multipartConfig.limit ? parseBytesSize(multipartConfig.limit) : 100 * 1024 * 1024; + // const aggregatedLimit = 200 * 1024 * 1024; + let totalUploadedSize = 0; + + // // Helper function to format bytes as human-readable text + // function formatBytes(bytes: number): string { + // if (bytes === 0) return '0 Bytes'; + // const k = 1024; + // const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + // const i = Math.floor(Math.log(bytes) / Math.log(k)); + // return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; + // } + // const enabledExtensions = await this.getEnabledExtensions(); + const multipart: Multipart = request.multipart; + + multipart.onFile('files', { deferValidations: true }, async (part) => { + // Attach an individual file size accumulator if needed + let fileUploadedSize = 0; + + // Simply accumulate the size in on('data') without performing the expensive check per chunk + part.on('data', (chunk) => { + // reporter(chunk); + // Increase counters using the chunk length + fileUploadedSize += chunk.length; + }); + + // After the file is completely read, update the global counter and check aggregated limit + part.on('end', () => { + totalUploadedSize += fileUploadedSize; + part.file.size = fileUploadedSize; + // Record the temporary file path + if (part.file.tmpPath) { + uploadedTmpFiles.push(part.file.tmpPath); + } + + if (totalUploadedSize > aggregatedLimit) { + // Clean up all temporary files if aggregate limit is exceeded + uploadedTmpFiles.forEach((tmpPath) => { + try { + fs.unlinkSync(tmpPath); + } catch (cleanupError) { + console.error('Error cleaning up temporary file:', cleanupError); + } + }); + const error = new errors.E_VALIDATION_ERROR({ + 'upload error': `Aggregated upload limit of ${formatBytes(aggregatedLimit)} exceeded. The total size of files being uploaded would exceed the limit.`, + }); + request.multipart.abort(error); + } + }); + + part.on('error', (error) => { + // fileUploadError = error; + request.multipart.abort(error); + }); + + // await pipeline(part, createWriteStream(filePath)); + // return { filePath }; + // Process file with error handling + try { + // Extract extension from the client file name, e.g. "Tethys 5 - Ampflwang_dataset.zip" + const ext = path.extname(part.file.clientName).replace('.', ''); + // Attach the extracted extension to the file object for later use + part.file.extname = ext; + + // part.file.sortOrder = part.file.sortOrder; + + const tmpPath = getTmpPath(multipartConfig); + (part.file as any).tmpPath = tmpPath; + + const writeStream = createWriteStream(tmpPath); + await pipeline(part, writeStream); + } catch (error) { + request.multipart.abort(new errors.E_VALIDATION_ERROR({ 'upload error': error.message })); + } + }); + try { - // Step 2 - Validate request body against the schema - // await request.validate({ schema: newDatasetSchema, messages: this.messages }); - // await request.validate(CreateDatasetValidator); - await request.validateUsing(createDatasetValidator); - // console.log({ payload }); + await multipart.process(); + // // Instead of letting an error abort the controller, check if any error occurred } catch (error) { - // Step 3 - Handle errors - // return response.badRequest(error.messages); - throw error; + // This is where you'd expect to catch any errors. + session.flash('errors', error.messages); + return response.redirect().back(); } let trx: TransactionClientContract | null = null; try { + await request.validateUsing(createDatasetValidator); trx = await db.transaction(); const user = (await User.find(auth.user?.id)) as User; @@ -421,6 +527,14 @@ export default class DatasetController { await trx.commit(); console.log('Dataset and related models created successfully'); } catch (error) { + // Clean up temporary files if validation or later steps fail + uploadedTmpFiles.forEach((tmpPath) => { + try { + fs.unlinkSync(tmpPath); + } catch (cleanupError) { + console.error('Error cleaning up temporary file:', cleanupError); + } + }); if (trx !== null) { await trx.rollback(); } @@ -433,14 +547,19 @@ export default class DatasetController { return response.redirect().toRoute('dataset.list'); // return response.redirect().back(); } - - private async createDatasetAndAssociations(user: User, request: HttpContext['request'], trx: TransactionClientContract) { + private async createDatasetAndAssociations( + user: User, + request: HttpContext['request'], + trx: TransactionClientContract, + // uploadedFiles: Array<MultipartFile>, + ) { // Create a new instance of the Dataset model: const dataset = new Dataset(); dataset.type = request.input('type'); dataset.creating_corporation = request.input('creating_corporation'); dataset.language = request.input('language'); dataset.embargo_date = request.input('embargo_date'); + dataset.project_id = request.input('project_id'); //await dataset.related('user').associate(user); // speichert schon ab // Dataset.$getRelation('user').boot(); // Dataset.$getRelation('user').setRelated(dataset, user); @@ -498,7 +617,7 @@ export default class DatasetController { } // save collection - const collection: Collection | null = await Collection.query().where('id', 21).first(); + const collection: Collection | null = await Collection.query().where('id', 594).first(); collection && (await dataset.useTransaction(trx).related('collections').attach([collection.id])); // save coverage @@ -531,18 +650,25 @@ export default class DatasetController { const fileName = this.generateFilename(file.extname as string); const mimeType = file.headers['content-type'] || 'application/octet-stream'; // Fallback to a default MIME type const datasetFolder = `files/${dataset.id}`; + const datasetFullPath = path.join(`${datasetFolder}`, fileName); // const size = file.size; - await file.move(drive.makePath(datasetFolder), { + // await file.move(drive.makePath(datasetFolder), { + // name: fileName, + // overwrite: true, // overwrite in case of conflict + // }); + await file.moveToDisk(datasetFullPath, 'local', { name: fileName, overwrite: true, // overwrite in case of conflict + disk: 'local', }); + // save file metadata into db const newFile = new File(); newFile.pathName = `${datasetFolder}/${fileName}`; newFile.fileSize = file.size; newFile.mimeType = mimeType; newFile.label = file.clientName; - newFile.sortOrder = index; + newFile.sortOrder = index + 1; newFile.visibleInFrontdoor = true; newFile.visibleInOai = true; // let path = coverImage.filePath; @@ -693,16 +819,25 @@ export default class DatasetController { 'files.array.minLength': 'At least {{ min }} file upload is required.', 'files.*.size': 'file size is to big', 'files.*.extnames': 'file extension is not supported', + + 'embargo_date.date.afterOrEqual': `Embargo date must be on or after ${dayjs().add(10, 'day').format('DD.MM.YYYY')}`, }; // public async release({ params, view }) { - public async release({ request, inertia, response }: HttpContext) { + public async release({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); + const user = auth.user; + + // Check if user is authenticated + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } const dataset = await Dataset.query() .preload('user', (builder) => { builder.select('id', 'login'); }) + .where('account_id', user.id) // Only fetch if user owns it .where('id', id) .firstOrFail(); @@ -723,9 +858,20 @@ export default class DatasetController { }); } - public async releaseUpdate({ request, response }: HttpContext) { + public async releaseUpdate({ request, response, auth }: HttpContext) { const id = request.param('id'); - const dataset = await Dataset.query().preload('files').where('id', id).firstOrFail(); + const user = auth.user; + + // Check if user is authenticated + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + const dataset = await Dataset.query() + .preload('files') + .where('id', id) + .where('account_id', user.id) // Only fetch if user owns it + .firstOrFail(); const validStates = ['inprogress', 'rejected_editor']; if (!validStates.includes(dataset.server_state)) { @@ -803,16 +949,24 @@ export default class DatasetController { // throw new GeneralException(trans('exceptions.publish.release.update_error')); } - public async edit({ request, inertia, response }: HttpContext) { + public async edit({ request, inertia, response, auth }: HttpContext) { const id = request.param('id'); - const datasetQuery = Dataset.query().where('id', id); + const user = auth.user; + + // Check if user is authenticated + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // Prefilter by both id AND account_id + const datasetQuery = Dataset.query().where('id', id).where('account_id', user.id); // Only fetch if user owns it datasetQuery .preload('titles', (query) => query.orderBy('id', 'asc')) .preload('descriptions', (query) => query.orderBy('id', 'asc')) .preload('coverage') .preload('licenses') - .preload('authors') - .preload('contributors') + .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc')) + .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc')) // .preload('subjects') .preload('subjects', (builder) => { builder.orderBy('id', 'asc').withCount('datasets'); @@ -821,17 +975,17 @@ export default class DatasetController { .preload('files', (query) => { query.orderBy('sort_order', 'asc'); // Sort by sort_order column }); - + // This will throw 404 if dataset doesn't exist OR user doesn't own it const dataset = await datasetQuery.firstOrFail(); + const validStates = ['inprogress', 'rejected_editor']; if (!validStates.includes(dataset.server_state)) { // session.flash('errors', 'Invalid server state!'); return response .flash( - 'warning', `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`, + 'warning', ) - .redirect() .toRoute('dataset.list'); } @@ -861,19 +1015,6 @@ export default class DatasetController { const years = Array.from({ length: currentYear - 1990 + 1 }, (_, index) => 1990 + index); const licenses = await License.query().select('id', 'name_long').where('active', 'true').pluck('name_long', 'id'); - // const userHasRoles = user.roles; - // const datasetHasLicenses = await dataset.related('licenses').query().pluck('id'); - // const checkeds = dataset.licenses.first().id; - - const doctypes = { - analysisdata: { label: 'Analysis', value: 'analysisdata' }, - measurementdata: { label: 'Measurements', value: 'measurementdata' }, - monitoring: 'Monitoring', - remotesensing: 'Remote Sensing', - gis: 'GIS', - models: 'Models', - mixedtype: 'Mixed Type', - }; return inertia.render('Submitter/Dataset/Edit', { dataset, @@ -892,25 +1033,114 @@ export default class DatasetController { subjectTypes: SubjectTypes, referenceIdentifierTypes: Object.entries(ReferenceIdentifierTypes).map(([key, value]) => ({ value: key, label: value })), relationTypes: Object.entries(RelationTypes).map(([key, value]) => ({ value: key, label: value })), - doctypes, + doctypes: DatasetTypes, + can: { + edit: await auth.user?.can(['dataset-edit']), + delete: await auth.user?.can(['dataset-delete']), + }, }); } - public async update({ request, response, session }: HttpContext) { - try { - // await request.validate(UpdateDatasetValidator); - await request.validateUsing(updateDatasetValidator); - } catch (error) { - // - Handle errors - // return response.badRequest(error.messages); - throw error; - // return response.badRequest(error.messages); - } - // await request.validate(UpdateDatasetValidator); - const id = request.param('id'); + public async update({ request, response, session, auth }: HttpContext) { + // Get the dataset id from the route parameter + const datasetId = request.param('id'); + const user = auth.user; + // Check if user is authenticated + if (!user) { + return response.flash('You must be logged in to update a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // Prefilter by both id AND account_id + const dataset = await Dataset.query() + .where('id', datasetId) + .where('account_id', user.id) // Only fetch if user owns it + .firstOrFail(); + + // // Check if the authenticated user is the owner of the dataset + // if (dataset.account_id !== user.id) { + // return response + // .flash(`Unauthorized access. You are not the owner of dataset with id ${id}.`, 'error') + // .redirect() + // .toRoute('dataset.list'); + // } + + await dataset.load('files'); + // Accumulate the size of the already related files + // const preExistingFileSize = dataset.files.reduce((acc, file) => acc + file.fileSize, 0); + let preExistingFileSize = 0; + for (const file of dataset.files) { + preExistingFileSize += Number(file.fileSize); + } + + const uploadedTmpFiles: string[] = []; + // Only process multipart if the request has a multipart content type + const contentType = request.request.headers['content-type'] || ''; + if (contentType.includes('multipart/form-data')) { + const multipart: Multipart = request.multipart; + // Aggregated limit example (adjust as needed) + const multipartConfig = getConfigFor('multipart'); + const aggregatedLimit = multipartConfig.limit ? parseBytesSize(multipartConfig.limit) : 100 * 1024 * 1024; + // Initialize totalUploadedSize with the size of existing files + let totalUploadedSize = preExistingFileSize; + + multipart.onFile('files', { deferValidations: true }, async (part) => { + let fileUploadedSize = 0; + + part.on('data', (chunk) => { + fileUploadedSize += chunk.length; + }); + + part.on('end', () => { + totalUploadedSize += fileUploadedSize; + part.file.size = fileUploadedSize; + if (part.file.tmpPath) { + uploadedTmpFiles.push(part.file.tmpPath); + } + if (totalUploadedSize > aggregatedLimit) { + uploadedTmpFiles.forEach((tmpPath) => { + try { + fs.unlinkSync(tmpPath); + } catch (cleanupError) { + console.error('Error cleaning up temporary file:', cleanupError); + } + }); + const error = new errors.E_VALIDATION_ERROR({ + 'upload error': `Aggregated upload limit of ${formatBytes(aggregatedLimit)} exceeded. The total size of files being uploaded would exceed the limit.`, + }); + request.multipart.abort(error); + } + }); + + part.on('error', (error) => { + request.multipart.abort(error); + }); + + try { + const fileNameWithoutParams = part.file.clientName.split('?')[0]; + const ext = path.extname(fileNameWithoutParams).replace('.', ''); + part.file.extname = ext; + const tmpPath = getTmpPath(multipartConfig); + (part.file as any).tmpPath = tmpPath; + const writeStream = createWriteStream(tmpPath); + await pipeline(part, writeStream); + } catch (error) { + request.multipart.abort(new errors.E_VALIDATION_ERROR({ 'upload error': error.message })); + } + }); + + try { + await multipart.process(); + } catch (error) { + session.flash('errors', error.messages); + return response.redirect().back(); + } + } + + const id = request.param('id'); let trx: TransactionClientContract | null = null; try { + await request.validateUsing(updateDatasetValidator); trx = await db.transaction(); // const user = (await User.find(auth.user?.id)) as User; // await this.createDatasetAndAssociations(user, request, trx); @@ -971,22 +1201,148 @@ export default class DatasetController { } } - // await dataset.useTransaction(trx).related('subjects').sync([]); - const keywords = request.input('subjects'); - for (const keywordData of keywords) { - if (keywordData.id) { - const subject = await Subject.findOrFail(keywordData.id); - // await dataset.useTransaction(trx).related('subjects').attach([keywordData.id]); - subject.value = keywordData.value; - subject.type = keywordData.type; - subject.external_key = keywordData.external_key; - if (subject.$isDirty) { - await subject.save(); + // ============================================ + // IMPROVED SUBJECTS PROCESSING + // ============================================ + const subjects = request.input('subjects', []); + const currentDatasetSubjectIds = new Set<number>(); + + for (const subjectData of subjects) { + let subjectToRelate: Subject; + + // Case 1: Subject has an ID (existing subject being updated) + if (subjectData.id) { + const existingSubject = await Subject.findOrFail(subjectData.id); + + // Check if the updated value conflicts with another existing subject + const duplicateSubject = await Subject.query() + .where('value', subjectData.value) + .where('type', subjectData.type) + .where('language', subjectData.language || 'en') // Default language if not provided + .where('id', '!=', subjectData.id) // Exclude the current subject + .first(); + + if (duplicateSubject) { + // A duplicate exists - use the existing duplicate instead + subjectToRelate = duplicateSubject; + + // Check if the original subject should be deleted (if it's only used by this dataset) + const originalSubjectUsage = await Subject.query() + .where('id', existingSubject.id) + .withCount('datasets') + .firstOrFail(); + + if (originalSubjectUsage.$extras.datasets_count <= 1) { + // Only used by this dataset, safe to delete after detaching + await dataset.useTransaction(trx).related('subjects').detach([existingSubject.id]); + await existingSubject.useTransaction(trx).delete(); + } else { + // Used by other datasets, just detach from this one + await dataset.useTransaction(trx).related('subjects').detach([existingSubject.id]); + } + } else { + // No duplicate found, update the existing subject + existingSubject.value = subjectData.value; + existingSubject.type = subjectData.type; + existingSubject.language = subjectData.language; + existingSubject.external_key = subjectData.external_key; + + if (existingSubject.$isDirty) { + await existingSubject.useTransaction(trx).save(); + } + + subjectToRelate = existingSubject; + } + } + // Case 2: New subject being added (no ID) + else { + // Use firstOrNew to either find existing or create new subject + subjectToRelate = await Subject.firstOrNew( + { + value: subjectData.value, + type: subjectData.type, + language: subjectData.language || 'en', + }, + { + value: subjectData.value, + type: subjectData.type, + language: subjectData.language || 'en', + external_key: subjectData.external_key, + }, + ); + + if (subjectToRelate.$isNew) { + await subjectToRelate.useTransaction(trx).save(); + } + } + + // Ensure the relationship exists between dataset and subject + const relationshipExists = await dataset.related('subjects').query().where('subject_id', subjectToRelate.id).first(); + + if (!relationshipExists) { + await dataset.useTransaction(trx).related('subjects').attach([subjectToRelate.id]); + } + + // Track which subjects should remain associated with this dataset + currentDatasetSubjectIds.add(subjectToRelate.id); + } + + // Handle explicit deletions + const subjectsToDelete = request.input('subjectsToDelete', []); + for (const subjectData of subjectsToDelete) { + if (subjectData.id) { + // const subject = await Subject.findOrFail(subjectData.id); + const subject = await Subject.query() + .where('id', subjectData.id) + .preload('datasets', (builder) => { + builder.orderBy('id', 'asc'); + }) + .withCount('datasets') + .firstOrFail(); + + // Detach the subject from this dataset + await dataset.useTransaction(trx).related('subjects').detach([subject.id]); + + // If this was the only dataset using this subject, delete it entirely + if (subject.$extras.datasets_count <= 1) { + await subject.useTransaction(trx).delete(); + } + + // Remove from current set if it was added earlier + currentDatasetSubjectIds.delete(subjectData.id); + } + } + + // Process references + const references = request.input('references', []); + // First, get existing references to determine which ones to update vs. create + const existingReferences = await dataset.related('references').query(); + const existingReferencesMap: Map<number, DatasetReference> = new Map(existingReferences.map((ref) => [ref.id, ref])); + + for (const referenceData of references) { + if (existingReferencesMap.has(referenceData.id) && referenceData.id) { + // Update existing reference + const reference = existingReferencesMap.get(referenceData.id); + if (reference) { + reference.merge(referenceData); + if (reference.$isDirty) { + await reference.useTransaction(trx).save(); + } } } else { - const keyword = new Subject(); - keyword.fill(keywordData); - await dataset.useTransaction(trx).related('subjects').save(keyword, false); + // Create new reference + const dataReference = new DatasetReference(); + dataReference.fill(referenceData); + await dataset.useTransaction(trx).related('references').save(dataReference); + } + } + + // Handle references to delete if provided + const referencesToDelete = request.input('referencesToDelete', []); + for (const referenceData of referencesToDelete) { + if (referenceData.id) { + const reference = await DatasetReference.findOrFail(referenceData.id); + await reference.useTransaction(trx).delete(); } } @@ -1018,9 +1374,9 @@ export default class DatasetController { // handle new uploaded files: const uploadedFiles: MultipartFile[] = request.files('files'); if (Array.isArray(uploadedFiles) && uploadedFiles.length > 0) { - for (const [index, fileData] of uploadedFiles.entries()) { + for (const [index, file] of uploadedFiles.entries()) { try { - await this.scanFileForViruses(fileData.tmpPath); //, 'gitea.lan', 3310); + await this.scanFileForViruses(file.tmpPath); //, 'gitea.lan', 3310); // await this.scanFileForViruses("/tmp/testfile.txt"); } catch (error) { // If the file is infected or there's an error scanning the file, throw a validation exception @@ -1028,23 +1384,29 @@ export default class DatasetController { } // move to disk: - const fileName = `file-${cuid()}.${fileData.extname}`; //'file-ls0jyb8xbzqtrclufu2z2e0c.pdf' + const fileName = this.generateFilename(file.extname as string); const datasetFolder = `files/${dataset.id}`; // 'files/307' - // await fileData.moveToDisk(datasetFolder, { name: fileName, overwrite: true }, 'local'); - await fileData.move(drive.makePath(datasetFolder), { + const datasetFullPath = path.join(`${datasetFolder}`, fileName); + // await file.moveToDisk(datasetFolder, { name: fileName, overwrite: true }, 'local'); + // await file.move(drive.makePath(datasetFolder), { + // name: fileName, + // overwrite: true, // overwrite in case of conflict + // }); + await file.moveToDisk(datasetFullPath, 'local', { name: fileName, overwrite: true, // overwrite in case of conflict + disk: 'local', }); //save to db: - const { clientFileName, sortOrder } = this.extractVariableNameAndSortOrder(fileData.clientName); - const mimeType = fileData.headers['content-type'] || 'application/octet-stream'; // Fallback to a default MIME type + const { clientFileName, sortOrder } = this.extractVariableNameAndSortOrder(file.clientName); + const mimeType = file.headers['content-type'] || 'application/octet-stream'; // Fallback to a default MIME type const newFile = await dataset .useTransaction(trx) .related('files') .create({ pathName: `${datasetFolder}/${fileName}`, - fileSize: fileData.size, + fileSize: file.size, mimeType, label: clientFileName, sortOrder: sortOrder || index, @@ -1084,16 +1446,24 @@ export default class DatasetController { await dataset.useTransaction(trx).save(); await trx.commit(); - console.log('Dataset and related models created successfully'); + console.log('Dataset has been updated successfully'); session.flash('message', 'Dataset has been updated successfully'); // return response.redirect().toRoute('user.index'); return response.redirect().toRoute('dataset.edit', [dataset.id]); } catch (error) { + // Clean up temporary files if validation or later steps fail + uploadedTmpFiles.forEach((tmpPath) => { + try { + fs.unlinkSync(tmpPath); + } catch (cleanupError) { + console.error('Error cleaning up temporary file:', cleanupError); + } + }); if (trx !== null) { await trx.rollback(); } - console.error('Failed to create dataset and related models:', error); + console.error('Failed to update dataset and related models:', error); // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` }); throw error; } @@ -1118,16 +1488,26 @@ export default class DatasetController { } } - public async delete({ request, inertia, response, session }: HttpContext) { + public async delete({ request, inertia, response, session, auth }: HttpContext) { const id = request.param('id'); + const user = auth.user; + + // Check if user is authenticated + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + try { + // This will throw 404 if dataset doesn't exist OR user doesn't own it const dataset = await Dataset.query() .preload('user', (builder) => { builder.select('id', 'login'); }) .where('id', id) + .where('account_id', user.id) // Only fetch if user owns it .preload('files') .firstOrFail(); + const validStates = ['inprogress', 'rejected_editor']; if (!validStates.includes(dataset.server_state)) { // session.flash('errors', 'Invalid server state!'); @@ -1152,39 +1532,58 @@ export default class DatasetController { } } - public async deleteUpdate({ params, session, response }: HttpContext) { + public async deleteUpdate({ params, session, response, auth }: HttpContext) { try { - const dataset = await Dataset.query().where('id', params.id).preload('files').firstOrFail(); + const user = auth.user; + if (!user) { + return response.flash('You must be logged in to edit a dataset.', 'error').redirect().toRoute('app.login.show'); + } + + // This will throw 404 if dataset doesn't exist OR user doesn't own it + const dataset = await Dataset.query() + .where('id', params.id) + .where('account_id', user.id) // Only fetch if user owns it + .preload('files') + .firstOrFail(); + + // // Check if the authenticated user is the owner of the dataset + // if (dataset.account_id !== user.id) { + // return response + // .flash(`Unauthorized access. You are not the owner of dataset with id ${params.id}.`, 'error') + // .redirect() + // .toRoute('dataset.list'); + // } const validStates = ['inprogress', 'rejected_editor']; if (validStates.includes(dataset.server_state)) { if (dataset.files && dataset.files.length > 0) { for (const file of dataset.files) { - // overwritten delete method also delets file on filespace + // overwritten delete method also delets file on filespace and db object await file.delete(); } } const datasetFolder = `files/${params.id}`; - const folderExists = await drive.exists(datasetFolder); - if (folderExists) { - const dirListing = drive.list(datasetFolder); - const folderContents = await dirListing.toArray(); - if (folderContents.length === 0) { - await drive.delete(datasetFolder); - } - // delete dataset wirh relation in db - await dataset.delete(); - session.flash({ message: 'You have deleted 1 dataset!' }); - return response.redirect().toRoute('dataset.list'); - } else { - // session.flash({ - // warning: `You cannot delete this dataset! Invalid server_state: "${dataset.server_state}"!`, - // }); - return response - .flash({ warning: `You cannot delete this dataset! Dataset folder "${datasetFolder}" doesn't exist!` }) - .redirect() - .back(); - } + // const folderExists = await drive.use('local').exists(datasetFolder); + // if (folderExists) { + // const dirListing = drive.list(datasetFolder); + // const folderContents = await dirListing.toArray(); + // if (folderContents.length === 0) { + // await drive.delete(datasetFolder); + // } + await drive.use('local').deleteAll(datasetFolder); + // delete dataset wirh relation in db + await dataset.delete(); + session.flash({ message: 'You have deleted 1 dataset!' }); + return response.redirect().toRoute('dataset.list'); + // } else { + // // session.flash({ + // // warning: `You cannot delete this dataset! Invalid server_state: "${dataset.server_state}"!`, + // // }); + // return response + // .flash({ warning: `You cannot delete this dataset! Dataset folder "${datasetFolder}" doesn't exist!` }) + // .redirect() + // .back(); + // } } } catch (error) { if (error instanceof errors.E_VALIDATION_ERROR) { @@ -1192,11 +1591,90 @@ export default class DatasetController { throw error; } else if (error instanceof Exception) { // General exception handling - return response.flash('errors', { error: error.message }).redirect().back(); + session.flash({ error: error.message }); + return response.redirect().back(); } else { session.flash({ error: 'An error occurred while deleting the dataset.' }); return response.redirect().back(); } } } + + public async categorize({ inertia, request, response }: HttpContext) { + const id = request.param('id'); + // Preload dataset and its "collections" relation + const dataset = await Dataset.query().where('id', id).preload('collections').firstOrFail(); + const validStates = ['inprogress', 'rejected_editor']; + if (!validStates.includes(dataset.server_state)) { + // session.flash('errors', 'Invalid server state!'); + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('dataset.list'); + } + + const collectionRoles = await CollectionRole.query() + .whereIn('name', ['ddc', 'ccs']) + .preload('collections', (coll: Collection) => { + // preloa only top level collection with noparent_id + coll.whereNull('parent_id').orderBy('number', 'asc'); + }) + .exec(); + + return inertia.render('Submitter/Dataset/Category', { + collectionRoles: collectionRoles, + dataset: dataset, + relatedCollections: dataset.collections, + }); + } + + public async categorizeUpdate({ request, response, session }: HttpContext) { + // Get the dataset id from the route parameter + const id = request.param('id'); + const dataset = await Dataset.query().preload('files').where('id', id).firstOrFail(); + + const validStates = ['inprogress', 'rejected_editor']; + if (!validStates.includes(dataset.server_state)) { + return response + .flash( + 'warning', + `Invalid server state. Dataset with id ${id} cannot be categorized. Dataset has server state ${dataset.server_state}.`, + ) + .redirect() + .toRoute('dataset.list'); + } + + let trx: TransactionClientContract | null = null; + try { + trx = await db.transaction(); + // const user = (await User.find(auth.user?.id)) as User; + // await this.createDatasetAndAssociations(user, request, trx); + + // Retrieve the selected collections from the request. + // This should be an array of collection ids. + const collections: number[] = request.input('collections', []); + + // Synchronize the dataset collections using the transaction. + await dataset.useTransaction(trx).related('collections').sync(collections); + + // Commit the transaction.await trx.commit() + await trx.commit(); + + // Redirect with a success flash message. + // return response.flash('success', 'Dataset collections updated successfully!').redirect().toRoute('dataset.list'); + + session.flash('message', 'Dataset collections updated successfully!'); + return response.redirect().toRoute('dataset.list'); + } catch (error) { + if (trx !== null) { + await trx.rollback(); + } + console.error('Failed tocatgorize dataset collections:', error); + // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` }); + throw error; + } + } } diff --git a/app/Library/DatasetXmlSerializer.ts b/app/Library/DatasetXmlSerializer.ts new file mode 100644 index 0000000..f84d3b7 --- /dev/null +++ b/app/Library/DatasetXmlSerializer.ts @@ -0,0 +1,231 @@ +import DocumentXmlCache from '#models/DocumentXmlCache'; +import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; +import Dataset from '#models/dataset'; +import Strategy from './Strategy.js'; +import { builder } from 'xmlbuilder2'; +import logger from '@adonisjs/core/services/logger'; + +/** + * Configuration for XML serialization + * + * @interface XmlSerializationConfig + */ +export interface XmlSerializationConfig { + /** The dataset model to serialize */ + model: Dataset; + /** DOM representation (if available) */ + dom?: XMLBuilder; + /** Fields to exclude from serialization */ + excludeFields: Array<string>; + /** Whether to exclude empty fields */ + excludeEmpty: boolean; + /** Base URI for xlink:ref elements */ + baseUri: string; +} + +/** + * Options for controlling serialization behavior + */ +export interface SerializationOptions { + /** Enable XML caching */ + enableCaching?: boolean; + /** Exclude empty fields from output */ + excludeEmptyFields?: boolean; + /** Custom base URI */ + baseUri?: string; + /** Fields to exclude */ + excludeFields?: string[]; +} + +/** + * DatasetXmlSerializer + * + * Handles XML serialization of Dataset models with intelligent caching. + * Generates XML representations and manages cache lifecycle to optimize performance. + * + * @example + * ```typescript + * const serializer = new DatasetXmlSerializer(dataset); + * serializer.enableCaching(); + * serializer.excludeEmptyFields(); + * + * const xmlDocument = await serializer.toXmlDocument(); + * ``` + */ +export default class DatasetXmlSerializer { + private readonly config: XmlSerializationConfig; + private readonly strategy: Strategy; + private cache: DocumentXmlCache | null = null; + private cachingEnabled = false; + + constructor(dataset: Dataset, options: SerializationOptions = {}) { + this.config = { + model: dataset, + excludeEmpty: options.excludeEmptyFields ?? false, + baseUri: options.baseUri ?? '', + excludeFields: options.excludeFields ?? [], + }; + + this.strategy = new Strategy({ + excludeEmpty: options.excludeEmptyFields ?? false, + baseUri: options.baseUri ?? '', + excludeFields: options.excludeFields ?? [], + model: dataset, + }); + + if (options.enableCaching) { + this.cachingEnabled = true; + } + } + + /** + * Enable caching for XML generation + * When enabled, generated XML is stored in database for faster retrieval + */ + public enableCaching(): this { + this.cachingEnabled = true; + return this; + } + + /** + * Disable caching for XML generation + */ + public disableCaching(): this { + this.cachingEnabled = false; + return this; + } + + set model(model: Dataset) { + this.config.model = model; + } + + /** + * Configure to exclude empty fields from XML output + */ + public excludeEmptyFields(): this { + this.config.excludeEmpty = true; + return this; + } + + /** + * Set the cache instance directly (useful when preloading) + * @param cache - The DocumentXmlCache instance + */ + public setCache(cache: DocumentXmlCache): this { + this.cache = cache; + return this; + } + + /** + * Get the current cache instance + */ + public getCache(): DocumentXmlCache | null { + return this.cache; + } + + /** + * Get DOM document with intelligent caching + * Returns cached version if valid, otherwise generates new document + */ + public async toXmlDocument(): Promise<XMLBuilder | null> { + const dataset = this.config.model; + + // Try to get from cache first + let cachedDocument: XMLBuilder | null = await this.retrieveFromCache(); + + if (cachedDocument) { + logger.debug(`Using cached XML for dataset ${dataset.id}`); + return cachedDocument; + } + + // Generate fresh document + logger.debug(`[DatasetXmlSerializer] Cache miss - generating fresh XML for dataset ${dataset.id}`); + const freshDocument = await this.strategy.createDomDocument(); + + if (!freshDocument) { + logger.error(`[DatasetXmlSerializer] Failed to generate XML for dataset ${dataset.id}`); + return null; + } + + // Cache if caching is enabled + if (this.cachingEnabled) { + await this.persistToCache(freshDocument, dataset); + } + + // Extract the dataset-specific node + return this.extractDatasetNode(freshDocument); + } + + /** + * Generate XML string representation + * Convenience method that converts XMLBuilder to string + */ + public async toXmlString(): Promise<string | null> { + const document = await this.toXmlDocument(); + return document ? document.end({ prettyPrint: false }) : null; + } + + /** + * Persist generated XML document to cache + * Non-blocking - failures are logged but don't interrupt the flow + */ + private async persistToCache(domDocument: XMLBuilder, dataset: Dataset): Promise<void> { + try { + this.cache = this.cache || new DocumentXmlCache(); + this.cache.document_id = dataset.id; + this.cache.xml_version = 1; + this.cache.server_date_modified = dataset.server_date_modified.toFormat('yyyy-MM-dd HH:mm:ss'); + this.cache.xml_data = domDocument.end(); + + await this.cache.save(); + logger.debug(`Cached XML for dataset ${dataset.id}`); + } catch (error) { + logger.error(`Failed to cache XML for dataset ${dataset.id}: ${error.message}`); + // Don't throw - caching failure shouldn't break the flow + } + } + + /** + * Extract the Rdr_Dataset node from full document + */ + private extractDatasetNode(domDocument: XMLBuilder): XMLBuilder | null { + const node = domDocument.find((n) => n.node.nodeName === 'Rdr_Dataset', false, true)?.node; + + if (node) { + return builder({ version: '1.0', encoding: 'UTF-8', standalone: true }, node); + } + + return domDocument; + } + + /** + * Attempt to retrieve valid cached XML document + * Returns null if cache doesn't exist or is stale + */ + private async retrieveFromCache(): Promise<XMLBuilder | null> { + const dataset: Dataset = this.config.model; + if (!this.cache) { + return null; + } + + // Check if cache is still valid + const actuallyCached = await DocumentXmlCache.hasValidEntry(dataset.id, dataset.server_date_modified); + + if (!actuallyCached) { + logger.debug(`Cache invalid for dataset ${dataset.id}`); + return null; + } + + //cache is actual return cached document + try { + if (this.cache) { + return this.cache.getDomDocument(); + } else { + return null; + } + } catch (error) { + logger.error(`Failed to retrieve cached document for dataset ${dataset.id}: ${error.message}`); + return null; + } + } +} diff --git a/app/Library/Doi/DoiClient.ts b/app/Library/Doi/DoiClient.ts index 5b56280..4232ac4 100644 --- a/app/Library/Doi/DoiClient.ts +++ b/app/Library/Doi/DoiClient.ts @@ -1,25 +1,22 @@ -// import { Client } from 'guzzle'; -// import { Log } from '@adonisjs/core/build/standalone'; -// import { DoiInterface } from './interfaces/DoiInterface'; import DoiClientContract from '#app/Library/Doi/DoiClientContract'; import DoiClientException from '#app/exceptions/DoiClientException'; import { StatusCodes } from 'http-status-codes'; import logger from '@adonisjs/core/services/logger'; import { AxiosResponse } from 'axios'; -import axios from 'axios'; +import { default as axios } from 'axios'; export class DoiClient implements DoiClientContract { public username: string; public password: string; public serviceUrl: string; + public apiUrl: string; constructor() { // const datacite_environment = process.env.DATACITE_ENVIRONMENT || 'debug'; this.username = process.env.DATACITE_USERNAME || ''; this.password = process.env.DATACITE_PASSWORD || ''; this.serviceUrl = process.env.DATACITE_SERVICE_URL || ''; - // this.prefix = process.env.DATACITE_PREFIX || ''; - // this.base_domain = process.env.BASE_DOMAIN || ''; + this.apiUrl = process.env.DATACITE_API_URL || 'https://api.datacite.org'; if (this.username === '' || this.password === '' || this.serviceUrl === '') { const message = 'issing configuration settings to properly initialize DOI client'; @@ -50,7 +47,7 @@ export class DoiClient implements DoiClientContract { 'Content-Type': 'application/xml;charset=UTF-8', }; try { - const metadataResponse = await axios.default.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers }); + const metadataResponse = await axios.put(`${this.serviceUrl}/metadata/${doiValue}`, xmlMeta, { auth, headers }); // Response Codes // 201 Created: operation successful @@ -65,7 +62,7 @@ export class DoiClient implements DoiClientContract { throw new DoiClientException(metadataResponse.status, message); } - const doiResponse = await axios.default.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, { + const doiResponse = await axios.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, { auth, headers, }); @@ -90,4 +87,240 @@ export class DoiClient implements DoiClientContract { throw new DoiClientException(error.response.status, error.response.data); } } + + /** + * Retrieves DOI information from DataCite REST API + * + * @param doiValue The DOI identifier e.g. '10.5072/tethys.999' + * @returns Promise with DOI information or null if not found + */ + public async getDoiInfo(doiValue: string): Promise<any | null> { + try { + // Use configurable DataCite REST API URL + const dataciteApiUrl = `${this.apiUrl}/dois/${doiValue}`; + const response = await axios.get(dataciteApiUrl, { + headers: { + Accept: 'application/vnd.api+json', + }, + }); + + if (response.status === 200 && response.data.data) { + return { + created: response.data.data.attributes.created, + registered: response.data.data.attributes.registered, + updated: response.data.data.attributes.updated, + published: response.data.data.attributes.published, + state: response.data.data.attributes.state, + url: response.data.data.attributes.url, + metadata: response.data.data.attributes, + }; + } + } catch (error) { + if (error.response?.status === 404) { + logger.debug(`DOI ${doiValue} not found in DataCite`); + return null; + } + + logger.debug(`DataCite REST API failed for ${doiValue}: ${error.message}`); + + // Fallback to MDS API + return await this.getDoiInfoFromMds(doiValue); + } + + return null; + } + + /** + * Fallback method to get DOI info from MDS API + * + * @param doiValue The DOI identifier + * @returns Promise with basic DOI information or null + */ + private async getDoiInfoFromMds(doiValue: string): Promise<any | null> { + try { + const auth = { + username: this.username, + password: this.password, + }; + + // Get DOI URL + const doiResponse = await axios.get(`${this.serviceUrl}/doi/${doiValue}`, { auth }); + + if (doiResponse.status === 200) { + // Get metadata if available + try { + const metadataResponse = await axios.get(`${this.serviceUrl}/metadata/${doiValue}`, { + auth, + headers: { + Accept: 'application/xml', + }, + }); + + return { + url: doiResponse.data.trim(), + metadata: metadataResponse.data, + created: new Date().toISOString(), // MDS doesn't provide creation dates + registered: new Date().toISOString(), // Use current time as fallback + source: 'mds', + }; + } catch (metadataError) { + // Return basic info even if metadata fetch fails + return { + url: doiResponse.data.trim(), + created: new Date().toISOString(), + registered: new Date().toISOString(), + source: 'mds', + }; + } + } + } catch (error) { + if (error.response?.status === 404) { + logger.debug(`DOI ${doiValue} not found in DataCite MDS`); + return null; + } + + logger.debug(`DataCite MDS API failed for ${doiValue}: ${error.message}`); + } + + return null; + } + + /** + * Checks if a DOI exists in DataCite + * + * @param doiValue The DOI identifier + * @returns Promise<boolean> True if DOI exists + */ + public async doiExists(doiValue: string): Promise<boolean> { + const doiInfo = await this.getDoiInfo(doiValue); + return doiInfo !== null; + } + + /** + * Gets the last modification date of a DOI + * + * @param doiValue The DOI identifier + * @returns Promise<Date | null> Last modification date or creation date if never updated, null if not found + */ + public async getDoiLastModified(doiValue: string): Promise<Date | null> { + const doiInfo = await this.getDoiInfo(doiValue); + + if (doiInfo) { + // Use updated date if available, otherwise fall back to created/registered date + const dateToUse = doiInfo.updated || doiInfo.registered || doiInfo.created; + + if (dateToUse) { + logger.debug( + `DOI ${doiValue}: Using ${doiInfo.updated ? 'updated' : doiInfo.registered ? 'registered' : 'created'} date: ${dateToUse}`, + ); + return new Date(dateToUse); + } + } + + return null; + } + + /** + * Makes a DOI unfindable (registered but not discoverable) + * Note: DOIs cannot be deleted, only made unfindable + * await doiClient.makeDoiUnfindable('10.21388/tethys.231'); + * + * @param doiValue The DOI identifier e.g. '10.5072/tethys.999' + * @returns Promise<AxiosResponse<any>> The http response + */ + public async makeDoiUnfindable(doiValue: string): Promise<AxiosResponse<any>> { + const auth = { + username: this.username, + password: this.password, + }; + + try { + // First, check if DOI exists + const exists = await this.doiExists(doiValue); + if (!exists) { + throw new DoiClientException(404, `DOI ${doiValue} not found`); + } + + // Delete the DOI URL mapping to make it unfindable + // This removes the URL but keeps the metadata registered + const response = await axios.delete(`${this.serviceUrl}/doi/${doiValue}`, { auth }); + + // Response Codes for DELETE /doi/{doi} + // 200 OK: operation successful + // 401 Unauthorized: no login + // 403 Forbidden: login problem, quota exceeded + // 404 Not Found: DOI does not exist + if (response.status !== 200) { + const message = `Unexpected DataCite MDS response code ${response.status}`; + logger.error(message); + throw new DoiClientException(response.status, message); + } + + logger.info(`DOI ${doiValue} successfully made unfindable`); + return response; + } catch (error) { + logger.error(`Failed to make DOI ${doiValue} unfindable: ${error.message}`); + if (error instanceof DoiClientException) { + throw error; + } + throw new DoiClientException(error.response?.status || 500, error.response?.data || error.message); + } + } + + /** + * Makes a DOI findable again by re-registering the URL + * await doiClient.makeDoiFindable( + * '10.21388/tethys.231', + * 'https://doi.dev.tethys.at/10.21388/tethys.231' + * ); + * + * @param doiValue The DOI identifier e.g. '10.5072/tethys.999' + * @param landingPageUrl The landing page URL + * @returns Promise<AxiosResponse<any>> The http response + */ + public async makeDoiFindable(doiValue: string, landingPageUrl: string): Promise<AxiosResponse<any>> { + const auth = { + username: this.username, + password: this.password, + }; + + try { + // Re-register the DOI with its URL to make it findable again + const response = await axios.put(`${this.serviceUrl}/doi/${doiValue}`, `doi=${doiValue}\nurl=${landingPageUrl}`, { auth }); + + // Response Codes for PUT /doi/{doi} + // 201 Created: operation successful + // 400 Bad Request: request body must be exactly two lines: DOI and URL + // 401 Unauthorized: no login + // 403 Forbidden: login problem, quota exceeded + // 412 Precondition failed: metadata must be uploaded first + if (response.status !== 201) { + const message = `Unexpected DataCite MDS response code ${response.status}`; + logger.error(message); + throw new DoiClientException(response.status, message); + } + + logger.info(`DOI ${doiValue} successfully made findable again`); + return response; + } catch (error) { + logger.error(`Failed to make DOI ${doiValue} findable: ${error.message}`); + if (error instanceof DoiClientException) { + throw error; + } + throw new DoiClientException(error.response?.status || 500, error.response?.data || error.message); + } + } + + /** + * Gets the current state of a DOI (draft, registered, findable) + * const state = await doiClient.getDoiState('10.21388/tethys.231'); + * console.log(`Current state: ${state}`); // 'findable' + * + * @param doiValue The DOI identifier + * @returns Promise<string | null> The DOI state or null if not found + */ + public async getDoiState(doiValue: string): Promise<string | null> { + const doiInfo = await this.getDoiInfo(doiValue); + return doiInfo?.state || null; + } } diff --git a/app/Library/Oai/ResumptionToken.ts b/app/Library/Oai/ResumptionToken.ts index 5eca661..56bbea4 100644 --- a/app/Library/Oai/ResumptionToken.ts +++ b/app/Library/Oai/ResumptionToken.ts @@ -4,6 +4,7 @@ export default class ResumptionToken { private _resumptionId = ''; private _startPosition = 0; private _totalIds = 0; + private _queryParams: Record<string, any> = {}; get key(): string { return this.metadataPrefix + this.startPosition + this.totalIds; @@ -48,4 +49,12 @@ export default class ResumptionToken { set totalIds(totalIds: number) { this._totalIds = totalIds; } + + get queryParams(): Record<string, any> { + return this._queryParams; + } + + set queryParams(params: Record<string, any>) { + this._queryParams = params; + } } diff --git a/app/Library/Oai/TokenWorkerContract.ts b/app/Library/Oai/TokenWorkerContract.ts index 94dae70..2491817 100644 --- a/app/Library/Oai/TokenWorkerContract.ts +++ b/app/Library/Oai/TokenWorkerContract.ts @@ -6,6 +6,6 @@ export default abstract class TokenWorkerContract { abstract connect(): void; abstract close(): void; abstract get(key: string): Promise<ResumptionToken | null>; - abstract set(token: ResumptionToken): Promise<string>; + abstract set(token: ResumptionToken, browserFingerprint: string): Promise<string>; } diff --git a/app/Library/Oai/TokenWorkerSerice.ts b/app/Library/Oai/TokenWorkerSerice.ts index ee63f97..9cb9ccc 100644 --- a/app/Library/Oai/TokenWorkerSerice.ts +++ b/app/Library/Oai/TokenWorkerSerice.ts @@ -40,14 +40,64 @@ export default class TokenWorkerService implements TokenWorkerContract { return result !== undefined && result !== null; } - public async set(token: ResumptionToken): Promise<string> { - const uniqueName = await this.generateUniqueName(); + /** + * Simplified set method that stores the token using a browser fingerprint key. + * If the token for that fingerprint already exists and its documentIds match the new token, + * then the fingerprint key is simply returned. + */ + public async set(token: ResumptionToken, browserFingerprint: string): Promise<string> { + // Generate a 15-digit unique number string based on the fingerprint + const uniqueNumberKey = this.createUniqueNumberFromFingerprint(browserFingerprint, token.documentIds, token.totalIds); + // Optionally, you could prefix it if desired, e.g. 'rs_' + uniqueNumberKey + const fingerprintKey = uniqueNumberKey; + + // const fingerprintKey = `rs_fp_${browserFingerprint}`; + const existingTokenString = await this.cache.get(fingerprintKey); + + if (existingTokenString) { + const existingToken = this.parseToken(existingTokenString); + if (this.arraysAreEqual(existingToken.documentIds, token.documentIds)) { + return fingerprintKey; + } + } const serialToken = JSON.stringify(token); - await this.cache.setEx(uniqueName, this.ttl, serialToken); - return uniqueName; + await this.cache.setEx(fingerprintKey, this.ttl, serialToken); + return fingerprintKey; } + // Updated helper method to generate a unique key based on fingerprint and documentIds + private createUniqueNumberFromFingerprint(browserFingerprint: string, documentIds: number[], totalIds: number): string { + // Combine the fingerprint, document IDs and totalIds to produce the input string + const combined = browserFingerprint + ':' + documentIds.join('-') + ':' + totalIds; + // Simple hash algorithm + let hash = 0; + for (let i = 0; i < combined.length; i++) { + hash = (hash << 5) - hash + combined.charCodeAt(i); + hash |= 0; // Convert to 32-bit integer + } + // Ensure positive number and limit it to at most 15 digits + const positiveHash = Math.abs(hash) % 1000000000000000; + // Pad with trailing zeros to ensure a 15-digit string + return positiveHash.toString().padEnd(15, '0'); + } + + // Add a helper function to compare two arrays of numbers with identical order + private arraysAreEqual(arr1: number[], arr2: number[]): boolean { + if (arr1.length !== arr2.length) { + return false; + } + return arr1.every((num, index) => num === arr2[index]); + } + + // public async set(token: ResumptionToken): Promise<string> { + // const uniqueName = await this.generateUniqueName(); + + // const serialToken = JSON.stringify(token); + // await this.cache.setEx(uniqueName, this.ttl, serialToken); + // return uniqueName; + // } + private async generateUniqueName(): Promise<string> { let fc = 0; const uniqueId = dayjs().unix().toString(); diff --git a/app/Library/Utils/Index.ts b/app/Library/Utils/Index.ts index 9bc21f7..20253a4 100644 --- a/app/Library/Utils/Index.ts +++ b/app/Library/Utils/Index.ts @@ -2,7 +2,7 @@ import Dataset from '#models/dataset'; import { Client } from '@opensearch-project/opensearch'; import { create } from 'xmlbuilder2'; import SaxonJS from 'saxon-js'; -import XmlModel from '#app/Library/XmlModel'; +import DatasetXmlSerializer from '#app/Library/DatasetXmlSerializer'; import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; import logger from '@adonisjs/core/services/logger'; import { readFileSync } from 'fs'; @@ -72,31 +72,42 @@ export default { } }, + /** + * Index a dataset document to OpenSearch/Elasticsearch + */ async indexDocument(dataset: Dataset, index_name: string): Promise<void> { try { - const proc = readFileSync('public/assets2/solr.sef.json'); - const doc: string = await this.getTransformedString(dataset, proc); + // Load XSLT transformation file + const xsltProc = readFileSync('public/assets2/solr.sef.json'); - let document = JSON.parse(doc); + // Transform dataset to JSON document + const jsonDoc: string = await this.getTransformedString(dataset, xsltProc); + + const document = JSON.parse(jsonDoc); + + // Index document to OpenSearch with doument json body await this.client.index({ id: dataset.publish_id?.toString(), index: index_name, body: document, - refresh: true, + refresh: true, // make immediately searchable }); - logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`); + logger.info(`Dataset ${dataset.publish_id} successfully indexed to ${index_name}`); } catch (error) { - logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`); + logger.error(`Failed to index dataset ${dataset.publish_id}: ${error.message}`); + throw error; // Re-throw to allow caller to handle } }, + /** + * Transform dataset XML to JSON using XSLT + */ async getTransformedString(dataset: Dataset, proc: Buffer): Promise<string> { - let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>'); - const datasetNode = xml.root().ele('Dataset'); - await createXmlRecord(dataset, datasetNode); - const xmlString = xml.end({ prettyPrint: false }); + // Generate XML string from dataset + const xmlString = await this.generateDatasetXml(dataset); try { + // Apply XSLT transformation const result = await SaxonJS.transform({ stylesheetText: proc, destination: 'serialized', @@ -108,6 +119,18 @@ export default { return ''; } }, + + /** + * Generate XML string from dataset model + */ + async generateDatasetXml(dataset: Dataset): Promise<string> { + const xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>'); + const datasetNode = xml.root().ele('Dataset'); + + await createXmlRecord(dataset, datasetNode); + + return xml.end({ prettyPrint: false }); + }, }; /** * Return the default global focus trap stack @@ -115,74 +138,49 @@ export default { * @return {import('focus-trap').FocusTrap[]} */ -// export const indexDocument = async (dataset: Dataset, index_name: string, proc: Buffer): Promise<void> => { -// try { -// const doc = await getJsonString(dataset, proc); - -// let document = JSON.parse(doc); -// await client.index({ -// id: dataset.publish_id?.toString(), -// index: index_name, -// body: document, -// refresh: true, -// }); -// Logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`); -// } catch (error) { -// Logger.error(`An error occurred while indexing datsaet with publish_id ${dataset.publish_id}.`); -// } -// }; - -// const getJsonString = async (dataset, proc): Promise<string> => { -// let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>'); -// const datasetNode = xml.root().ele('Dataset'); -// await createXmlRecord(dataset, datasetNode); -// const xmlString = xml.end({ prettyPrint: false }); - -// try { -// const result = await transform({ -// stylesheetText: proc, -// destination: 'serialized', -// sourceText: xmlString, -// }); -// return result.principalResult; -// } catch (error) { -// Logger.error(`An error occurred while creating the user, error: ${error.message},`); -// return ''; -// } -// }; - +/** + * Create complete XML record for dataset + * Handles caching and metadata enrichment + */ const createXmlRecord = async (dataset: Dataset, datasetNode: XMLBuilder): Promise<void> => { const domNode = await getDatasetXmlDomNode(dataset); - if (domNode) { - // add frontdoor url and data-type - dataset.publish_id && addLandingPageAttribute(domNode, dataset.publish_id.toString()); - addSpecInformation(domNode, 'data-type:' + dataset.type); - if (dataset.collections) { - for (const coll of dataset.collections) { - const collRole = coll.collectionRole; - addSpecInformation(domNode, collRole.oai_name + ':' + coll.number); - } - } - datasetNode.import(domNode); + if (!domNode) { + throw new Error(`Failed to generate XML DOM node for dataset ${dataset.id}`); } + + // Enrich with landing page URL + if (dataset.publish_id) { + addLandingPageAttribute(domNode, dataset.publish_id.toString()); + } + + // Add data type specification + addSpecInformation(domNode, `data-type:${dataset.type}`); + + // Add collection information + if (dataset.collections) { + for (const coll of dataset.collections) { + const collRole = coll.collectionRole; + addSpecInformation(domNode, `${collRole.oai_name}:${coll.number}`); + } + } + + datasetNode.import(domNode); }; const getDatasetXmlDomNode = async (dataset: Dataset): Promise<XMLBuilder | null> => { - const xmlModel = new XmlModel(dataset); + const serializer = new DatasetXmlSerializer(dataset).enableCaching().excludeEmptyFields(); // xmlModel.setModel(dataset); - xmlModel.excludeEmptyFields(); - xmlModel.caching = true; - // const cache = dataset.xmlCache ? dataset.xmlCache : null; - // dataset.load('xmlCache'); + + // Load cache relationship if not already loaded await dataset.load('xmlCache'); if (dataset.xmlCache) { - xmlModel.xmlCache = dataset.xmlCache; + serializer.setCache(dataset.xmlCache); } - // return cache.getDomDocument(); - const domDocument: XMLBuilder | null = await xmlModel.getDomDocument(); - return domDocument; + // Generate or retrieve cached DOM document + const xmlDocument: XMLBuilder | null = await serializer.toXmlDocument(); + return xmlDocument; }; const addLandingPageAttribute = (domNode: XMLBuilder, dataid: string) => { @@ -192,6 +190,6 @@ const addLandingPageAttribute = (domNode: XMLBuilder, dataid: string) => { domNode.att('landingpage', url); }; -const addSpecInformation= (domNode: XMLBuilder, information: string) => { +const addSpecInformation = (domNode: XMLBuilder, information: string) => { domNode.ele('SetSpec').att('Value', information); -}; \ No newline at end of file +}; diff --git a/app/Library/XmlModel.ts b/app/Library/XmlModel.ts deleted file mode 100644 index 6f76474..0000000 --- a/app/Library/XmlModel.ts +++ /dev/null @@ -1,129 +0,0 @@ -import DocumentXmlCache from '#models/DocumentXmlCache'; -import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; -import Dataset from '#models/dataset'; -import Strategy from './Strategy.js'; -import { DateTime } from 'luxon'; -import { builder } from 'xmlbuilder2'; - -/** - * This is the description of the interface - * - * @interface Conf - * @member {Model} model holds the current dataset model - * @member {XMLBuilder} dom holds the current DOM representation - * @member {Array<string>} excludeFields List of fields to skip on serialization. - * @member {boolean} excludeEmpty True, if empty fields get excluded from serialization. - * @member {string} baseUri Base URI for xlink:ref elements - */ -export interface Conf { - model: Dataset; - dom?: XMLBuilder; - excludeFields: Array<string>; - excludeEmpty: boolean; - baseUri: string; -} - -export default class XmlModel { - private config: Conf; - // private strategy = null; - private cache: DocumentXmlCache | null = null; - private _caching = false; - private strategy: Strategy; - - constructor(dataset: Dataset) { - // $this->strategy = new Strategy();// Opus_Model_Xml_Version1; - // $this->config = new Conf(); - // $this->strategy->setup($this->config); - - this.config = { - excludeEmpty: false, - baseUri: '', - excludeFields: [], - model: dataset, - }; - - this.strategy = new Strategy({ - excludeEmpty: true, - baseUri: '', - excludeFields: [], - model: dataset, - }); - } - - set model(model: Dataset) { - this.config.model = model; - } - - public excludeEmptyFields(): void { - this.config.excludeEmpty = true; - } - - get xmlCache(): DocumentXmlCache | null { - return this.cache; - } - - set xmlCache(cache: DocumentXmlCache) { - this.cache = cache; - } - - get caching(): boolean { - return this._caching; - } - set caching(caching: boolean) { - this._caching = caching; - } - - public async getDomDocument(): Promise<XMLBuilder | null> { - const dataset = this.config.model; - - let domDocument: XMLBuilder | null = await this.getDomDocumentFromXmlCache(); - if (domDocument == null) { - domDocument = await this.strategy.createDomDocument(); - // domDocument = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '<root></root>'); - if (this._caching) { - // caching is desired: - this.cache = this.cache || new DocumentXmlCache(); - this.cache.document_id = dataset.id; - this.cache.xml_version = 1; // (int)$this->strategy->getVersion(); - this.cache.server_date_modified = dataset.server_date_modified.toFormat('yyyy-MM-dd HH:mm:ss'); - this.cache.xml_data = domDocument.end(); - await this.cache.save(); - } - const node = domDocument.find( - (n) => { - const test = n.node.nodeName == 'Rdr_Dataset'; - return test; - }, - false, - true, - )?.node; - if (node != undefined) { - domDocument = builder({ version: '1.0', encoding: 'UTF-8', standalone: true }, node); - } - } - return domDocument; - } - - private async getDomDocumentFromXmlCache(): Promise<XMLBuilder | null> { - const dataset: Dataset = this.config.model; - if (!this.cache) { - return null; - } - //.toFormat('YYYY-MM-DD HH:mm:ss'); - let date: DateTime = dataset.server_date_modified; - const actuallyCached: boolean = await DocumentXmlCache.hasValidEntry(dataset.id, date); - if (!actuallyCached) { - return null; - } - //cache is actual return it for oai: - try { - if (this.cache) { - return this.cache.getDomDocument(); - } else { - return null; - } - } catch (error) { - return null; - } - } -} diff --git a/app/controllers/projects_controller.ts b/app/controllers/projects_controller.ts new file mode 100644 index 0000000..21e20df --- /dev/null +++ b/app/controllers/projects_controller.ts @@ -0,0 +1,54 @@ +// app/controllers/projects_controller.ts +import Project from '#models/project'; +import type { HttpContext } from '@adonisjs/core/http'; +import { createProjectValidator, updateProjectValidator } from '#validators/project'; + +export default class ProjectsController { + // GET /settings/projects + public async index({ inertia, auth }: HttpContext) { + const projects = await Project.all(); + // return inertia.render('Admin/Project/Index', { projects }); + return inertia.render('Admin/Project/Index', { + projects: projects, + can: { + edit: await auth.user?.can(['settings']), + create: await auth.user?.can(['settings']), + }, + }); + } + + // GET /settings/projects/create + public async create({ inertia }: HttpContext) { + return inertia.render('Admin/Project/Create'); + } + + // POST /settings/projects + public async store({ request, response, session }: HttpContext) { + // Validate the request data + const data = await request.validateUsing(createProjectValidator); + + await Project.create(data); + + session.flash('success', 'Project created successfully'); + return response.redirect().toRoute('settings.project.index'); + } + + // GET /settings/projects/:id/edit + public async edit({ params, inertia }: HttpContext) { + const project = await Project.findOrFail(params.id); + return inertia.render('Admin/Project/Edit', { project }); + } + + // PUT /settings/projects/:id + public async update({ params, request, response, session }: HttpContext) { + const project = await Project.findOrFail(params.id); + + // Validate the request data + const data = await request.validateUsing(updateProjectValidator); + + await project.merge(data).save(); + + session.flash('success', 'Project updated successfully'); + return response.redirect().toRoute('settings.project.index'); + } +} diff --git a/app/exceptions/db_handler.ts b/app/exceptions/db_handler.ts new file mode 100644 index 0000000..868fec9 --- /dev/null +++ b/app/exceptions/db_handler.ts @@ -0,0 +1,43 @@ +// import { Exception } from '@adonisjs/core/exceptions' +import { HttpContext, ExceptionHandler } from '@adonisjs/core/http'; + +export default class DbHandlerException extends ExceptionHandler { + // constructor() { + // super(Logger) + // } + + async handle(error: any, ctx: HttpContext) { + // Check for AggregateError type + if (error.type === 'AggregateError' && error.aggregateErrors) { + const dbErrors = error.aggregateErrors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432); + + if (dbErrors) { + return ctx.response.status(503).json({ + status: 'error', + message: 'PostgreSQL database connection failed. Please ensure the database service is running.', + details: { + code: error.code, + type: error.type, + ports: error.aggregateErrors.map((err: any) => ({ + port: err.port, + address: err.address, + })), + }, + }); + } + } + + // Handle simple ECONNREFUSED errors + if (error.code === 'ECONNREFUSED') { + return ctx.response.status(503).json({ + status: 'error', + message: 'Database connection failed. Please ensure PostgreSQL is running.', + code: error.code, + }); + } + + return super.handle(error, ctx); + } + + static status = 500; +} diff --git a/app/exceptions/handler.ts b/app/exceptions/handler.ts index d8f1c63..a460c3d 100644 --- a/app/exceptions/handler.ts +++ b/app/exceptions/handler.ts @@ -46,6 +46,7 @@ export default class HttpExceptionHandler extends ExceptionHandler { // return view.render('./errors/server-error', { error }); // }, // }; + protected statusPages: Record<StatusPageRange, StatusPageRenderer> = { '404': (error, { inertia }) => { return inertia.render('Errors/ServerError', { @@ -58,9 +59,47 @@ export default class HttpExceptionHandler extends ExceptionHandler { return inertia.render('Errors/ServerError', { error: error.message, code: error.status, - }); + }); + }, + // '500': (error, { inertia }) => { + // return inertia.render('Errors/postgres_error', { + // status: 'error', + // message: 'PostgreSQL database connection failed. Please ensure the database service is running.', + // details: { + // code: error.code, + // type: error.status, + // ports: error.errors.map((err: any) => ({ + // port: err.port, + // address: err.address, + // })), + // }, + // }); + // }, + '500..599': (error, { inertia }) => { + if (error.code === 'ECONNREFUSED') { + const dbErrors = error.errors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432); + + if (dbErrors) { + return inertia.render('Errors/postgres_error', { + status: 'error', + message: 'PostgreSQL database connection failed. Please ensure the database service is running.', + details: { + code: error.code, + type: error.status, + ports: error.errors.map((err: any) => ({ + port: err.port, + address: err.address, + })), + }, + }); + } + } else { + return inertia.render('Errors/ServerError', { + error: error.message, + code: error.status, + }); + } }, - '500..599': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }), }; // constructor() { @@ -68,7 +107,7 @@ export default class HttpExceptionHandler extends ExceptionHandler { // } public async handle(error: any, ctx: HttpContext) { - const { response, request, session } = ctx; + const { response, request, session, inertia } = ctx; /** * Handle failed authentication attempt @@ -82,6 +121,47 @@ export default class HttpExceptionHandler extends ExceptionHandler { // return response.redirect('/dashboard'); // } + // Handle Axios errors + if (error.code === 'ECONNREFUSED') { + const dbErrors = error.errors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432); + + if (dbErrors) { + // return ctx.response.status(503).json({ + // status: 'error', + // message: 'PostgreSQL database connection failed. Please ensure the database service is running.', + // details: { + // code: error.code, + // type: error.status, + // ports: error.errors.map((err: any) => ({ + // port: err.port, + // address: err.address, + // })), + // }, + // }); + // return inertia.render('Errors/postgres_error', { + // status: 'error', + // message: 'PostgreSQL database connection failed. Please ensure the database service is running.', + // details: { + // code: error.code, + // type: error.status, + // ports: error.errors.map((err: any) => ({ + // port: err.port, + // address: err.address, + // })), + // }, + // }); + } + } + + // Handle simple ECONNREFUSED errors + // if (error.code === 'ECONNREFUSED') { + // return ctx.response.status(503).json({ + // status: 'error', + // message: 'Database connection failed. Please ensure PostgreSQL is running.', + // code: error.code, + // }); + // } + // https://github.com/inertiajs/inertia-laravel/issues/56 // let test = response.getStatus(); //200 // let header = request.header('X-Inertia'); // true @@ -98,12 +178,21 @@ export default class HttpExceptionHandler extends ExceptionHandler { // ->toResponse($request) // ->setStatusCode($response->status()); } + + // Handle simple ECONNREFUSED errors + // if (error.code === 'ECONNREFUSED') { + // return ctx.response.status(503).json({ + // status: 'error', + // message: 'Database connection failed. Please ensure PostgreSQL is running.', + // code: error.code, + // }); + // } // Dynamically change the error templates based on the absence of X-Inertia header // if (!ctx.request.header('X-Inertia')) { // this.statusPages = { - // '401..403': (error, { view }) => view.render('./errors/unauthorized', { error }), - // '404': (error, { view }) => view.render('./errors/not-found', { error }), - // '500..599': (error, { view }) => view.render('./errors/server-error', { error }), + // '401..403': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }), + // '404': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }), + // '500..599': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }), // }; // } diff --git a/app/models/DocumentXmlCache.ts b/app/models/DocumentXmlCache.ts index ed7315e..de8defc 100644 --- a/app/models/DocumentXmlCache.ts +++ b/app/models/DocumentXmlCache.ts @@ -4,7 +4,8 @@ import { builder, create } from 'xmlbuilder2'; import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; import db from '@adonisjs/lucid/services/db'; import { DateTime } from 'luxon'; -import type { BelongsTo } from "@adonisjs/lucid/types/relations"; +import type { BelongsTo } from '@adonisjs/lucid/types/relations'; +import logger from '@adonisjs/core/services/logger'; export default class DocumentXmlCache extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); @@ -66,33 +67,38 @@ export default class DocumentXmlCache extends BaseModel { } /** - * Check if a dataset in a specific xml version is already cached or not. + * Check if a valid (non-stale) cache entry exists + * Cache is valid only if it was created AFTER the dataset's last modification * - * @param mixed datasetId - * @param mixed serverDateModified - * @returns {Promise<boolean>} Returns true on cached hit else false. + * @param datasetId - The dataset ID to check + * @param datasetServerDateModified - The dataset's last modification timestamp + * @returns true if valid cache exists, false otherwise */ - // public static async hasValidEntry(datasetId: number, datasetServerDateModified: DateTime): Promise<boolean> { - // // const formattedDate = dayjs(datasetServerDateModified).format('YYYY-MM-DD HH:mm:ss'); - - // const query = Database.from(this.table) - // .where('document_id', datasetId) - // .where('server_date_modified', '2023-08-17 16:51:03') - // .first(); - - // const row = await query; - // return !!row; - // } - - // Assuming 'DocumentXmlCache' has a table with a 'server_date_modified' column in your database public static async hasValidEntry(datasetId: number, datasetServerDateModified: DateTime): Promise<boolean> { const serverDateModifiedString: string = datasetServerDateModified.toFormat('yyyy-MM-dd HH:mm:ss'); // Convert DateTime to ISO string - const query = db.from(this.table) + + const row = await db + .from(this.table) .where('document_id', datasetId) - .where('server_date_modified', '>=', serverDateModifiedString) // Check if server_date_modified is newer or equal + .where('server_date_modified', '>', serverDateModifiedString) // Check if server_date_modified is newer or equal .first(); - const row = await query; - return !!row; + const isValid = !!row; + + if (isValid) { + logger.debug(`Valid cache found for dataset ${datasetId}`); + } else { + logger.debug(`No valid cache for dataset ${datasetId} (dataset modified: ${serverDateModifiedString})`); + } + + return isValid; + } + + /** + * Invalidate (delete) cache entry + */ + public async invalidate(): Promise<void> { + await this.delete(); + logger.debug(`Invalidated cache for document ${this.document_id}`); } } diff --git a/app/models/dataset.ts b/app/models/dataset.ts index 73ca3a0..1233a28 100644 --- a/app/models/dataset.ts +++ b/app/models/dataset.ts @@ -209,6 +209,15 @@ export default class Dataset extends DatasetExtension { return mainTitle ? mainTitle.value : null; } + @computed({ + serializeAs: 'doi_identifier', + }) + public get doiIdentifier() { + // return `${this.firstName} ${this.lastName}`; + const identifier: DatasetIdentifier = this.identifier; + return identifier ? identifier.value : null; + } + @manyToMany(() => Person, { pivotForeignKey: 'document_id', pivotRelatedForeignKey: 'person_id', diff --git a/app/models/file.ts b/app/models/file.ts index fc129de..3d9145f 100644 --- a/app/models/file.ts +++ b/app/models/file.ts @@ -3,12 +3,12 @@ import { column, hasMany, belongsTo, SnakeCaseNamingStrategy, computed } from '@ import HashValue from './hash_value.js'; import Dataset from './dataset.js'; import BaseModel from './base_model.js'; -// import { Buffer } from 'buffer'; import * as fs from 'fs'; import crypto from 'crypto'; // import Drive from '@ioc:Adonis/Core/Drive'; // import Drive from '@adonisjs/drive'; -import drive from '#services/drive'; +// import drive from '#services/drive'; +import drive from '@adonisjs/drive/services/main'; import type { HasMany } from "@adonisjs/lucid/types/relations"; import type { BelongsTo } from "@adonisjs/lucid/types/relations"; @@ -88,7 +88,8 @@ export default class File extends BaseModel { serializeAs: 'filePath', }) public get filePath() { - return `/storage/app/public/${this.pathName}`; + // return `/storage/app/public/${this.pathName}`; + return `/storage/app/data/${this.pathName}`; // const mainTitle = this.titles?.find((title) => title.type === 'Main'); // return mainTitle ? mainTitle.value : null; } @@ -165,7 +166,7 @@ export default class File extends BaseModel { public async delete() { if (this.pathName) { // Delete file from additional storage - await drive.delete(this.pathName); + await drive.use('local').delete(this.pathName); } // Call the original delete method of the BaseModel to remove the record from the database diff --git a/app/models/mime_type.ts b/app/models/mime_type.ts index 52d614f..cf62678 100644 --- a/app/models/mime_type.ts +++ b/app/models/mime_type.ts @@ -16,9 +16,14 @@ export default class MimeType extends BaseModel { @column({}) public name: string; + // 1 : n file_extensions are separated by '|' in the database @column({}) public file_extension: string; + // 1 : n alternate_mimetype are separated by '|' in the database + @column({}) + public alternate_mimetype: string; + @column({}) public enabled: boolean; diff --git a/app/models/person.ts b/app/models/person.ts index 3feff8a..f4cf3a2 100644 --- a/app/models/person.ts +++ b/app/models/person.ts @@ -3,7 +3,7 @@ import { DateTime } from 'luxon'; import dayjs from 'dayjs'; import Dataset from './dataset.js'; import BaseModel from './base_model.js'; -import type { ManyToMany } from "@adonisjs/lucid/types/relations"; +import type { ManyToMany } from '@adonisjs/lucid/types/relations'; export default class Person extends BaseModel { public static namingStrategy = new SnakeCaseNamingStrategy(); @@ -30,7 +30,7 @@ export default class Person extends BaseModel { @column({}) public lastName: string; - @column({}) + @column({ columnName: 'identifier_orcid' }) public identifierOrcid: string; @column({}) @@ -51,7 +51,7 @@ export default class Person extends BaseModel { serializeAs: 'name', }) public get fullName() { - return `${this.firstName} ${this.lastName}`; + return [this.firstName, this.lastName].filter(Boolean).join(' '); } // @computed() @@ -64,10 +64,12 @@ export default class Person extends BaseModel { // return '2023-03-21 08:45:00'; // } - @computed() + @computed({ + serializeAs: 'dataset_count', + }) public get datasetCount() { const stock = this.$extras.datasets_count; //my pivot column name was "stock" - return stock; + return Number(stock); } @computed() @@ -76,6 +78,16 @@ export default class Person extends BaseModel { return contributor_type; } + @computed({ serializeAs: 'allow_email_contact' }) + public get allowEmailContact() { + // If the datasets relation is missing or empty, return false instead of null. + if (!this.datasets || this.datasets.length === 0) { + return false; + } + // Otherwise return the pivot attribute from the first related dataset. + return this.datasets[0].$extras?.pivot_allow_email_contact; + } + @manyToMany(() => Dataset, { pivotForeignKey: 'person_id', pivotRelatedForeignKey: 'document_id', @@ -83,4 +95,34 @@ export default class Person extends BaseModel { pivotColumns: ['role', 'sort_order', 'allow_email_contact'], }) public datasets: ManyToMany<typeof Dataset>; + + // public toJSON() { + // const json = super.toJSON(); + + // // Check if this person is loaded through a pivot relationship with sensitive roles + // const pivotRole = this.$extras?.pivot_role; + // if (pivotRole === 'author' || pivotRole === 'contributor') { + // // Remove sensitive information for public-facing roles + // delete json.email; + // // delete json.identifierOrcid; + // } + + // return json; + // } + + // @afterFind() + // public static async afterFindHook(person: Person) { + // if (person.$extras?.pivot_role === 'author' || person.$extras?.pivot_role === 'contributor') { + // person.email = undefined as any; + // } + // } + + // @afterFetch() + // public static async afterFetchHook(persons: Person[]) { + // persons.forEach(person => { + // if (person.$extras?.pivot_role === 'author' || person.$extras?.pivot_role === 'contributor') { + // person.email = undefined as any; + // } + // }); + // } } diff --git a/app/models/types.ts b/app/models/types.ts new file mode 100644 index 0000000..1fda1e1 --- /dev/null +++ b/app/models/types.ts @@ -0,0 +1,57 @@ +/** + * Qs module config + */ +type QueryStringConfig = { + depth?: number + allowPrototypes?: boolean + plainObjects?: boolean + parameterLimit?: number + arrayLimit?: number + ignoreQueryPrefix?: boolean + delimiter?: RegExp | string + allowDots?: boolean + charset?: 'utf-8' | 'iso-8859-1' | undefined + charsetSentinel?: boolean + interpretNumericEntities?: boolean + parseArrays?: boolean + comma?: boolean + } +/** + * Base config used by all types + */ +type BodyParserBaseConfig = { + encoding: string + limit: string | number + types: string[] + } + + /** + * Body parser config for parsing JSON requests + */ + export type BodyParserJSONConfig = BodyParserBaseConfig & { + strict: boolean + convertEmptyStringsToNull: boolean + } + + /** + * Parser config for parsing form data + */ + export type BodyParserFormConfig = BodyParserBaseConfig & { + queryString: QueryStringConfig + convertEmptyStringsToNull: boolean + } + + /** + * Parser config for parsing raw body (untouched) + */ + export type BodyParserRawConfig = BodyParserBaseConfig +/** + * Body parser config for all supported form types + */ +export type BodyParserConfig = { + allowedMethods: string[] + json: BodyParserJSONConfig + form: BodyParserFormConfig + raw: BodyParserRawConfig + multipart: BodyParserMultipartConfig + } \ No newline at end of file diff --git a/app/models/user.ts b/app/models/user.ts index 58f1676..7be02b9 100644 --- a/app/models/user.ts +++ b/app/models/user.ts @@ -1,6 +1,6 @@ import { DateTime } from 'luxon'; import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'; -import { column, manyToMany, hasMany, SnakeCaseNamingStrategy } from '@adonisjs/lucid/orm'; +import { column, manyToMany, hasMany, SnakeCaseNamingStrategy, computed, beforeFetch, beforeFind } from '@adonisjs/lucid/orm'; import hash from '@adonisjs/core/services/hash'; import Role from './role.js'; import db from '@adonisjs/lucid/services/db'; @@ -49,7 +49,6 @@ export default class User extends compose(BaseModel, AuthFinder) { @column() public login: string; - @column() public firstName: string; @@ -87,17 +86,8 @@ export default class User extends compose(BaseModel, AuthFinder) { @column({}) public state: number; - // @hasOne(() => TotpSecret, { - // foreignKey: 'user_id', - // }) - // public totp_secret: HasOne<typeof TotpSecret>; - - // @beforeSave() - // public static async hashPassword(user: User) { - // if (user.$dirty.password) { - // user.password = await hash.use('laravel').make(user.password); - // } - // } + @column({}) + public avatar: string; public get isTwoFactorEnabled(): boolean { return Boolean(this?.twoFactorSecret && this.state == TotpState.STATE_ENABLED); @@ -121,6 +111,29 @@ export default class User extends compose(BaseModel, AuthFinder) { }) public backupcodes: HasMany<typeof BackupCode>; + @computed({ + serializeAs: 'is_admin', + }) + public get isAdmin(): boolean { + const roles = this.roles; + const isAdmin = roles?.map((role: Role) => role.name).includes('administrator'); + return isAdmin; + } + + // public toJSON() { + // return { + // ...super.toJSON(), + // roles: [] + // }; + // } + @beforeFind() + @beforeFetch() + public static preloadRoles(user: User) { + user.preload('roles', (builder) => { + builder.select(['id', 'name', 'display_name', 'description']); + }); + } + public async getBackupCodes(this: User): Promise<BackupCode[]> { const test = await this.related('backupcodes').query(); // return test.map((role) => role.code); diff --git a/app/utils/utility-functions.ts b/app/utils/utility-functions.ts index 6afb2a0..a281f59 100644 --- a/app/utils/utility-functions.ts +++ b/app/utils/utility-functions.ts @@ -1,3 +1,16 @@ +import { join, isAbsolute } from 'node:path'; +import type { BodyParserConfig } from '#models/types'; +import { createId } from '@paralleldrive/cuid2'; +import { tmpdir } from 'node:os'; +import config from '@adonisjs/core/services/config'; +import Dataset from '#models/dataset'; +import { TransactionClientContract } from '@adonisjs/lucid/types/database'; +import Person from '#models/person'; + +interface Dictionary { + [index: string]: string; +} + export function sum(a: number, b: number): number { return a + b; } @@ -24,3 +37,88 @@ export function preg_match(regex: RegExp, str: string) { const result: boolean = regex.test(str); return result; } + +/** + * Returns the tmp path for storing the files temporarly + */ +export function getTmpPath(config: BodyParserConfig['multipart']): string { + if (typeof config.tmpFileName === 'function') { + const tmpPath = config.tmpFileName(); + return isAbsolute(tmpPath) ? tmpPath : join(tmpdir(), tmpPath); + } + + return join(tmpdir(), createId()); +} +/** + * Returns config for a given type + */ +export function getConfigFor<K extends keyof BodyParserConfig>(type: K): BodyParserConfig[K] { + const bodyParserConfig: BodyParserConfig = config.get('bodyparser'); + const configType = bodyParserConfig[type]; + return configType; +} + +export function parseBytesSize(size: string): number { + const units: Record<string, number> = { + kb: 1024, + mb: 1024 * 1024, + gb: 1024 * 1024 * 1024, + tb: 1024 * 1024 * 1024 * 1024, + }; + + const match = size.match(/^(\d+)(kb|mb|gb|tb)$/i); // Regex to match size format + + if (!match) { + throw new Error('Invalid size format'); + } + + const [, value, unit] = match; + return parseInt(value) * units[unit.toLowerCase()]; +} + +// Helper function to format bytes as human-readable text + +export function formatBytes(bytes: number): string { + if (bytes === 0) return '0 Bytes'; + const k = 1024; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; +} + +export async function savePersons(dataset: Dataset, persons: any[], role: string, trx: TransactionClientContract) { + for (const [key, person] of persons.entries()) { + const pivotData = { + role: role, + sort_order: key + 1, + allow_email_contact: false, + ...extractPivotAttributes(person), // Merge pivot attributes here + }; + + if (person.id !== undefined) { + await dataset + .useTransaction(trx) + .related('persons') + .attach({ + [person.id]: pivotData, + }); + } else { + const dataPerson = new Person(); + dataPerson.fill(person); + await dataset.useTransaction(trx).related('persons').save(dataPerson, false, pivotData); + } + } +} + +// Helper function to extract pivot attributes from a person object +function extractPivotAttributes(person: any) { + const pivotAttributes: Dictionary = {}; + for (const key in person) { + if (key.startsWith('pivot_')) { + // pivotAttributes[key] = person[key]; + const cleanKey = key.replace('pivot_', ''); // Remove 'pivot_' prefix + pivotAttributes[cleanKey] = person[key]; + } + } + return pivotAttributes; +} diff --git a/app/validators/dataset.ts b/app/validators/dataset.ts index 2b92348..f670b81 100644 --- a/app/validators/dataset.ts +++ b/app/validators/dataset.ts @@ -1,6 +1,7 @@ import vine, { SimpleMessagesProvider } from '@vinejs/vine'; import { TitleTypes, DescriptionTypes, ContributorTypes, ReferenceIdentifierTypes, RelationTypes } from '#contracts/enums'; import dayjs from 'dayjs'; + // import MimeType from '#models/mime_type'; // const enabledExtensions = await MimeType.query().select('file_extension').where('enabled', true).exec(); @@ -39,7 +40,8 @@ export const createDatasetValidator = vine.compile( .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(2) + .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }), descriptions: vine .array( vine.object({ @@ -53,7 +55,8 @@ export const createDatasetValidator = vine.compile( .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(1), + .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }), authors: vine .array( vine.object({ @@ -64,8 +67,9 @@ export const createDatasetValidator = vine.compile( .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), }), ) .minLength(1) @@ -80,9 +84,10 @@ export const createDatasetValidator = vine.compile( .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), }), ) .distinct('email') @@ -125,7 +130,7 @@ export const createDatasetValidator = vine.compile( references: vine .array( vine.object({ - value: vine.string().trim().minLength(3).maxLength(255), + value: vine.string().trim().minLength(3).maxLength(255).validateReference({ typeField: 'type' }), type: vine.enum(Object.values(ReferenceIdentifierTypes)), relation: vine.enum(Object.values(RelationTypes)), label: vine.string().trim().minLength(2).maxLength(255), @@ -186,7 +191,8 @@ export const updateDatasetValidator = vine.compile( .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + // .minLength(2) + .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }), descriptions: vine .array( vine.object({ @@ -200,7 +206,7 @@ export const updateDatasetValidator = vine.compile( .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), }), ) - .minLength(1), + .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }), authors: vine .array( vine.object({ @@ -211,8 +217,9 @@ export const updateDatasetValidator = vine.compile( .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), }), ) .minLength(1) @@ -227,8 +234,9 @@ export const updateDatasetValidator = vine.compile( .email() .normalizeEmail() .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), - first_name: vine.string().trim().minLength(3).maxLength(255), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), }), ) @@ -272,7 +280,7 @@ export const updateDatasetValidator = vine.compile( references: vine .array( vine.object({ - value: vine.string().trim().minLength(3).maxLength(255), + value: vine.string().trim().minLength(3).maxLength(255).validateReference({ typeField: 'type' }), type: vine.enum(Object.values(ReferenceIdentifierTypes)), relation: vine.enum(Object.values(RelationTypes)), label: vine.string().trim().minLength(2).maxLength(255), @@ -302,21 +310,149 @@ export const updateDatasetValidator = vine.compile( .fileScan({ removeInfected: true }), ) .dependentArrayMinLength({ dependentArray: 'fileInputs', min: 1 }), - fileInputs: vine.array( - vine.object({ - label: vine.string().trim().maxLength(100), - //extnames: extensions, - }), - ), + fileInputs: vine + .array( + vine.object({ + label: vine.string().trim().maxLength(100), + }), + ) + .optional(), }), ); -// files: schema.array([rules.minLength(1)]).members( -// schema.file({ -// size: '512mb', -// extnames: ['jpg', 'gif', 'png', 'tif', 'pdf', 'zip', 'fgb', 'nc', 'qml', 'ovr', 'gpkg', 'gml', 'gpx', 'kml', 'kmz', 'json'], -// }), -// ), +export const updateEditorDatasetValidator = vine.compile( + vine.object({ + // first step + language: vine + .string() + .trim() + .regex(/^[a-zA-Z0-9]+$/), + licenses: vine.array(vine.number()).minLength(1), // define at least one license for the new dataset + rights: vine.string().in(['true']), + // second step + type: vine.string().trim().minLength(3).maxLength(255), + creating_corporation: vine.string().trim().minLength(3).maxLength(255), + titles: vine + .array( + vine.object({ + value: vine.string().trim().minLength(3).maxLength(255), + type: vine.enum(Object.values(TitleTypes)), + language: vine + .string() + .trim() + .minLength(2) + .maxLength(255) + .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), + }), + ) + // .minLength(2) + .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }), + descriptions: vine + .array( + vine.object({ + value: vine.string().trim().minLength(3).maxLength(2500), + type: vine.enum(Object.values(DescriptionTypes)), + language: vine + .string() + .trim() + .minLength(2) + .maxLength(255) + .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }), + }), + ) + .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }), + authors: vine + .array( + vine.object({ + email: vine + .string() + .trim() + .maxLength(255) + .email() + .normalizeEmail() + .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), + last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), + }), + ) + .minLength(1) + .distinct('email'), + contributors: vine + .array( + vine.object({ + email: vine + .string() + .trim() + .maxLength(255) + .email() + .normalizeEmail() + .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }), + first_name: vine.string().trim().minLength(3).maxLength(255).optional().requiredWhen('name_type', '=', 'Personal'), + last_name: vine.string().trim().minLength(3).maxLength(255), + identifier_orcid: vine.string().trim().maxLength(255).orcid().optional(), + pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), + }), + ) + .distinct('email') + .optional(), + // third step + project_id: vine.number().optional(), + // embargo_date: schema.date.optional({ format: 'yyyy-MM-dd' }, [rules.after(10, 'days')]), + embargo_date: vine + .date({ + formats: ['YYYY-MM-DD'], + }) + .afterOrEqual((_field) => { + return dayjs().add(10, 'day').format('YYYY-MM-DD'); + }) + .optional(), + coverage: vine.object({ + x_min: vine.number(), + x_max: vine.number(), + y_min: vine.number(), + y_max: vine.number(), + elevation_absolut: vine.number().positive().optional(), + elevation_min: vine.number().positive().optional().requiredIfExists('elevation_max'), + elevation_max: vine.number().positive().optional().requiredIfExists('elevation_min'), + // type: vine.enum(Object.values(DescriptionTypes)), + depth_absolut: vine.number().negative().optional(), + depth_min: vine.number().negative().optional().requiredIfExists('depth_max'), + depth_max: vine.number().negative().optional().requiredIfExists('depth_min'), + time_abolute: vine.date({ formats: { utc: true } }).optional(), + time_min: vine + .date({ formats: { utc: true } }) + .beforeField('time_max') + .optional() + .requiredIfExists('time_max'), + time_max: vine + .date({ formats: { utc: true } }) + .afterField('time_min') + .optional() + .requiredIfExists('time_min'), + }), + references: vine + .array( + vine.object({ + value: vine.string().trim().minLength(3).maxLength(255).validateReference({ typeField: 'type' }), + type: vine.enum(Object.values(ReferenceIdentifierTypes)), + relation: vine.enum(Object.values(RelationTypes)), + label: vine.string().trim().minLength(2).maxLength(255), + }), + ) + .optional(), + subjects: vine + .array( + vine.object({ + value: vine.string().trim().minLength(3).maxLength(255), + // pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)), + language: vine.string().trim().minLength(2).maxLength(255), + }), + ) + .minLength(3) + .distinct('value'), + }), +); let messagesProvider = new SimpleMessagesProvider({ 'minLength': '{{ field }} must be at least {{ min }} characters long', @@ -368,8 +504,10 @@ let messagesProvider = new SimpleMessagesProvider({ 'files.array.minLength': 'At least {{ min }} file upload is required.', 'files.*.size': 'file size is to big', 'files.*.extnames': 'file extension is not supported', + 'embargo_date.date.afterOrEqual': `Embargo date must be on or after ${dayjs().add(10, 'day').format('DD.MM.YYYY')}`, }); createDatasetValidator.messagesProvider = messagesProvider; updateDatasetValidator.messagesProvider = messagesProvider; +updateEditorDatasetValidator.messagesProvider = messagesProvider; // export default createDatasetValidator; diff --git a/app/validators/project.ts b/app/validators/project.ts new file mode 100644 index 0000000..7f3d1f8 --- /dev/null +++ b/app/validators/project.ts @@ -0,0 +1,28 @@ +// app/validators/project.ts +import vine from '@vinejs/vine'; + +export const createProjectValidator = vine.compile( + vine.object({ + label: vine.string().trim().minLength(1).maxLength(50) .regex(/^[a-z0-9-]+$/), + name: vine + .string() + .trim() + .minLength(3) + .maxLength(255) + .regex(/^[a-zA-Z0-9äöüßÄÖÜ\s-]+$/), + description: vine.string().trim().maxLength(255).minLength(5).optional(), + }), +); + +export const updateProjectValidator = vine.compile( + vine.object({ + // label is NOT included since it's readonly + name: vine + .string() + .trim() + .minLength(3) + .maxLength(255) + .regex(/^[a-zA-Z0-9äöüßÄÖÜ\s-]+$/), + description: vine.string().trim().maxLength(255).minLength(5).optional(), + }), +); diff --git a/app/validators/role.ts b/app/validators/role.ts index 61e8ecd..81262d9 100644 --- a/app/validators/role.ts +++ b/app/validators/role.ts @@ -8,20 +8,20 @@ export const createRoleValidator = vine.compile( vine.object({ name: vine .string() - .isUnique({ table: 'roles', column: 'name' }) .trim() .minLength(3) .maxLength(255) - .regex(/^[a-zA-Z0-9]+$/), //Must be alphanumeric with hyphens or underscores + .isUnique({ table: 'roles', column: 'name' }) + .regex(/^[a-zA-Z0-9]+$/), // Must be alphanumeric display_name: vine .string() - .isUnique({ table: 'roles', column: 'display_name' }) .trim() .minLength(3) .maxLength(255) + .isUnique({ table: 'roles', column: 'display_name' }) .regex(/^[a-zA-Z0-9]+$/), description: vine.string().trim().escape().minLength(3).maxLength(255).optional(), - permissions: vine.array(vine.number()).minLength(1), // define at least one permission for the new role + permissions: vine.array(vine.number()).minLength(1), // At least one permission required }), ); @@ -29,21 +29,28 @@ export const updateRoleValidator = vine.withMetaData<{ roleId: number }>().compi vine.object({ name: vine .string() - // .unique(async (db, value, field) => { - // const result = await db.from('roles').select('id').whereNot('id', field.meta.roleId).where('name', value).first(); - // return result.length ? false : true; - // }) + .trim() + .minLength(3) + .maxLength(255) .isUnique({ table: 'roles', column: 'name', whereNot: (field) => field.meta.roleId, }) + .regex(/^[a-zA-Z0-9]+$/), + display_name: vine + .string() .trim() .minLength(3) - .maxLength(255), - + .maxLength(255) + .isUnique({ + table: 'roles', + column: 'display_name', + whereNot: (field) => field.meta.roleId, + }) + .regex(/^[a-zA-Z0-9]+$/), description: vine.string().trim().escape().minLength(3).maxLength(255).optional(), - permissions: vine.array(vine.number()).minLength(1), // define at least one permission for the new role + permissions: vine.array(vine.number()).minLength(1), // At least one permission required }), ); diff --git a/app/validators/user.ts b/app/validators/user.ts index c87d467..b7bbd70 100644 --- a/app/validators/user.ts +++ b/app/validators/user.ts @@ -16,7 +16,7 @@ export const createUserValidator = vine.compile( first_name: vine.string().trim().minLength(3).maxLength(255), last_name: vine.string().trim().minLength(3).maxLength(255), email: vine.string().maxLength(255).email().normalizeEmail().isUnique({ table: 'accounts', column: 'email' }), - password: vine.string().confirmed().trim().minLength(3).maxLength(60), + new_password: vine.string().confirmed({ confirmationField: 'password_confirmation' }).trim().minLength(3).maxLength(60), roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user }), ); @@ -42,7 +42,7 @@ export const updateUserValidator = vine.withMetaData<{ objId: number }>().compil .email() .normalizeEmail() .isUnique({ table: 'accounts', column: 'email', whereNot: (field) => field.meta.objId }), - password: vine.string().confirmed().trim().minLength(3).maxLength(60).optional(), + new_password: vine.string().confirmed({ confirmationField: 'password_confirmation' }).trim().minLength(3).maxLength(60).optional(), roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user }), ); diff --git a/app/validators/vanilla_error_reporter.ts b/app/validators/vanilla_error_reporter.ts index fe145eb..75bd4ff 100644 --- a/app/validators/vanilla_error_reporter.ts +++ b/app/validators/vanilla_error_reporter.ts @@ -142,7 +142,7 @@ export class VanillaErrorReporter implements ErrorReporterContract { // } this.hasErrors = true; - var test = field.getFieldPath(); + // var test = field.getFieldPath(); // this.errors.push(error); // if (this.errors[error.field]) { diff --git a/clamd.conf b/clamd.conf index 171396d..f066387 100644 --- a/clamd.conf +++ b/clamd.conf @@ -5,7 +5,23 @@ LogSyslog no LogVerbose yes DatabaseDirectory /var/lib/clamav LocalSocket /var/run/clamav/clamd.socket +# LocalSocketMode 666 +# Optional: allow multiple threads +MaxThreads 20 +# Disable TCP socket +# TCPSocket 0 + +# TCP port address. +# Default: no +# TCPSocket 3310 +# TCP address. +# By default we bind to INADDR_ANY, probably not wise. +# Enable the following to provide some degree of protection +# from the outside world. +# Default: no +# TCPAddr 127.0.0.1 + Foreground no PidFile /var/run/clamav/clamd.pid -LocalSocketGroup node -User node \ No newline at end of file +# LocalSocketGroup node # Changed from 'clamav' +# User node # Changed from 'clamav' - clamd runs as clamav user \ No newline at end of file diff --git a/commands/fix_dataset_cross_references.ts b/commands/fix_dataset_cross_references.ts new file mode 100644 index 0000000..baa2e0e --- /dev/null +++ b/commands/fix_dataset_cross_references.ts @@ -0,0 +1,482 @@ +/* +|-------------------------------------------------------------------------- +| node ace make:command fix-dataset-cross-references +| DONE: create commands/fix_dataset_cross_references.ts +|-------------------------------------------------------------------------- +*/ +import { BaseCommand, flags } from '@adonisjs/core/ace'; +import type { CommandOptions } from '@adonisjs/core/types/ace'; +import { DateTime } from 'luxon'; +import Dataset from '#models/dataset'; +import DatasetReference from '#models/dataset_reference'; +import AppConfig from '#models/appconfig'; +// import env from '#start/env'; + +interface MissingCrossReference { + sourceDatasetId: number; + targetDatasetId: number; + sourcePublishId: number | null; + targetPublishId: number | null; + sourceDoi: string | null; + targetDoi: string | null; + referenceType: string; + relation: string; + doi: string | null; + reverseRelation: string; + sourceReferenceLabel: string | null; +} + +export default class DetectMissingCrossReferences extends BaseCommand { + static commandName = 'detect:missing-cross-references'; + static description = 'Detect missing bidirectional cross-references between versioned datasets'; + + public static needsApplication = true; + + @flags.boolean({ alias: 'f', description: 'Fix missing cross-references automatically' }) + public fix: boolean = false; + + @flags.boolean({ alias: 'v', description: 'Verbose output' }) + public verbose: boolean = false; + + @flags.number({ alias: 'p', description: 'Filter by specific publish_id (source or target dataset)' }) + public publish_id?: number; + + // example: node ace detect:missing-cross-references --verbose -p 227 //if you want to filter by specific publish_id with details + // example: node ace detect:missing-cross-references --verbose + // example: node ace detect:missing-cross-references --fix -p 227 //if you want to filter by specific publish_id and fix it + // example: node ace detect:missing-cross-references + + public static options: CommandOptions = { + startApp: true, + staysAlive: false, + }; + + // Define the allowed relations that we want to process + private readonly ALLOWED_RELATIONS = [ + 'IsNewVersionOf', + 'IsPreviousVersionOf', + 'IsVariantFormOf', + 'IsOriginalFormOf', + 'Continues', + 'IsContinuedBy', + 'HasPart', + 'IsPartOf', + ]; + // private readonly ALLOWED_RELATIONS = ['IsPreviousVersionOf', 'IsOriginalFormOf']; + + async run() { + this.logger.info('🔍 Detecting missing cross-references...'); + this.logger.info(`📋 Processing only these relations: ${this.ALLOWED_RELATIONS.join(', ')}`); + + if (this.publish_id) { + this.logger.info(`Filtering by publish_id: ${this.publish_id}`); + } + + try { + const missingReferences = await this.findMissingCrossReferences(); + + // Store count in AppConfig if not fixing and count >= 1 + if (!this.fix && missingReferences.length >= 1) { + await this.storeMissingCrossReferencesCount(missingReferences.length); + } + + if (missingReferences.length === 0) { + const filterMsg = this.publish_id ? ` for publish_id ${this.publish_id}` : ''; + this.logger.success(`All cross-references are properly linked for the specified relations${filterMsg}!`); + // Clear the count if no missing references + if (!this.fix) { + await this.storeMissingCrossReferencesCount(0); + } + return; + } + + const filterMsg = this.publish_id ? ` (filtered by publish_id ${this.publish_id})` : ''; + this.logger.warning(`Found ${missingReferences.length} missing cross-reference(s)${filterMsg}:`); + + // Show brief list if not verbose mode + if (!this.verbose) { + for (const missing of missingReferences) { + const sourceDoi = missing.sourceDoi ? ` DOI: ${missing.sourceDoi}` : ''; + const targetDoi = missing.targetDoi ? ` DOI: ${missing.targetDoi}` : ''; + + this.logger.info( + `Dataset ${missing.sourceDatasetId} (Publish ID: ${missing.sourcePublishId}${sourceDoi}) ${missing.relation} Dataset ${missing.targetDatasetId} (Publish ID: ${missing.targetPublishId}${targetDoi}) → missing reverse: ${missing.reverseRelation}`, + ); + } + } else { + // Verbose mode - show detailed info + for (const missing of missingReferences) { + this.logger.info( + `Dataset ${missing.sourceDatasetId} references ${missing.targetDatasetId}, but reverse reference is missing`, + ); + this.logger.info(` - Reference type: ${missing.referenceType}`); + this.logger.info(` - Relation: ${missing.relation}`); + this.logger.info(` - DOI: ${missing.doi}`); + } + } + + if (this.fix) { + await this.fixMissingReferences(missingReferences); + // Clear the count after fixing + await this.storeMissingCrossReferencesCount(0); + this.logger.success('All missing cross-references have been fixed!'); + } else { + if (this.verbose) { + this.printMissingReferencesList(missingReferences); + } + this.logger.info('💡 Run with --fix flag to automatically create missing cross-references'); + if (this.publish_id) { + this.logger.info(`🎯 Currently filtering by publish_id: ${this.publish_id}`); + } + } + } catch (error) { + this.logger.error('Error detecting missing cross-references:', error); + process.exit(1); + } + } + + private async storeMissingCrossReferencesCount(count: number): Promise<void> { + try { + await AppConfig.updateOrCreate( + { + appid: 'commands', + configkey: 'missing_cross_references_count', + }, + { + configvalue: count.toString(), + }, + ); + + this.logger.info(`📊 Stored missing cross-references count in database: ${count}`); + } catch (error) { + this.logger.error('Failed to store missing cross-references count:', error); + } + } + + private async findMissingCrossReferences(): Promise<MissingCrossReference[]> { + const missingReferences: { + sourceDatasetId: number; + targetDatasetId: number; + sourcePublishId: number | null; + targetPublishId: number | null; + sourceDoi: string | null; + targetDoi: string | null; + referenceType: string; + relation: string; + doi: string | null; + reverseRelation: string; + sourceReferenceLabel: string | null; + }[] = []; + + this.logger.info('📊 Querying dataset references...'); + + // Find all references that point to Tethys datasets (DOI or URL containing tethys DOI) + // Only from datasets that are published AND only for allowed relations + const tethysReferencesQuery = DatasetReference.query() + .whereIn('type', ['DOI', 'URL']) + .whereIn('relation', this.ALLOWED_RELATIONS) // Only process allowed relations + .where((query) => { + query.where('value', 'like', '%doi.org/10.24341/tethys.%').orWhere('value', 'like', '%tethys.at/dataset/%'); + }) + .preload('dataset', (datasetQuery) => { + datasetQuery.preload('identifier'); + }) + .whereHas('dataset', (datasetQuery) => { + datasetQuery.where('server_state', 'published'); + }); + if (typeof this.publish_id === 'number') { + tethysReferencesQuery.whereHas('dataset', (datasetQuery) => { + datasetQuery.where('publish_id', this.publish_id as number); + }); + } + + const tethysReferences = await tethysReferencesQuery.exec(); + + this.logger.info(`🔗 Found ${tethysReferences.length} Tethys references from published datasets (allowed relations only)`); + + let processedCount = 0; + let skippedCount = 0; + + for (const reference of tethysReferences) { + processedCount++; + + // if (this.verbose && processedCount % 10 === 0) { + // this.logger.info(`📈 Processed ${processedCount}/${tethysReferences.length} references...`); + // } + + // Double-check that this relation is in our allowed list (safety check) + if (!this.ALLOWED_RELATIONS.includes(reference.relation)) { + skippedCount++; + if (this.verbose) { + this.logger.info(`⏭️ Skipping relation "${reference.relation}" - not in allowed list`); + } + continue; + } + + // Extract dataset publish_id from DOI or URL + // const targetDatasetPublish = this.extractDatasetPublishIdFromReference(reference.value); + // Extract DOI from reference URL + const doi = this.extractDoiFromReference(reference.value); + + // if (!targetDatasetPublish) { + // if (this.verbose) { + // this.logger.warning(`Could not extract publish ID from: ${reference.value}`); + // } + // continue; + // } + if (!doi) { + if (this.verbose) { + this.logger.warning(`Could not extract DOI from: ${reference.value}`); + } + continue; + } + + // // Check if target dataset exists and is published + // const targetDataset = await Dataset.query() + // .where('publish_id', targetDatasetPublish) + // .where('server_state', 'published') + // .preload('identifier') + // .first(); + // Check if target dataset exists and is published by querying via identifier + const targetDataset = await Dataset.query() + .where('server_state', 'published') + .whereHas('identifier', (query) => { + query.where('value', doi); + }) + .preload('identifier') + .first(); + + if (!targetDataset) { + if (this.verbose) { + this.logger.warning(`⚠️ Target dataset with publish_id ${doi} not found or not published`); + } + continue; + } + + // Ensure we have a valid source dataset with proper preloading + if (!reference.dataset) { + this.logger.warning(`⚠️ Source dataset ${reference.document_id} not properly loaded, skipping...`); + continue; + } + + // Check if reverse reference exists + const reverseReferenceExists = await this.checkReverseReferenceExists( + targetDataset.id, + reference.document_id, + reference.relation, + reference.dataset.identifier.value + ); + + if (!reverseReferenceExists) { + const reverseRelation = this.getReverseRelation(reference.relation); + if (reverseRelation) { + // Only add if we have a valid reverse relation + missingReferences.push({ + sourceDatasetId: reference.document_id, + targetDatasetId: targetDataset.id, + sourcePublishId: reference.dataset.publish_id || null, + targetPublishId: targetDataset.publish_id || null, + referenceType: reference.type, + relation: reference.relation, + doi: reference.value, + reverseRelation: reverseRelation, + sourceDoi: reference.dataset.identifier ? reference.dataset.identifier.value : null, + targetDoi: targetDataset.identifier ? targetDataset.identifier.value : null, + sourceReferenceLabel: reference.label || null, + }); + } + } + } + + this.logger.info(`✅ Processed ${processedCount} references (${skippedCount} skipped due to relation filtering)`); + return missingReferences; + } + + private extractDoiFromReference(reference: string): string | null { + // Match DOI pattern, with or without URL prefix + const doiPattern = /(?:https?:\/\/)?(?:doi\.org\/)?(.+)/i; + const match = reference.match(doiPattern); + + if (match && match[1]) { + return match[1]; // Returns just "10.24341/tethys.99.2" + } + + return null; + } + + private extractDatasetPublishIdFromReference(value: string): number | null { + // Extract from DOI: https://doi.org/10.24341/tethys.107 -> 107 + const doiMatch = value.match(/10\.24341\/tethys\.(\d+)/); + if (doiMatch) { + return parseInt(doiMatch[1]); + } + + // Extract from URL: https://tethys.at/dataset/107 -> 107 + const urlMatch = value.match(/tethys\.at\/dataset\/(\d+)/); + if (urlMatch) { + return parseInt(urlMatch[1]); + } + + return null; + } + + private async checkReverseReferenceExists( + targetDatasetId: number, + sourceDatasetId: number, + originalRelation: string, + sourceDatasetIdentifier: string | null, + ): Promise<boolean> { + const reverseRelation = this.getReverseRelation(originalRelation); + + if (!reverseRelation) { + return true; // If no reverse relation is defined, consider it as "exists" to skip processing + } + + // Only check for reverse references where the source dataset is also published + const reverseReference = await DatasetReference.query() + // We don't filter by source document_id here to find any incoming reference from any published dataset + .where('document_id', targetDatasetId) + // .where('related_document_id', sourceDatasetId) // Ensure it's an incoming reference + .where('relation', reverseRelation) + .where('value', 'like', `%${sourceDatasetIdentifier}`) // Basic check to ensure it points back to source dataset + .first(); + + return !!reverseReference; + } + + private getReverseRelation(relation: string): string | null { + const relationMap: Record<string, string> = { + IsNewVersionOf: 'IsPreviousVersionOf', + IsPreviousVersionOf: 'IsNewVersionOf', + IsVariantFormOf: 'IsOriginalFormOf', + IsOriginalFormOf: 'IsVariantFormOf', + Continues: 'IsContinuedBy', + IsContinuedBy: 'Continues', + HasPart: 'IsPartOf', + IsPartOf: 'HasPart', + }; + + // Only return reverse relation if it exists in our map, otherwise return null + return relationMap[relation] || null; + } + + private printMissingReferencesList(missingReferences: MissingCrossReference[]) { + console.log('┌─────────────────────────────────────────────────────────────────────────────────┐'); + console.log('│ MISSING CROSS-REFERENCES REPORT │'); + console.log('│ (Published Datasets Only - Filtered Relations) │'); + console.log('└─────────────────────────────────────────────────────────────────────────────────┘'); + console.log(); + + missingReferences.forEach((missing, index) => { + console.log( + `${index + 1}. Dataset ${missing.sourceDatasetId} (Publish ID: ${missing.sourcePublishId} Identifier: ${missing.sourceDoi}) + ${missing.relation} Dataset ${missing.targetDatasetId} (Publish ID: ${missing.targetPublishId} Identifier: ${missing.targetDoi})`, + ); + console.log(` ├─ Current relation: "${missing.relation}"`); + console.log(` ├─ Missing reverse relation: "${missing.reverseRelation}"`); + console.log(` ├─ Reference type: ${missing.referenceType}`); + console.log(` └─ DOI/URL: ${missing.doi}`); + console.log(); + }); + + console.log('┌─────────────────────────────────────────────────────────────────────────────────┐'); + console.log(`│ SUMMARY: ${missingReferences.length} missing reverse reference(s) detected │`); + console.log(`│ Processed relations: ${this.ALLOWED_RELATIONS.join(', ')} │`); + console.log('└─────────────────────────────────────────────────────────────────────────────────┘'); + } + + private async fixMissingReferences(missingReferences: MissingCrossReference[]) { + this.logger.info('🔧 Creating missing cross-references in database...'); + + let fixedCount = 0; + let errorCount = 0; + + for (const [index, missing] of missingReferences.entries()) { + try { + // Get both source and target datasets + const sourceDataset = await Dataset.query() + .where('id', missing.sourceDatasetId) + .where('server_state', 'published') + .preload('identifier') + .preload('titles') // Preload titles to get mainTitle + .first(); + + const targetDataset = await Dataset.query().where('id', missing.targetDatasetId).where('server_state', 'published').first(); + + if (!sourceDataset) { + this.logger.warning(`⚠️ Source dataset ${missing.sourceDatasetId} not found or not published, skipping...`); + errorCount++; + continue; + } + + if (!targetDataset) { + this.logger.warning(`⚠️ Target dataset ${missing.targetDatasetId} not found or not published, skipping...`); + errorCount++; + continue; + } + + // **NEW: Update the original reference if related_document_id is missing** + const originalReference = await DatasetReference.query() + .where('document_id', missing.sourceDatasetId) + .where('relation', missing.relation) + .where('value', 'like', `%${missing.targetDoi}%`) + .first(); + if (originalReference && !originalReference.related_document_id) { + originalReference.related_document_id = missing.targetDatasetId; + await originalReference.save(); + if (this.verbose) { + this.logger.info(`🔗 Updated original reference with related_document_id: ${missing.targetDatasetId}`); + } + } + + // Create the reverse reference using the referenced_by relationship + // Example: If Dataset 297 IsNewVersionOf Dataset 144 + // We create an incoming reference for Dataset 144 that shows Dataset 297 IsPreviousVersionOf it + const reverseReference = new DatasetReference(); + // Don't set document_id - this creates an incoming reference via related_document_id + reverseReference.document_id = missing.targetDatasetId; // + reverseReference.related_document_id = missing.sourceDatasetId; + reverseReference.type = 'DOI'; + reverseReference.relation = missing.reverseRelation; + + // Use the source dataset's DOI for the value (what's being referenced) + if (sourceDataset.identifier?.value) { + reverseReference.value = `https://doi.org/${sourceDataset.identifier.value}`; + } else { + // Fallback to dataset URL if no DOI + reverseReference.value = `https://tethys.at/dataset/${sourceDataset.publish_id || missing.sourceDatasetId}`; + } + + // Use the source dataset's main title for the label + //reverseReference.label = sourceDataset.mainTitle || `Dataset ${missing.sourceDatasetId}`; + // get label of forward reference + reverseReference.label = missing.sourceReferenceLabel || sourceDataset.mainTitle || `Dataset ${missing.sourceDatasetId}`; + // reverseReference.notes = `Auto-created by detect:missing-cross-references command on ${DateTime.now().toISO()} to fix missing bidirectional reference.`; + + // Save the new reverse reference + // Also save 'server_date_modified' on target dataset to trigger any downstream updates (e.g. search index) + targetDataset.server_date_modified = DateTime.now(); + await targetDataset.save(); + + await reverseReference.save(); + fixedCount++; + + if (this.verbose) { + this.logger.info( + `✅ [${index + 1}/${missingReferences.length}] Created reverse reference: Dataset ${missing.sourceDatasetId} -> ${missing.targetDatasetId} (${missing.reverseRelation})`, + ); + } else if ((index + 1) % 10 === 0) { + this.logger.info(`📈 Fixed ${fixedCount}/${missingReferences.length} references...`); + } + } catch (error) { + this.logger.error( + `❌ Error creating reverse reference for datasets ${missing.targetDatasetId} -> ${missing.sourceDatasetId}:`, + error, + ); + errorCount++; + } + } + + this.logger.info(`📊 Fix completed: ${fixedCount} created, ${errorCount} errors`); + } +} diff --git a/commands/index_datasets.ts b/commands/index_datasets.ts index ee76268..322d4b8 100644 --- a/commands/index_datasets.ts +++ b/commands/index_datasets.ts @@ -4,7 +4,7 @@ import { XMLBuilder } from 'xmlbuilder2/lib/interfaces.js'; import { create } from 'xmlbuilder2'; import Dataset from '#models/dataset'; -import XmlModel from '#app/Library/XmlModel'; +import XmlModel from '#app/Library/DatasetXmlSerializer'; import { readFileSync } from 'fs'; import SaxonJS from 'saxon-js'; import { Client } from '@opensearch-project/opensearch'; @@ -12,10 +12,8 @@ import { getDomain } from '#app/utils/utility-functions'; import { BaseCommand, flags } from '@adonisjs/core/ace'; import { CommandOptions } from '@adonisjs/core/types/ace'; import env from '#start/env'; -// import db from '@adonisjs/lucid/services/db'; -// import { default as Dataset } from '#models/dataset'; import logger from '@adonisjs/core/services/logger'; - +import { DateTime } from 'luxon'; const opensearchNode = env.get('OPENSEARCH_HOST', 'localhost'); const client = new Client({ node: `${opensearchNode}` }); // replace with your OpenSearch endpoint @@ -30,11 +28,10 @@ export default class IndexDatasets extends BaseCommand { public publish_id: number; public static options: CommandOptions = { - startApp: true, - staysAlive: false, + startApp: true, // Ensures the IoC container is ready to use + staysAlive: false, // Command exits after running }; - async run() { logger.debug('Hello world!'); // const { default: Dataset } = await import('#models/dataset'); @@ -44,10 +41,12 @@ export default class IndexDatasets extends BaseCommand { const index_name = 'tethys-records'; for (var dataset of datasets) { - // Logger.info(`File publish_id ${dataset.publish_id}`); - // const jsonString = await this.getJsonString(dataset, proc); - // console.log(jsonString); - await this.indexDocument(dataset, index_name, proc); + const shouldUpdate = await this.shouldUpdateDataset(dataset, index_name); + if (shouldUpdate) { + await this.indexDocument(dataset, index_name, proc); + } else { + logger.info(`Dataset with publish_id ${dataset.publish_id} is up to date, skipping indexing`); + } } } @@ -65,6 +64,46 @@ export default class IndexDatasets extends BaseCommand { return await query.exec(); } + private async shouldUpdateDataset(dataset: Dataset, index_name: string): Promise<boolean> { + try { + // Check if publish_id exists before proceeding + if (!dataset.publish_id) { + // Return true to update since document doesn't exist in OpenSearch yet + return true; + } + // Get the existing document from OpenSearch + const response = await client.get({ + index: index_name, + id: dataset.publish_id?.toString(), + }); + + const existingDoc = response.body._source; + + // Compare server_date_modified + if (existingDoc && existingDoc.server_date_modified) { + // Convert Unix timestamp (seconds) to milliseconds for DateTime.fromMillis() + const existingModified = DateTime.fromMillis(Number(existingDoc.server_date_modified) * 1000); + const currentModified = dataset.server_date_modified; + + // Only update if the dataset has been modified more recently + if (currentModified <= existingModified) { + return false; + } + } + + return true; + } catch (error) { + // If document doesn't exist or other error, we should index it + if (error.statusCode === 404) { + logger.info(`Dataset with publish_id ${dataset.publish_id} not found in index, will create new document`); + return true; + } + + logger.warn(`Error checking existing document for publish_id ${dataset.publish_id}: ${error.message}`); + return true; // Index anyway if we can't determine the status + } + } + private async indexDocument(dataset: Dataset, index_name: string, proc: Buffer): Promise<void> { try { const doc = await this.getJsonString(dataset, proc); @@ -78,7 +117,8 @@ export default class IndexDatasets extends BaseCommand { }); logger.info(`dataset with publish_id ${dataset.publish_id} successfully indexed`); } catch (error) { - logger.error(`An error occurred while indexing dataset with publish_id ${dataset.publish_id}.`); + logger.error(`An error occurred while indexing dataset with publish_id ${dataset.publish_id}. + Error: ${error.message}`); } } @@ -111,19 +151,16 @@ export default class IndexDatasets extends BaseCommand { } private async getDatasetXmlDomNode(dataset: Dataset): Promise<XMLBuilder | null> { - const xmlModel = new XmlModel(dataset); + const serializer = new XmlModel(dataset).enableCaching().excludeEmptyFields(); // xmlModel.setModel(dataset); - xmlModel.excludeEmptyFields(); - xmlModel.caching = true; - // const cache = dataset.xmlCache ? dataset.xmlCache : null; - // dataset.load('xmlCache'); + if (dataset.xmlCache) { - xmlModel.xmlCache = dataset.xmlCache; + serializer.setCache(dataset.xmlCache); } - // return cache.getDomDocument(); - const domDocument: XMLBuilder | null = await xmlModel.getDomDocument(); - return domDocument; + // return cache.toXmlDocument(); + const xmlDocument: XMLBuilder | null = await serializer.toXmlDocument(); + return xmlDocument; } private addSpecInformation(domNode: XMLBuilder, information: string) { diff --git a/commands/list_updatable_datacite.ts b/commands/list_updatable_datacite.ts new file mode 100644 index 0000000..aed411a --- /dev/null +++ b/commands/list_updatable_datacite.ts @@ -0,0 +1,346 @@ +/* +|-------------------------------------------------------------------------- +| node ace make:command list-updateable-datacite +| DONE: create commands/list_updeatable_datacite.ts +|-------------------------------------------------------------------------- +*/ +import { BaseCommand, flags } from '@adonisjs/core/ace'; +import { CommandOptions } from '@adonisjs/core/types/ace'; +import Dataset from '#models/dataset'; +import { DoiClient } from '#app/Library/Doi/DoiClient'; +import env from '#start/env'; +import logger from '@adonisjs/core/services/logger'; +import { DateTime } from 'luxon'; +import pLimit from 'p-limit'; + +export default class ListUpdateableDatacite extends BaseCommand { + static commandName = 'list:updateable-datacite'; + static description = 'List all datasets that need DataCite DOI updates'; + + public static needsApplication = true; + + // private chunkSize = 100; // Set chunk size for pagination + + @flags.boolean({ alias: 'v', description: 'Verbose output showing detailed information' }) + public verbose: boolean = false; + + @flags.boolean({ alias: 'c', description: 'Show only count of updatable datasets' }) + public countOnly: boolean = false; + + @flags.boolean({ alias: 'i', description: 'Show only publish IDs (useful for scripting)' }) + public idsOnly: boolean = false; + + @flags.number({ description: 'Chunk size for processing datasets (default: 50)' }) + public chunkSize: number = 50; + + //example: node ace list:updateable-datacite + //example: node ace list:updateable-datacite --verbose + //example: node ace list:updateable-datacite --count-only + //example: node ace list:updateable-datacite --ids-only + //example: node ace list:updateable-datacite --chunk-size 50 + + public static options: CommandOptions = { + startApp: true, + stayAlive: false, + }; + + async run() { + const prefix = env.get('DATACITE_PREFIX', ''); + const base_domain = env.get('BASE_DOMAIN', ''); + + if (!prefix || !base_domain) { + logger.error('Missing DATACITE_PREFIX or BASE_DOMAIN environment variables'); + return; + } + + // Prevent conflicting flags + if ((this.verbose && this.countOnly) || (this.verbose && this.idsOnly)) { + logger.error('Flags --verbose cannot be combined with --count-only or --ids-only'); + return; + } + + const chunkSize = this.chunkSize || 50; + let page = 1; + let hasMoreDatasets = true; + let totalProcessed = 0; + const updatableDatasets: Dataset[] = []; + + if (!this.countOnly && !this.idsOnly) { + logger.info(`Processing datasets in chunks of ${chunkSize}...`); + } + + while (hasMoreDatasets) { + const datasets = await this.getDatasets(page, chunkSize); + + if (datasets.length === 0) { + hasMoreDatasets = false; + break; + } + + if (!this.countOnly && !this.idsOnly) { + logger.info(`Processing chunk ${page} (${datasets.length} datasets)...`); + } + + const chunkUpdatableDatasets = await this.processChunk(datasets); + updatableDatasets.push(...chunkUpdatableDatasets); + totalProcessed += datasets.length; + + page += 1; + if (datasets.length < chunkSize) { + hasMoreDatasets = false; + } + } + + if (!this.countOnly && !this.idsOnly) { + logger.info(`Processed ${totalProcessed} datasets total, found ${updatableDatasets.length} that need updates`); + } + + if (this.countOnly) { + console.log(updatableDatasets.length); + } else if (this.idsOnly) { + updatableDatasets.forEach((dataset) => console.log(dataset.publish_id)); + } else if (this.verbose) { + await this.showVerboseOutput(updatableDatasets); + } else { + this.showSimpleOutput(updatableDatasets); + } + } + + /** + * Processes a chunk of datasets to determine which ones need DataCite updates + * + * This method handles parallel processing of datasets within a chunk, providing + * efficient error handling and filtering of results. + * + * @param datasets - Array of Dataset objects to process + * @returns Promise<Dataset[]> - Array of datasets that need updates + */ + // private async processChunk(datasets: Dataset[]): Promise<Dataset[]> { + // // Process datasets in parallel using Promise.allSettled for better error handling + // // + // // Why Promise.allSettled vs Promise.all? + // // - Promise.all fails fast: if ANY promise rejects, the entire operation fails + // // - Promise.allSettled waits for ALL promises: some can fail, others succeed + // // - This is crucial for batch processing where we don't want one bad dataset + // // to stop processing of the entire chunk + // const results = await Promise.allSettled( + // datasets.map(async (dataset) => { + // try { + // // Check if this specific dataset needs a DataCite update + // const needsUpdate = await this.shouldUpdateDataset(dataset); + + // // Return the dataset if it needs update, null if it doesn't + // // This creates a sparse array that we'll filter later + // return needsUpdate ? dataset : null; + // } catch (error) { + // // Error handling for individual dataset checks + // // + // // Log warnings only if we're not in silent modes (count-only or ids-only) + // // This prevents log spam when running automated scripts + // if (!this.countOnly && !this.idsOnly) { + // logger.warn(`Error checking dataset ${dataset.publish_id}: ${error.message}`); + // } + + // // IMPORTANT DECISION: Return the dataset anyway if we can't determine status + // // + // // Why? It's safer to include a dataset that might not need updating + // // than to miss one that actually does need updating. This follows the + // // "fail-safe" principle - if we're unsure, err on the side of caution + // return dataset; + // } + // }), + // ); + + // // Filter and extract results from Promise.allSettled response + // // + // // Promise.allSettled returns an array of objects with this structure: + // // - { status: 'fulfilled', value: T } for successful promises + // // - { status: 'rejected', reason: Error } for failed promises + // // + // // We need to: + // // 1. Only get fulfilled results (rejected ones are already handled above) + // // 2. Filter out null values (datasets that don't need updates) + // // 3. Extract the actual Dataset objects from the wrapper + // return results + // .filter( + // (result): result is PromiseFulfilledResult<Dataset | null> => + // // Type guard: only include fulfilled results that have actual values + // // This filters out: + // // - Rejected promises (shouldn't happen due to try/catch, but safety first) + // // - Fulfilled promises that returned null (datasets that don't need updates) + // result.status === 'fulfilled' && result.value !== null, + // ) + // .map((result) => result.value!); // Extract the Dataset from the wrapper + // // The ! is safe here because we filtered out null values above + // } + + private async processChunk(datasets: Dataset[]): Promise<Dataset[]> { + // Limit concurrency to avoid API flooding (e.g., max 5 at once) + const limit = pLimit(5); + + const tasks = datasets.map((dataset) => + limit(async () => { + try { + const needsUpdate = await this.shouldUpdateDataset(dataset); + return needsUpdate ? dataset : null; + } catch (error) { + if (!this.countOnly && !this.idsOnly) { + logger.warn( + `Error checking dataset ${dataset.publish_id}: ${ + error instanceof Error ? error.message : JSON.stringify(error) + }`, + ); + } + // Fail-safe: include dataset if uncertain + return dataset; + } + }), + ); + + const results = await Promise.allSettled(tasks); + + return results + .filter((result): result is PromiseFulfilledResult<Dataset | null> => result.status === 'fulfilled' && result.value !== null) + .map((result) => result.value!); + } + + private async getDatasets(page: number, chunkSize: number): Promise<Dataset[]> { + return await Dataset.query() + .orderBy('publish_id', 'asc') + .preload('identifier') + .preload('xmlCache') + .preload('titles') + .where('server_state', 'published') + .whereHas('identifier', (identifierQuery) => { + identifierQuery.where('type', 'doi'); + }) + .forPage(page, chunkSize); // Get files for the current page + } + + private async shouldUpdateDataset(dataset: Dataset): Promise<boolean> { + try { + let doiIdentifier = dataset.identifier; + if (!doiIdentifier) { + await dataset.load('identifier'); + doiIdentifier = dataset.identifier; + } + + if (!doiIdentifier || doiIdentifier.type !== 'doi') { + return false; + } + + const datasetModified = + dataset.server_date_modified instanceof DateTime + ? dataset.server_date_modified + : DateTime.fromJSDate(dataset.server_date_modified); + + if (!datasetModified) { + return true; + } + + if (datasetModified > DateTime.now()) { + return false; + } + + const doiClient = new DoiClient(); + const DOI_CHECK_TIMEOUT = 300; // ms + + const doiLastModified = await Promise.race([ + doiClient.getDoiLastModified(doiIdentifier.value), + this.createTimeoutPromise(DOI_CHECK_TIMEOUT), + ]).catch(() => null); + + if (!doiLastModified) { + // If uncertain, better include dataset for update + return true; + } + + const doiModified = DateTime.fromJSDate(doiLastModified); + if (datasetModified > doiModified) { + const diffInSeconds = Math.abs(datasetModified.diff(doiModified, 'seconds').seconds); + const toleranceSeconds = 600; + return diffInSeconds > toleranceSeconds; + } + return false; + } catch (error) { + return true; // safer: include dataset if unsure + } + } + + /** + * Create a timeout promise for API calls + */ + private createTimeoutPromise(timeoutMs: number): Promise<never> { + return new Promise((_, reject) => { + setTimeout(() => reject(new Error(`API call timeout after ${timeoutMs}ms`)), timeoutMs); + }); + } + + private showSimpleOutput(updatableDatasets: Dataset[]): void { + if (updatableDatasets.length === 0) { + console.log('No datasets need DataCite updates.'); + return; + } + + console.log(`\nFound ${updatableDatasets.length} dataset(s) that need DataCite updates:\n`); + + updatableDatasets.forEach((dataset) => { + console.log(`publish_id ${dataset.publish_id} needs update - ${dataset.mainTitle || 'Untitled'}`); + }); + + console.log(`\nTo update these datasets, run:`); + console.log(` node ace update:datacite`); + console.log(`\nOr update specific datasets:`); + console.log(` node ace update:datacite -p <publish_id>`); + } + + private async showVerboseOutput(updatableDatasets: Dataset[]): Promise<void> { + if (updatableDatasets.length === 0) { + console.log('No datasets need DataCite updates.'); + return; + } + + console.log(`\nFound ${updatableDatasets.length} dataset(s) that need DataCite updates:\n`); + + for (const dataset of updatableDatasets) { + await this.showDatasetDetails(dataset); + } + + console.log(`\nSummary: ${updatableDatasets.length} datasets need updates`); + } + + private async showDatasetDetails(dataset: Dataset): Promise<void> { + try { + let doiIdentifier = dataset.identifier; + + if (!doiIdentifier) { + await dataset.load('identifier'); + doiIdentifier = dataset.identifier; + } + + const doiValue = doiIdentifier?.value || 'N/A'; + const datasetModified = dataset.server_date_modified; + + // Get DOI info from DataCite + const doiClient = new DoiClient(); + const doiLastModified = await doiClient.getDoiLastModified(doiValue); + const doiState = await doiClient.getDoiState(doiValue); + + console.log(`┌─ Dataset ${dataset.publish_id} ───────────────────────────────────────────────────────────────`); + console.log(`│ Title: ${dataset.mainTitle || 'Untitled'}`); + console.log(`│ DOI: ${doiValue}`); + console.log(`│ DOI State: ${doiState || 'Unknown'}`); + console.log(`│ Dataset Modified: ${datasetModified ? datasetModified.toISO() : 'N/A'}`); + console.log(`│ DOI Modified: ${doiLastModified ? DateTime.fromJSDate(doiLastModified).toISO() : 'N/A'}`); + console.log(`│ Status: NEEDS UPDATE`); + console.log(`└─────────────────────────────────────────────────────────────────────────────────────────────\n`); + } catch (error) { + console.log(`┌─ Dataset ${dataset.publish_id} ───────────────────────────────────────────────────────────────`); + console.log(`│ Title: ${dataset.mainTitle || 'Untitled'}`); + console.log(`│ DOI: ${dataset.identifier?.value || 'N/A'}`); + console.log(`│ Error: ${error.message}`); + console.log(`│ Status: NEEDS UPDATE (Error checking)`); + console.log(`└─────────────────────────────────────────────────────────────────────────────────────────────\n`); + } + } +} diff --git a/commands/update_datacite.ts b/commands/update_datacite.ts new file mode 100644 index 0000000..7ccb0f0 --- /dev/null +++ b/commands/update_datacite.ts @@ -0,0 +1,266 @@ +/* +|-------------------------------------------------------------------------- +| node ace make:command update-datacite +| DONE: create commands/update_datacite.ts +|-------------------------------------------------------------------------- +*/ +import { BaseCommand, flags } from '@adonisjs/core/ace'; +import { CommandOptions } from '@adonisjs/core/types/ace'; +import Dataset from '#models/dataset'; +import { DoiClient } from '#app/Library/Doi/DoiClient'; +import DoiClientException from '#app/exceptions/DoiClientException'; +import Index from '#app/Library/Utils/Index'; +import env from '#start/env'; +import logger from '@adonisjs/core/services/logger'; +import { DateTime } from 'luxon'; +import { getDomain } from '#app/utils/utility-functions'; + +export default class UpdateDatacite extends BaseCommand { + static commandName = 'update:datacite'; + static description = 'Update DataCite DOI records for published datasets'; + + public static needsApplication = true; + + @flags.number({ alias: 'p', description: 'Specific publish_id to update' }) + public publish_id: number; + + @flags.boolean({ alias: 'f', description: 'Force update all records regardless of modification date' }) + public force: boolean = false; + + @flags.boolean({ alias: 'd', description: 'Dry run - show what would be updated without making changes' }) + public dryRun: boolean = false; + + @flags.boolean({ alias: 's', description: 'Show detailed stats for each dataset that needs updating' }) + public stats: boolean = false; + + //example: node ace update:datacite -p 123 --force --dry-run + + public static options: CommandOptions = { + startApp: true, // Whether to boot the application before running the command + stayAlive: false, // Whether to keep the process alive after the command has executed + }; + + async run() { + logger.info('Starting DataCite update process...'); + + const prefix = env.get('DATACITE_PREFIX', ''); + const base_domain = env.get('BASE_DOMAIN', ''); + const apiUrl = env.get('DATACITE_API_URL', 'https://api.datacite.org'); + + if (!prefix || !base_domain) { + logger.error('Missing DATACITE_PREFIX or BASE_DOMAIN environment variables'); + return; + } + + logger.info(`Using DataCite API: ${apiUrl}`); + + const datasets = await this.getDatasets(); + logger.info(`Found ${datasets.length} datasets to process`); + + let updated = 0; + let skipped = 0; + let errors = 0; + + for (const dataset of datasets) { + try { + const shouldUpdate = this.force || (await this.shouldUpdateDataset(dataset)); + + if (this.stats) { + // Stats mode: show detailed information for datasets that need updating + if (shouldUpdate) { + await this.showDatasetStats(dataset); + updated++; + } else { + skipped++; + } + continue; + } + + if (!shouldUpdate) { + logger.info(`Dataset ${dataset.publish_id}: Up to date, skipping`); + skipped++; + continue; + } + + if (this.dryRun) { + logger.info(`Dataset ${dataset.publish_id}: Would update DataCite record (dry run)`); + updated++; + continue; + } + + await this.updateDataciteRecord(dataset, prefix, base_domain); + logger.info(`Dataset ${dataset.publish_id}: Successfully updated DataCite record`); + updated++; + } catch (error) { + logger.error(`Dataset ${dataset.publish_id}: Failed to update - ${error.message}`); + errors++; + } + } + + if (this.stats) { + logger.info(`\nDataCite Stats Summary: ${updated} datasets need updating, ${skipped} are up to date`); + } else { + logger.info(`DataCite update completed. Updated: ${updated}, Skipped: ${skipped}, Errors: ${errors}`); + } + } + + private async getDatasets(): Promise<Dataset[]> { + const query = Dataset.query() + .preload('identifier') + .preload('xmlCache') + .where('server_state', 'published') + .whereHas('identifier', (identifierQuery) => { + identifierQuery.where('type', 'doi'); + }); + + if (this.publish_id) { + query.where('publish_id', this.publish_id); + } + + return await query.exec(); + } + + private async shouldUpdateDataset(dataset: Dataset): Promise<boolean> { + try { + let doiIdentifier = dataset.identifier; + + if (!doiIdentifier) { + await dataset.load('identifier'); + doiIdentifier = dataset.identifier; + } + + if (!doiIdentifier || doiIdentifier.type !== 'doi') { + return false; + } + + const datasetModified = dataset.server_date_modified; + const now = DateTime.now(); + + if (!datasetModified) { + return true; // Update if modification date is missing + } + + if (datasetModified > now) { + return false; // Skip invalid future dates + } + + // Check DataCite DOI modification date + const doiClient = new DoiClient(); + const doiLastModified = await doiClient.getDoiLastModified(doiIdentifier.value); + + if (!doiLastModified) { + return false; // not Update if we can't get DOI info + } + + const doiModified = DateTime.fromJSDate(doiLastModified); + if (datasetModified > doiModified) { + // if dataset was modified after DOI creation + // Calculate the difference in seconds + const diffInSeconds = Math.abs(datasetModified.diff(doiModified, 'seconds').seconds); + + // Define tolerance threshold (60 seconds = 1 minute) + const toleranceSeconds = 60; + + // Only update if the difference is greater than the tolerance + // This prevents unnecessary updates for minor timestamp differences + return diffInSeconds > toleranceSeconds; + } else { + return false; // No update needed + } + } catch (error) { + return false; // not update if we can't determine status or other error + } + } + + private async updateDataciteRecord(dataset: Dataset, prefix: string, base_domain: string): Promise<void> { + try { + // Get the DOI identifier (HasOne relationship) + let doiIdentifier = dataset.identifier; + + if (!doiIdentifier) { + await dataset.load('identifier'); + doiIdentifier = dataset.identifier; + } + + if (!doiIdentifier || doiIdentifier.type !== 'doi') { + throw new Error('No DOI identifier found for dataset'); + } + + // Generate XML metadata + const xmlMeta = (await Index.getDoiRegisterString(dataset)) as string; + if (!xmlMeta) { + throw new Error('Failed to generate XML metadata'); + } + + // Construct DOI value and landing page URL + const doiValue = doiIdentifier.value; // Use existing DOI value + const landingPageUrl = `https://doi.${getDomain(base_domain)}/${doiValue}`; + + // Update DataCite record + const doiClient = new DoiClient(); + const dataciteResponse = await doiClient.registerDoi(doiValue, xmlMeta, landingPageUrl); + + if (dataciteResponse?.status === 201) { + // // Update dataset modification date + // dataset.server_date_modified = DateTime.now(); + // await dataset.save(); + + // // Update search index + // const index_name = 'tethys-records'; + // await Index.indexDocument(dataset, index_name); + + logger.debug(`Dataset ${dataset.publish_id}: DataCite record and search index updated successfully`); + } else { + throw new DoiClientException( + dataciteResponse?.status || 500, + `Unexpected DataCite response code: ${dataciteResponse?.status}`, + ); + } + } catch (error) { + if (error instanceof DoiClientException) { + throw error; + } + throw new Error(`Failed to update DataCite record: ${error.message}`); + } + } + + /** + * Shows detailed statistics for a dataset that needs updating + */ + private async showDatasetStats(dataset: Dataset): Promise<void> { + try { + let doiIdentifier = dataset.identifier; + + if (!doiIdentifier) { + await dataset.load('identifier'); + doiIdentifier = dataset.identifier; + } + + const doiValue = doiIdentifier?.value || 'N/A'; + const doiStatus = doiIdentifier?.status || 'N/A'; + const datasetModified = dataset.server_date_modified; + + // Get DOI info from DataCite + const doiClient = new DoiClient(); + const doiLastModified = await doiClient.getDoiLastModified(doiValue); + const doiState = await doiClient.getDoiState(doiValue); + + console.log(` + ┌─ Dataset ${dataset.publish_id} ─────────────────────────────────────────────────────────────── + │ DOI Value: ${doiValue} + │ DOI Status (DB): ${doiStatus} + │ DOI State (DataCite): ${doiState || 'Unknown'} + │ Dataset Modified: ${datasetModified ? datasetModified.toISO() : 'N/A'} + │ DOI Modified: ${doiLastModified ? DateTime.fromJSDate(doiLastModified).toISO() : 'N/A'} + │ Needs Update: YES - Dataset newer than DOI + └─────────────────────────────────────────────────────────────────────────────────────────────`); + } catch (error) { + console.log(` + ┌─ Dataset ${dataset.publish_id} ─────────────────────────────────────────────────────────────── + │ DOI Value: ${dataset.identifier?.value || 'N/A'} + │ Error: ${error.message} + │ Needs Update: YES - Error checking status + └─────────────────────────────────────────────────────────────────────────────────────────────`); + } + } +} diff --git a/commands/validate_checksum.ts b/commands/validate_checksum.ts index a2d8096..a11b38b 100644 --- a/commands/validate_checksum.ts +++ b/commands/validate_checksum.ts @@ -88,7 +88,7 @@ export default class ValidateChecksum extends BaseCommand { ); // Construct the file path - const filePath = '/storage/app/public/' + file.pathName; + const filePath = '/storage/app/data/' + file.pathName; try { // Calculate the MD5 checksum of the file diff --git a/components.d.ts b/components.d.ts index 3834bf1..001762d 100644 --- a/components.d.ts +++ b/components.d.ts @@ -11,3 +11,21 @@ declare module '@vue/runtime-core' { NInput: (typeof import('naive-ui'))['NInput']; } } + +// types/leaflet-src-dom-DomEvent.d.ts +declare module 'leaflet/src/dom/DomEvent' { + export type DomEventHandler = (e?: any) => void; + + // Attach event listeners. `obj` can be any DOM node or object with event handling. + export function on(obj: any, types: string, fn: DomEventHandler, context?: any): void; + + // Detach event listeners. + export function off(obj: any, types: string, fn?: DomEventHandler, context?: any): void; + + // Prevent default on native events + export function preventDefault(ev?: Event | undefined): void; + + // Optional: other helpers you might need later + export function stopPropagation(ev?: Event | undefined): void; + export function stop(ev?: Event | undefined): void; +} \ No newline at end of file diff --git a/config/app.ts b/config/app.ts index 23ad925..c0e7b2b 100644 --- a/config/app.ts +++ b/config/app.ts @@ -80,7 +80,8 @@ export const http = defineConfig({ | headers. | */ - trustProxy: proxyAddr.compile('loopback'), + // trustProxy: proxyAddr.compile('loopback'), + trustProxy: proxyAddr.compile(['127.0.0.1', '::1/128']), /* |-------------------------------------------------------------------------- diff --git a/config/bodyparser.ts b/config/bodyparser.ts index efc7dbb..b7c7d35 100644 --- a/config/bodyparser.ts +++ b/config/bodyparser.ts @@ -128,7 +128,7 @@ allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'], | projects/:id/file | ``` */ - processManually: [], + processManually: ['/submitter/dataset/submit', '/submitter/dataset/:id/update'], /* |-------------------------------------------------------------------------- @@ -185,8 +185,8 @@ allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'], | and fields data. | */ - // limit: '20mb', - limit: env.get('UPLOAD_LIMIT', '513mb'), + limit: '513mb', + //limit: env.get('UPLOAD_LIMIT', '513mb'), /* |-------------------------------------------------------------------------- diff --git a/config/database.ts b/config/database.ts index 87f302e..1c0fbdc 100644 --- a/config/database.ts +++ b/config/database.ts @@ -47,7 +47,7 @@ const databaseConfig = defineConfig({ migrations: { naturalSort: true, }, - healthCheck: false, + // healthCheck: false, debug: false, pool: { min: 1, max: 100 }, }, diff --git a/config/drive.ts b/config/drive.ts index 5679c62..cfb91f9 100644 --- a/config/drive.ts +++ b/config/drive.ts @@ -1,151 +1,45 @@ -/** - * Config source: https://git.io/JBt3o - * - * Feel free to let us know via PR, if you find something broken in this config - * file. - */ -import { defineConfig } from '#providers/drive/src/types/define_config'; -import env from '#start/env'; -// import { driveConfig } from '@adonisjs/core/build/config'; -// import { driveConfig } from "@adonisjs/drive/build/config.js"; -// import Application from '@ioc:Adonis/Core/Application'; +// import env from '#start/env' +// import app from '@adonisjs/core/services/app' +import { defineConfig, services } from '@adonisjs/drive' -/* -|-------------------------------------------------------------------------- -| Drive Config -|-------------------------------------------------------------------------- -| -| The `DriveConfig` relies on the `DisksList` interface which is -| defined inside the `contracts` directory. -| -*/ -export default defineConfig({ - /* - |-------------------------------------------------------------------------- - | Default disk - |-------------------------------------------------------------------------- - | - | The default disk to use for managing file uploads. The value is driven by - | the `DRIVE_DISK` environment variable. - | - */ - disk: env.get('DRIVE_DISK', 'local'), +const driveConfig = defineConfig({ + + default: 'public', + - disks: { - /* - |-------------------------------------------------------------------------- - | Local - |-------------------------------------------------------------------------- - | - | Uses the local file system to manage files. Make sure to turn off serving - | files when not using this disk. - | - */ - local: { - driver: 'local', - visibility: 'public', - - /* - |-------------------------------------------------------------------------- - | Storage root - Local driver only - |-------------------------------------------------------------------------- - | - | Define an absolute path to the storage directory from where to read the - | files. - | - */ - // root: Application.tmpPath('uploads'), - root: '/storage/app/public', - - /* - |-------------------------------------------------------------------------- - | Serve files - Local driver only - |-------------------------------------------------------------------------- - | - | When this is set to true, AdonisJS will configure a files server to serve - | files from the disk root. This is done to mimic the behavior of cloud - | storage services that has inbuilt capabilities to serve files. - | - */ - serveFiles: true, - - /* - |-------------------------------------------------------------------------- - | Base path - Local driver only - |-------------------------------------------------------------------------- - | - | Base path is always required when "serveFiles = true". Also make sure - | the `basePath` is unique across all the disks using "local" driver and - | you are not registering routes with this prefix. - | - */ - basePath: '/uploads', - }, - - /* - |-------------------------------------------------------------------------- - | S3 Driver - |-------------------------------------------------------------------------- - | - | Uses the S3 cloud storage to manage files. Make sure to install the s3 - | drive separately when using it. - | - |************************************************************************** - | npm i @adonisjs/drive-s3 - |************************************************************************** - | - */ - // s3: { - // driver: 's3', - // visibility: 'public', - // key: Env.get('S3_KEY'), - // secret: Env.get('S3_SECRET'), - // region: Env.get('S3_REGION'), - // bucket: Env.get('S3_BUCKET'), - // endpoint: Env.get('S3_ENDPOINT'), - // - // // For minio to work - // // forcePathStyle: true, - // }, - - /* - |-------------------------------------------------------------------------- - | GCS Driver - |-------------------------------------------------------------------------- - | - | Uses the Google cloud storage to manage files. Make sure to install the GCS - | drive separately when using it. - | - |************************************************************************** - | npm i @adonisjs/drive-gcs - |************************************************************************** - | - */ - // gcs: { - // driver: 'gcs', - // visibility: 'public', - // keyFilename: Env.get('GCS_KEY_FILENAME'), - // bucket: Env.get('GCS_BUCKET'), - - /* - |-------------------------------------------------------------------------- - | Uniform ACL - Google cloud storage only - |-------------------------------------------------------------------------- - | - | When using the Uniform ACL on the bucket, the "visibility" option is - | ignored. Since, the files ACL is managed by the google bucket policies - | directly. - | - |************************************************************************** - | Learn more: https://cloud.google.com/storage/docs/uniform-bucket-level-access - |************************************************************************** - | - | The following option just informs drive whether your bucket is using uniform - | ACL or not. The actual setting needs to be toggled within the Google cloud - | console. - | - */ - // usingUniformAcl: false, - // }, + services: { + + /** + * Persist files on the local filesystem + */ + public: services.fs({ + location: '/storage/app/public/', + serveFiles: true, + routeBasePath: '/public', + visibility: 'public', + }), + local: services.fs({ + location: '/storage/app/data/', + serveFiles: true, + routeBasePath: '/data', + visibility: 'public', + }), + + + /** + * Persist files on Digital Ocean spaces + */ + // spaces: services.s3({ + // credentials: { + // accessKeyId: env.get('SPACES_KEY'), + // secretAccessKey: env.get('SPACES_SECRET'), + // }, + // region: env.get('SPACES_REGION'), + // bucket: env.get('SPACES_BUCKET'), + // endpoint: env.get('SPACES_ENDPOINT'), + // visibility: 'public', + // }), }, -}); + }) + + export default driveConfig \ No newline at end of file diff --git a/config/drive_self.ts b/config/drive_self.ts new file mode 100644 index 0000000..f1c8152 --- /dev/null +++ b/config/drive_self.ts @@ -0,0 +1,233 @@ +/** + * Config source: https://git.io/JBt3o + * + * Feel free to let us know via PR, if you find something broken in this config + * file. + */ +import { defineConfig } from '#providers/drive/src/types/define_config'; +import env from '#start/env'; +// import { driveConfig } from '@adonisjs/core/build/config'; +// import { driveConfig } from "@adonisjs/drive/build/config.js"; +// import Application from '@ioc:Adonis/Core/Application'; + +/* +|-------------------------------------------------------------------------- +| Drive Config +|-------------------------------------------------------------------------- +| +| The `DriveConfig` relies on the `DisksList` interface which is +| defined inside the `contracts` directory. +| +*/ +export default defineConfig({ + /* + |-------------------------------------------------------------------------- + | Default disk + |-------------------------------------------------------------------------- + | + | The default disk to use for managing file uploads. The value is driven by + | the `DRIVE_DISK` environment variable. + | + */ + disk: env.get('DRIVE_DISK', 'local'), + + disks: { + /* + |-------------------------------------------------------------------------- + | Local + |-------------------------------------------------------------------------- + | + | Uses the local file system to manage files. Make sure to turn off serving + | files when not using this disk. + | + */ + local: { + driver: 'local', + visibility: 'public', + + /* + |-------------------------------------------------------------------------- + | Storage root - Local driver only + |-------------------------------------------------------------------------- + | + | Define an absolute path to the storage directory from where to read the + | files. + | + */ + // root: Application.tmpPath('uploads'), + root: '/storage/app/data', + + /* + |-------------------------------------------------------------------------- + | Serve files - Local driver only + |-------------------------------------------------------------------------- + | + | When this is set to true, AdonisJS will configure a files server to serve + | files from the disk root. This is done to mimic the behavior of cloud + | storage services that has inbuilt capabilities to serve files. + | + */ + serveFiles: true, + + /* + |-------------------------------------------------------------------------- + | Base path - Local driver only + |-------------------------------------------------------------------------- + | + | Base path is always required when "serveFiles = true". Also make sure + | the `basePath` is unique across all the disks using "local" driver and + | you are not registering routes with this prefix. + | + */ + basePath: '/files', + }, + + local: { + driver: 'local', + visibility: 'public', + + /* + |-------------------------------------------------------------------------- + | Storage root - Local driver only + |-------------------------------------------------------------------------- + | + | Define an absolute path to the storage directory from where to read the + | files. + | + */ + // root: Application.tmpPath('uploads'), + root: '/storage/app/data', + + /* + |-------------------------------------------------------------------------- + | Serve files - Local driver only + |-------------------------------------------------------------------------- + | + | When this is set to true, AdonisJS will configure a files server to serve + | files from the disk root. This is done to mimic the behavior of cloud + | storage services that has inbuilt capabilities to serve files. + | + */ + serveFiles: true, + + /* + |-------------------------------------------------------------------------- + | Base path - Local driver only + |-------------------------------------------------------------------------- + | + | Base path is always required when "serveFiles = true". Also make sure + | the `basePath` is unique across all the disks using "local" driver and + | you are not registering routes with this prefix. + | + */ + basePath: '/files', + }, + + fs: { + driver: 'local', + visibility: 'public', + + /* + |-------------------------------------------------------------------------- + | Storage root - Local driver only + |-------------------------------------------------------------------------- + | + | Define an absolute path to the storage directory from where to read the + | files. + | + */ + // root: Application.tmpPath('uploads'), + root: '/storage/app/public', + + /* + |-------------------------------------------------------------------------- + | Serve files - Local driver only + |-------------------------------------------------------------------------- + | + | When this is set to true, AdonisJS will configure a files server to serve + | files from the disk root. This is done to mimic the behavior of cloud + | storage services that has inbuilt capabilities to serve files. + | + */ + serveFiles: true, + + /* + |-------------------------------------------------------------------------- + | Base path - Local driver only + |-------------------------------------------------------------------------- + | + | Base path is always required when "serveFiles = true". Also make sure + | the `basePath` is unique across all the disks using "local" driver and + | you are not registering routes with this prefix. + | + */ + basePath: '/public', + }, + + /* + |-------------------------------------------------------------------------- + | S3 Driver + |-------------------------------------------------------------------------- + | + | Uses the S3 cloud storage to manage files. Make sure to install the s3 + | drive separately when using it. + | + |************************************************************************** + | npm i @adonisjs/drive-s3 + |************************************************************************** + | + */ + // s3: { + // driver: 's3', + // visibility: 'public', + // key: Env.get('S3_KEY'), + // secret: Env.get('S3_SECRET'), + // region: Env.get('S3_REGION'), + // bucket: Env.get('S3_BUCKET'), + // endpoint: Env.get('S3_ENDPOINT'), + // + // // For minio to work + // // forcePathStyle: true, + // }, + + /* + |-------------------------------------------------------------------------- + | GCS Driver + |-------------------------------------------------------------------------- + | + | Uses the Google cloud storage to manage files. Make sure to install the GCS + | drive separately when using it. + | + |************************************************************************** + | npm i @adonisjs/drive-gcs + |************************************************************************** + | + */ + // gcs: { + // driver: 'gcs', + // visibility: 'public', + // keyFilename: Env.get('GCS_KEY_FILENAME'), + // bucket: Env.get('GCS_BUCKET'), + + /* + |-------------------------------------------------------------------------- + | Uniform ACL - Google cloud storage only + |-------------------------------------------------------------------------- + | + | When using the Uniform ACL on the bucket, the "visibility" option is + | ignored. Since, the files ACL is managed by the google bucket policies + | directly. + | + |************************************************************************** + | Learn more: https://cloud.google.com/storage/docs/uniform-bucket-level-access + |************************************************************************** + | + | The following option just informs drive whether your bucket is using uniform + | ACL or not. The actual setting needs to be toggled within the Google cloud + | console. + | + */ + // usingUniformAcl: false, + // }, + }, +}); diff --git a/config/inertia.ts b/config/inertia.ts index bcbd170..f203ddd 100644 --- a/config/inertia.ts +++ b/config/inertia.ts @@ -1,7 +1,8 @@ import { defineConfig } from '@adonisjs/inertia'; import type { HttpContext } from '@adonisjs/core/http'; +import type { InferSharedProps } from '@adonisjs/inertia/types' -export default defineConfig({ +const inertiaConfig = defineConfig({ /** * Path to the Edge view that will be used as the root view for Inertia responses */ @@ -52,6 +53,12 @@ export default defineConfig({ }, }); +export default inertiaConfig + +declare module '@adonisjs/inertia/types' { + export interface SharedProps extends InferSharedProps<typeof inertiaConfig> {} + } + // import { InertiaConfig } from '@ioc:EidelLev/Inertia'; // /* diff --git a/config/mail.ts b/config/mail.ts index 909dec2..a97489f 100644 --- a/config/mail.ts +++ b/config/mail.ts @@ -12,11 +12,11 @@ const mailConfig = defineConfig({ mailers: { smtp: transports.smtp({ - socketTimeout: 5000,// Overall timeout (5 seconds) + // socketTimeout: 5000,// Overall timeout (5 seconds) host: env.get('SMTP_HOST', ''), port: env.get('SMTP_PORT'), secure: false, - // ignoreTLS: true, + ignoreTLS: true, requireTLS: false, /** @@ -30,10 +30,10 @@ const mailConfig = defineConfig({ }, */ }), - resend: transports.resend({ - key: env.get('RESEND_API_KEY'), - baseUrl: 'https://api.resend.com', - }), + // resend: transports.resend({ + // key: env.get('RESEND_API_KEY'), + // baseUrl: 'https://api.resend.com', + // }), }, }); diff --git a/config/session.ts b/config/session.ts index dafbad2..baa0adf 100644 --- a/config/session.ts +++ b/config/session.ts @@ -6,7 +6,7 @@ */ import env from '#start/env'; -import app from '@adonisjs/core/services/app'; +// import app from '@adonisjs/core/services/app'; import { defineConfig, stores } from '@adonisjs/session'; const sessionConfig = defineConfig({ diff --git a/config/vite.ts b/config/vite.ts new file mode 100644 index 0000000..4969e53 --- /dev/null +++ b/config/vite.ts @@ -0,0 +1,32 @@ +import { defineConfig } from '@adonisjs/vite'; + +const viteBackendConfig = defineConfig({ + /** + * The output of vite will be written inside this + * directory. The path should be relative from + * the application root. + */ + buildDirectory: 'public/assets', + + /** + * The path to the manifest file generated by the + * "vite build" command. + */ + manifestFile: 'public/assets/.vite/manifest.json', + + /** + * Feel free to change the value of the "assetsUrl" to + * point to a CDN in production. + */ + assetsUrl: '/assets', + + /** + * Add defer attribute to scripts for better performance. + */ + scriptAttributes: { + defer: true, + }, + +}); + +export default viteBackendConfig; diff --git a/contracts/enums.ts b/contracts/enums.ts index 68ec4d9..5772570 100644 --- a/contracts/enums.ts +++ b/contracts/enums.ts @@ -21,6 +21,7 @@ export enum ServerStates { rejected_reviewer = 'rejected_reviewer', rejected_editor = 'rejected_editor', reviewed = 'reviewed', + rejected_to_reviewer = 'rejected_to_reviewer', } // for table dataset_titles diff --git a/database/factories/create_collections_data_ccs.sql b/database/factories/create_collections_data_ccs.sql new file mode 100644 index 0000000..e6b14df --- /dev/null +++ b/database/factories/create_collections_data_ccs.sql @@ -0,0 +1,1472 @@ +-- ACM Computing Classification System (CCS) — a widely used system for classifying academic literature in computer science and related disciplines. +/* The main classes are: see number at db +A. General Literature +B. Hardware +C. Computer Systems Organization +D. Software +E. Data +F. Theory of Computation +G. Mathematics of Computing +H. Information Systems +I. Computing Methodologies +J. Computer Applications +K. Computing Milieux + +These classes help in organizing research papers, indexing databases, and guiding publication categorization +*/ +INSERT INTO collections (id, role_id, number, name, oai_subset, left_id, right_id, parent_id, visible, visible_publish) VALUES +(1030,3,'A.','General Literature','A.',2,17,NULL,1,1), +(1031,3,'B.','Hardware','B.',18,379,NULL,1,1), +(1032,3,'C.','Computer Systems Organization','C.',380,567,NULL,1,1), +(1033,3,'D.','Software','D.',568,1035,NULL,1,1), +(1034,3,'E.','Data','E.',1036,1101,NULL,1,1), +(1035,3,'F.','Theory of Computation','F.',1102,1291,NULL,1,1), +(1036,3,'G.','Mathematics of Computing','G.',1292,1587,NULL,1,1), +(1037,3,'H.','Information Systems','H.',1588,1919,NULL,1,1), +(1038,3,'I.','Computing Methodologies','I.',1920,2537,NULL,1,1), +(1039,3,'J.','Computer Applications','J.',2538,2637,NULL,1,1), +(1040,3,'K.','Computing Milieux','K.',2638,2911,NULL,1,1), +(1041,3,'A.0','GENERAL','A.0',3,10,1030,1,1), +(1042,3,'A.1','INTRODUCTORY AND SURVEY','A.1',11,12,1030,1,1), +(1043,3,'A.2','REFERENCE (e.g., dictionaries, encyclopedias, glossaries)','A.2',13,14,1030,1,1), +(1044,3,'A.m','MISCELLANEOUS','A.m',15,16,1030,1,1), +(1045,3,'B.0','GENERAL','B.0',19,20,1031,1,1), +(1046,3,'B.1','CONTROL STRUCTURES AND MICROPROGRAMMING (D.3.2)','B.1',21,76,1031,1,1), +(1047,3,'B.2','ARITHMETIC AND LOGIC STRUCTURES','B.2',77,114,1031,1,1), +(1048,3,'B.3','MEMORY STRUCTURES','B.3',115,164,1031,1,1), +(1049,3,'B.4','INPUT/OUTPUT AND DATA COMMUNICATIONS','B.4',165,226,1031,1,1), +(1050,3,'B.5','REGISTER-TRANSFER-LEVEL IMPLEMENTATION','B.5',227,268,1031,1,1), +(1051,3,'B.6','LOGIC DESIGN','B.6',269,316,1031,1,1), +(1052,3,'B.7','INTEGRATED CIRCUITS','B.7',317,364,1031,1,1), +(1053,3,'B.8','PERFORMANCE AND RELIABILITY (C.4) (NEW)','B.8',365,374,1031,1,1), +(1054,3,'B.m','MISCELLANEOUS','B.m',375,378,1031,1,1), +(1055,3,'C.0','GENERAL','C.0',381,382,1032,1,1), +(1056,3,'C.1','PROCESSOR ARCHITECTURES','C.1',383,450,1032,1,1), +(1057,3,'C.2','COMPUTER-COMMUNICATION NETWORKS','C.2',451,534,1032,1,1), +(1058,3,'C.3','SPECIAL-PURPOSE AND APPLICATION-BASED SYSTEMS (J.7)','C.3',535,536,1032,1,1), +(1059,3,'C.4','PERFORMANCE OF SYSTEMS','C.4',537,538,1032,1,1), +(1060,3,'C.5','COMPUTER SYSTEM IMPLEMENTATION','C.5',539,564,1032,1,1), +(1061,3,'C.m','MISCELLANEOUS','C.m',565,566,1032,1,1), +(1062,3,'D.0','GENERAL','D.0',569,570,1033,1,1), +(1063,3,'D.1','PROGRAMMING TECHNIQUES (E)','D.1',571,594,1033,1,1), +(1064,3,'D.2','SOFTWARE ENGINEERING (K.6.3)','D.2',595,796,1033,1,1), +(1065,3,'D.3','PROGRAMMING LANGUAGES','D.3',797,900,1033,1,1), +(1066,3,'D.4','OPERATING SYSTEMS (C)','D.4',901,1030,1033,1,1), +(1067,3,'D.m','MISCELLANEOUS','D.m',1031,1034,1033,1,1), +(1068,3,'E.0','GENERAL','E.0',1037,1038,1034,1,1), +(1069,3,'E.1','DATA STRUCTURES','E.1',1039,1054,1034,1,1), +(1070,3,'E.2','DATA STORAGE REPRESENTATIONS','E.2',1055,1068,1034,1,1), +(1071,3,'E.3','DATA ENCRYPTION','E.3',1069,1078,1034,1,1), +(1072,3,'E.4','CODING AND INFORMATION THEORY (H.1.1)','E.4',1079,1088,1034,1,1), +(1073,3,'E.5','FILES (D.4.3, F.2.2, H.2)','E.5',1089,1098,1034,1,1), +(1074,3,'E.m','MISCELLANEOUS','E.m',1099,1100,1034,1,1), +(1075,3,'F.0','GENERAL','F.0',1103,1104,1035,1,1), +(1076,3,'F.1','COMPUTATION BY ABSTRACT DEVICES','F.1',1105,1152,1035,1,1), +(1077,3,'F.2','ANALYSIS OF ALGORITHMS AND PROBLEM COMPLEXITY (B.6-7, F.1.3)','F.2',1153,1188,1035,1,1), +(1078,3,'F.3','LOGICS AND MEANINGS OF PROGRAMS','F.3',1189,1234,1035,1,1), +(1079,3,'F.4','MATHEMATICAL LOGIC AND FORMAL LANGUAGES','F.4',1235,1288,1035,1,1), +(1080,3,'F.m','MISCELLANEOUS','F.m',1289,1290,1035,1,1), +(1081,3,'G.0','GENERAL','G.0',1293,1294,1036,1,1), +(1082,3,'G.1','NUMERICAL ANALYSIS','G.1',1295,1490,1036,1,1), +(1083,3,'G.2','DISCRETE MATHEMATICS','G.2',1491,1524,1036,1,1), +(1084,3,'G.3','PROBABILITY AND STATISTICS','G.3',1525,1562,1036,1,1), +(1085,3,'G.4','MATHEMATICAL SOFTWARE','G.4',1563,1582,1036,1,1), +(1086,3,'G.m','MISCELLANEOUS','G.m',1583,1586,1036,1,1), +(1087,3,'H.0','GENERAL','H.0',1589,1590,1037,1,1), +(1088,3,'H.1','MODELS AND PRINCIPLES','H.1',1591,1612,1037,1,1), +(1089,3,'H.2','DATABASE MANAGEMENT (E.5)','H.2',1613,1700,1037,1,1), +(1090,3,'H.3','INFORMATION STORAGE AND RETRIEVAL','H.3',1701,1778,1037,1,1), +(1091,3,'H.4','INFORMATION SYSTEMS APPLICATIONS','H.4',1779,1818,1037,1,1), +(1092,3,'H.5','INFORMATION INTERFACES AND PRESENTATION (e.g., HCI) (I.7)','H.5',1819,1916,1037,1,1), +(1093,3,'H.m','MISCELLANEOUS','H.m',1917,1918,1037,1,1), +(1094,3,'I.0','GENERAL','I.0',1921,1922,1038,1,1), +(1095,3,'I.1','SYMBOLIC AND ALGEBRAIC MANIPULATION (REVISED)','I.1',1923,1956,1038,1,1), +(1096,3,'I.2','ARTIFICIAL INTELLIGENCE','I.2',1957,2132,1038,1,1), +(1097,3,'I.3','COMPUTER GRAPHICS','I.3',2133,2252,1038,1,1), +(1098,3,'I.4','IMAGE PROCESSING AND COMPUTER VISION (REVISED)','I.4',2253,2382,1038,1,1), +(1099,3,'I.5','PATTERN RECOGNITION','I.5',2383,2432,1038,1,1), +(1100,3,'I.6','SIMULATION AND MODELING (G.3)','I.6',2433,2482,1038,1,1), +(1101,3,'I.7','DOCUMENT AND TEXT PROCESSING (H.4-5) (REVISED)','I.7',2483,2534,1038,1,1), +(1102,3,'I.m','MISCELLANEOUS','I.m',2535,2536,1038,1,1), +(1103,3,'J.0','GENERAL','J.0',2539,2540,1039,1,1), +(1104,3,'J.1','ADMINISTRATIVE DATA PROCESSING','J.1',2541,2558,1039,1,1), +(1105,3,'J.2','PHYSICAL SCIENCES AND ENGINEERING','J.2',2559,2578,1039,1,1), +(1106,3,'J.3','LIFE AND MEDICAL SCIENCES','J.3',2579,2586,1039,1,1), +(1107,3,'J.4','SOCIAL AND BEHAVIORAL SCIENCES','J.4',2587,2594,1039,1,1), +(1108,3,'J.5','ARTS AND HUMANITIES','J.5',2595,2612,1039,1,1), +(1109,3,'J.6','COMPUTER-AIDED ENGINEERING','J.6',2613,2618,1039,1,1), +(1110,3,'J.7','COMPUTERS IN OTHER SYSTEMS (C.3)','J.7',2619,2634,1039,1,1), +(1111,3,'J.m','MISCELLANEOUS','J.m',2635,2636,1039,1,1), +(1112,3,'K.0','GENERAL','K.0',2639,2640,1040,1,1), +(1113,3,'K.1','THE COMPUTER INDUSTRY','K.1',2641,2650,1040,1,1), +(1114,3,'K.2','HISTORY OF COMPUTING','K.2',2651,2662,1040,1,1), +(1115,3,'K.3','COMPUTERS AND EDUCATION','K.3',2663,2696,1040,1,1), +(1116,3,'K.4','COMPUTERS AND SOCIETY','K.4',2697,2756,1040,1,1), +(1117,3,'K.5','LEGAL ASPECTS OF COMPUTING','K.5',2757,2786,1040,1,1), +(1118,3,'K.6','MANAGEMENT OF COMPUTING AND INFORMATION SYSTEMS','K.6',2787,2856,1040,1,1), +(1119,3,'K.7','THE COMPUTING PROFESSION','K.7',2857,2880,1040,1,1), +(1120,3,'K.8','PERSONAL COMPUTING','K.8',2881,2908,1040,1,1), +(1121,3,'K.m','MISCELLANEOUS','K.m',2909,2910,1040,1,1), +(1122,3,NULL,'Biographies/autobiographies',NULL,4,5,1041,1,1), +(1123,3,NULL,'Conference proceedings',NULL,6,7,1041,1,1), +(1124,3,NULL,'General literary works (e.g., fiction, plays)',NULL,8,9,1041,1,1), +(1125,3,'B.1.0','General','B.1.0',22,23,1046,1,1), +(1126,3,'B.1.1','Control Design Styles','B.1.1',24,31,1046,1,1), +(1127,3,NULL,'Hardwired control**',NULL,25,26,1126,1,1), +(1128,3,NULL,'Microprogrammed logic arrays**',NULL,27,28,1126,1,1), +(1129,3,NULL,'Writable control store**',NULL,29,30,1126,1,1), +(1130,3,'B.1.2','Control Structure Performance Analysis and Design Aids','B.1.2',32,39,1046,1,1), +(1131,3,NULL,'Automatic synthesis**',NULL,33,34,1130,1,1), +(1132,3,NULL,'Formal models**',NULL,35,36,1130,1,1), +(1133,3,NULL,'Simulation**',NULL,37,38,1130,1,1), +(1134,3,'B.1.3','Control Structure Reliability, Testing, and Fault-Tolerance** (B.8)','B.1.3',40,49,1046,1,1), +(1135,3,NULL,'Diagnostics**',NULL,41,42,1134,1,1), +(1136,3,NULL,'Error-checking**',NULL,43,44,1134,1,1), +(1137,3,NULL,'Redundant design**',NULL,45,46,1134,1,1), +(1138,3,NULL,'Test generation**',NULL,47,48,1134,1,1), +(1139,3,'B.1.4','Microprogram Design Aids (D.2.2, D.2.4, D.3.2, D.3.4)','B.1.4',50,61,1046,1,1), +(1140,3,NULL,'Firmware engineering**',NULL,51,52,1139,1,1), +(1141,3,NULL,'Languages and compilers',NULL,53,54,1139,1,1), +(1142,3,NULL,'Machine-independent microcode generation**',NULL,55,56,1139,1,1), +(1143,3,NULL,'Optimization',NULL,57,58,1139,1,1), +(1144,3,NULL,'Verification**',NULL,59,60,1139,1,1), +(1145,3,'B.1.5','Microcode Applications','B.1.5',62,73,1046,1,1), +(1146,3,NULL,'Direct data manipulation**',NULL,63,64,1145,1,1), +(1147,3,NULL,'Firmware support of operating systems/instruction sets**',NULL,65,66,1145,1,1), +(1148,3,NULL,'Instruction set interpretation',NULL,67,68,1145,1,1), +(1149,3,NULL,'Peripheral control**',NULL,69,70,1145,1,1), +(1150,3,NULL,'Special-purpose**',NULL,71,72,1145,1,1), +(1151,3,'B.1.m','Miscellaneous','B.1.m',74,75,1046,1,1), +(1152,3,'B.2.0','General','B.2.0',78,79,1047,1,1), +(1153,3,'B.2.1','Design Styles (C.1.1-2)','B.2.1',80,87,1047,1,1), +(1154,3,NULL,'Calculator**',NULL,81,82,1153,1,1), +(1155,3,NULL,'Parallel',NULL,83,84,1153,1,1), +(1156,3,NULL,'Pipeline',NULL,85,86,1153,1,1), +(1157,3,'B.2.2','Performance Analysis and Design Aids** (B.8)','B.2.2',88,95,1047,1,1), +(1158,3,NULL,'Simulation**',NULL,89,90,1157,1,1), +(1159,3,NULL,'Verification**',NULL,91,92,1157,1,1), +(1160,3,NULL,'Worst-case analysis**',NULL,93,94,1157,1,1), +(1161,3,'B.2.3','Reliability, Testing, and Fault-Tolerance** (B.8)','B.2.3',96,105,1047,1,1), +(1162,3,NULL,'Diagnostics**',NULL,97,98,1161,1,1), +(1163,3,NULL,'Error-checking**',NULL,99,100,1161,1,1), +(1164,3,NULL,'Redundant design**',NULL,101,102,1161,1,1), +(1165,3,NULL,'Test generation**',NULL,103,104,1161,1,1), +(1166,3,'B.2.4','High-Speed Arithmetic (NEW)','B.2.4',106,111,1047,1,1), +(1167,3,NULL,'Algorithms (NEW)',NULL,107,108,1166,1,1), +(1168,3,NULL,'Cost/performance (NEW)',NULL,109,110,1166,1,1), +(1169,3,'B.2.m','Miscellaneous','B.2.m',112,113,1047,1,1), +(1170,3,'B.3.0','General','B.3.0',116,117,1048,1,1), +(1171,3,'B.3.1','Semiconductor Memories (NEW) (B.7.1)','B.3.1',118,125,1048,1,1), +(1172,3,NULL,'Dynamic memory (DRAM) (NEW)',NULL,119,120,1171,1,1), +(1173,3,NULL,'Read-only memory (ROM) (NEW)',NULL,121,122,1171,1,1), +(1174,3,NULL,'Static memory (SRAM) (NEW)',NULL,123,124,1171,1,1), +(1175,3,'B.3.2','Design Styles (D.4.2)','B.3.2',126,143,1048,1,1), +(1176,3,NULL,'Associative memories',NULL,127,128,1175,1,1), +(1177,3,NULL,'Cache memories',NULL,129,130,1175,1,1), +(1178,3,NULL,'Interleaved memories**',NULL,131,132,1175,1,1), +(1179,3,NULL,'Mass storage (e.g., magnetic, optical, RAID) (REVISED)',NULL,133,134,1175,1,1), +(1180,3,NULL,'Primary memory',NULL,135,136,1175,1,1), +(1181,3,NULL,'Sequential-access memory**',NULL,137,138,1175,1,1), +(1182,3,NULL,'Shared memory',NULL,139,140,1175,1,1), +(1183,3,NULL,'Virtual memory',NULL,141,142,1175,1,1), +(1184,3,'B.3.3','Performance Analysis and Design Aids** (B.8, C.4)','B.3.3',144,151,1048,1,1), +(1185,3,NULL,'Formal models**',NULL,145,146,1184,1,1), +(1186,3,NULL,'Simulation**',NULL,147,148,1184,1,1), +(1187,3,NULL,'Worst-case analysis**',NULL,149,150,1184,1,1), +(1188,3,'B.3.4','Reliability, Testing, and Fault-Tolerance** (B.8)','B.3.4',152,161,1048,1,1), +(1189,3,NULL,'Diagnostics**',NULL,153,154,1188,1,1), +(1190,3,NULL,'Error-checking**',NULL,155,156,1188,1,1), +(1191,3,NULL,'Redundant design**',NULL,157,158,1188,1,1), +(1192,3,NULL,'Test generation**',NULL,159,160,1188,1,1), +(1193,3,'B.3.m','Miscellaneous','B.3.m',162,163,1048,1,1), +(1194,3,'B.4.0','General','B.4.0',166,167,1049,1,1), +(1195,3,'B.4.1','Data Communications Devices','B.4.1',168,175,1049,1,1), +(1196,3,NULL,'Processors**',NULL,169,170,1195,1,1), +(1197,3,NULL,'Receivers (e.g., voice, data, image)**',NULL,171,172,1195,1,1), +(1198,3,NULL,'Transmitters**',NULL,173,174,1195,1,1), +(1199,3,'B.4.2','Input/Output Devices','B.4.2',176,185,1049,1,1), +(1200,3,NULL,'Channels and controllers',NULL,177,178,1199,1,1), +(1201,3,NULL,'Data terminals and printers',NULL,179,180,1199,1,1), +(1202,3,NULL,'Image display',NULL,181,182,1199,1,1), +(1203,3,NULL,'Voice',NULL,183,184,1199,1,1), +(1204,3,'B.4.3','Interconnections (Subsystems)','B.4.3',186,199,1049,1,1), +(1205,3,NULL,'Asynchronous/synchronous operation',NULL,187,188,1204,1,1), +(1206,3,NULL,'Fiber optics',NULL,189,190,1204,1,1), +(1207,3,NULL,'Interfaces',NULL,191,192,1204,1,1), +(1208,3,NULL,'Parallel I/O (NEW)',NULL,193,194,1204,1,1), +(1209,3,NULL,'Physical structures (e.g., backplanes, cables, chip carriers)**',NULL,195,196,1204,1,1), +(1210,3,NULL,'Topology (e.g., bus, point-to-point)',NULL,197,198,1204,1,1), +(1211,3,'B.4.4','Performance Analysis and Design Aids** (B.8)','B.4.4',200,209,1049,1,1), +(1212,3,NULL,'Formal models**',NULL,201,202,1211,1,1), +(1213,3,NULL,'Simulation**',NULL,203,204,1211,1,1), +(1214,3,NULL,'Verification**',NULL,205,206,1211,1,1), +(1215,3,NULL,'Worst-case analysis**',NULL,207,208,1211,1,1), +(1216,3,'B.4.5','Reliability, Testing, and Fault-Tolerance** (B.8)','B.4.5',210,223,1049,1,1), +(1217,3,NULL,'Built-in tests**',NULL,211,212,1216,1,1), +(1218,3,NULL,'Diagnostics**',NULL,213,214,1216,1,1), +(1219,3,NULL,'Error-checking**',NULL,215,216,1216,1,1), +(1220,3,NULL,'Hardware reliability**',NULL,217,218,1216,1,1), +(1221,3,NULL,'Redundant design**',NULL,219,220,1216,1,1), +(1222,3,NULL,'Test generation**',NULL,221,222,1216,1,1), +(1223,3,'B.4.m','Miscellaneous','B.4.m',224,225,1049,1,1), +(1224,3,'B.5.0','General','B.5.0',228,229,1050,1,1), +(1225,3,'B.5.1','Design','B.5.1',230,241,1050,1,1), +(1226,3,NULL,'Arithmetic and logic units',NULL,231,232,1225,1,1), +(1227,3,NULL,'Control design',NULL,233,234,1225,1,1), +(1228,3,NULL,'Data-path design',NULL,235,236,1225,1,1), +(1229,3,NULL,'Memory design',NULL,237,238,1225,1,1), +(1230,3,NULL,'Styles (e.g., parallel, pipeline, special-purpose)',NULL,239,240,1225,1,1), +(1231,3,'B.5.2','Design Aids','B.5.2',242,253,1050,1,1), +(1232,3,NULL,'Automatic synthesis',NULL,243,244,1231,1,1), +(1233,3,NULL,'Hardware description languages',NULL,245,246,1231,1,1), +(1234,3,NULL,'Optimization',NULL,247,248,1231,1,1), +(1235,3,NULL,'Simulation',NULL,249,250,1231,1,1), +(1236,3,NULL,'Verification',NULL,251,252,1231,1,1), +(1237,3,'B.5.3','Reliability and Testing** (B.8)','B.5.3',254,265,1050,1,1), +(1238,3,NULL,'Built-in tests**',NULL,255,256,1237,1,1), +(1239,3,NULL,'Error-checking**',NULL,257,258,1237,1,1), +(1240,3,NULL,'Redundant design**',NULL,259,260,1237,1,1), +(1241,3,NULL,'Test generation**',NULL,261,262,1237,1,1), +(1242,3,NULL,'Testability**',NULL,263,264,1237,1,1), +(1243,3,'B.5.m','Miscellaneous','B.5.m',266,267,1050,1,1), +(1244,3,'B.6.0','General','B.6.0',270,271,1051,1,1), +(1245,3,'B.6.1','Design Styles','B.6.1',272,287,1051,1,1), +(1246,3,NULL,'Cellular arrays and automata',NULL,273,274,1245,1,1), +(1247,3,NULL,'Combinational logic',NULL,275,276,1245,1,1), +(1248,3,NULL,'Logic arrays',NULL,277,278,1245,1,1), +(1249,3,NULL,'Memory control and access**',NULL,279,280,1245,1,1), +(1250,3,NULL,'Memory used as logic**',NULL,281,282,1245,1,1), +(1251,3,NULL,'Parallel circuits',NULL,283,284,1245,1,1), +(1252,3,NULL,'Sequential circuits',NULL,285,286,1245,1,1), +(1253,3,'B.6.2','Reliability and Testing** (B.8)','B.6.2',288,299,1051,1,1), +(1254,3,NULL,'Built-in tests**',NULL,289,290,1253,1,1), +(1255,3,NULL,'Error-checking**',NULL,291,292,1253,1,1), +(1256,3,NULL,'Redundant design**',NULL,293,294,1253,1,1), +(1257,3,NULL,'Test generation**',NULL,295,296,1253,1,1), +(1258,3,NULL,'Testability**',NULL,297,298,1253,1,1), +(1259,3,'B.6.3','Design Aids','B.6.3',300,313,1051,1,1), +(1260,3,NULL,'Automatic synthesis',NULL,301,302,1259,1,1), +(1261,3,NULL,'Hardware description languages',NULL,303,304,1259,1,1), +(1262,3,NULL,'Optimization',NULL,305,306,1259,1,1), +(1263,3,NULL,'Simulation',NULL,307,308,1259,1,1), +(1264,3,NULL,'Switching theory',NULL,309,310,1259,1,1), +(1265,3,NULL,'Verification',NULL,311,312,1259,1,1), +(1266,3,'B.6.m','Miscellaneous','B.6.m',314,315,1051,1,1), +(1267,3,'B.7.0','General','B.7.0',318,319,1052,1,1), +(1268,3,'B.7.1','Types and Design Styles','B.7.1',320,337,1052,1,1), +(1269,3,NULL,'Advanced technologies',NULL,321,322,1268,1,1), +(1270,3,NULL,'Algorithms implemented in hardware',NULL,323,324,1268,1,1), +(1271,3,NULL,'Gate arrays',NULL,325,326,1268,1,1), +(1272,3,NULL,'Input/output circuits',NULL,327,328,1268,1,1), +(1273,3,NULL,'Memory technologies',NULL,329,330,1268,1,1), +(1274,3,NULL,'Microprocessors and microcomputers',NULL,331,332,1268,1,1), +(1275,3,NULL,'Standard cells**',NULL,333,334,1268,1,1), +(1276,3,NULL,'VLSI (very large scale integration)',NULL,335,336,1268,1,1), +(1277,3,'B.7.2','Design Aids','B.7.2',338,349,1052,1,1), +(1278,3,NULL,'Graphics',NULL,339,340,1277,1,1), +(1279,3,NULL,'Layout',NULL,341,342,1277,1,1), +(1280,3,NULL,'Placement and routing',NULL,343,344,1277,1,1), +(1281,3,NULL,'Simulation',NULL,345,346,1277,1,1), +(1282,3,NULL,'Verification',NULL,347,348,1277,1,1), +(1283,3,'B.7.3','Reliability and Testing** (B.8)','B.7.3',350,361,1052,1,1), +(1284,3,NULL,'Built-in tests**',NULL,351,352,1283,1,1), +(1285,3,NULL,'Error-checking**',NULL,353,354,1283,1,1), +(1286,3,NULL,'Redundant design**',NULL,355,356,1283,1,1), +(1287,3,NULL,'Test generation**',NULL,357,358,1283,1,1), +(1288,3,NULL,'Testability**',NULL,359,360,1283,1,1), +(1289,3,'B.7.m','Miscellaneous','B.7.m',362,363,1052,1,1), +(1290,3,'B.8.0','General (NEW)','B.8.0',366,367,1053,1,1), +(1291,3,'B.8.1','Reliability, Testing, and Fault-Tolerance (NEW)','B.8.1',368,369,1053,1,1), +(1292,3,'B.8.2','Performance Analysis and Design Aids (NEW)','B.8.2',370,371,1053,1,1), +(1293,3,'B.8.m','Miscellaneous (NEW)','B.8.m',372,373,1053,1,1), +(1294,3,NULL,'Design management',NULL,376,377,1054,1,1), +(1295,3,'C.1.0','General','C.1.0',384,385,1056,1,1), +(1296,3,'C.1.1','Single Data Stream Architectures','C.1.1',386,397,1056,1,1), +(1297,3,NULL,'Multiple-instruction-stream, single-data-stream processors (MISD)**',NULL,387,388,1296,1,1), +(1298,3,NULL,'Pipeline processors**',NULL,389,390,1296,1,1), +(1299,3,NULL,'RISC/CISC, VLIW architectures (NEW)',NULL,391,392,1296,1,1), +(1300,3,NULL,'Single-instruction-stream, single-data-stream processors (SISD)**',NULL,393,394,1296,1,1), +(1301,3,NULL,'Von Neumann architectures**',NULL,395,396,1296,1,1), +(1302,3,'C.1.2','Multiple Data Stream Architectures (Multiprocessors)','C.1.2',398,415,1056,1,1), +(1303,3,NULL,'Array and vector processors',NULL,399,400,1302,1,1), +(1304,3,NULL,'Associative processors',NULL,401,402,1302,1,1), +(1305,3,NULL,'Connection machines',NULL,403,404,1302,1,1), +(1306,3,NULL,'Interconnection architectures (e.g., common bus, multiport memory, crossbar switch)',NULL,405,406,1302,1,1), +(1307,3,NULL,'Multiple-instruction-stream, multiple-data-stream processors (MIMD)',NULL,407,408,1302,1,1), +(1308,3,NULL,'Parallel processors**',NULL,409,410,1302,1,1), +(1309,3,NULL,'Pipeline processors**',NULL,411,412,1302,1,1), +(1310,3,NULL,'Single-instruction-stream, multiple-data-stream processors (SIMD)',NULL,413,414,1302,1,1), +(1311,3,'C.1.3','Other Architecture Styles','C.1.3',416,437,1056,1,1), +(1312,3,NULL,'Adaptable architectures',NULL,417,418,1311,1,1), +(1313,3,NULL,'Analog computers (NEW)',NULL,419,420,1311,1,1), +(1314,3,NULL,'Capability architectures**',NULL,421,422,1311,1,1), +(1315,3,NULL,'Cellular architecture (e.g., mobile) (REVISED)',NULL,423,424,1311,1,1), +(1316,3,NULL,'Data-flow architectures',NULL,425,426,1311,1,1), +(1317,3,NULL,'Heterogeneous (hybrid) systems (NEW)',NULL,427,428,1311,1,1), +(1318,3,NULL,'High-level language architectures**',NULL,429,430,1311,1,1), +(1319,3,NULL,'Neural nets',NULL,431,432,1311,1,1), +(1320,3,NULL,'Pipeline processors (NEW)',NULL,433,434,1311,1,1), +(1321,3,NULL,'Stack-oriented processors**',NULL,435,436,1311,1,1), +(1322,3,'C.1.4','Parallel Architectures (NEW)','C.1.4',438,443,1056,1,1), +(1323,3,NULL,'Distributed architectures (NEW)',NULL,439,440,1322,1,1), +(1324,3,NULL,'Mobile processors (NEW)',NULL,441,442,1322,1,1), +(1325,3,'C.1.m','Miscellaneous','C.1.m',444,449,1056,1,1), +(1326,3,NULL,'Analog computers**',NULL,445,446,1325,1,1), +(1327,3,NULL,'Hybrid systems**',NULL,447,448,1325,1,1), +(1328,3,'C.2.0','General','C.2.0',452,459,1057,1,1), +(1329,3,NULL,'Data communications',NULL,453,454,1328,1,1), +(1330,3,NULL,'Open Systems Interconnection reference model (OSI)',NULL,455,456,1328,1,1), +(1331,3,NULL,'Security and protection (e.g., firewalls) (REVISED)',NULL,457,458,1328,1,1), +(1332,3,'C.2.1','Network Architecture and Design','C.2.1',460,483,1057,1,1), +(1333,3,NULL,'Asynchronous Transfer Mode (ATM) (NEW)',NULL,461,462,1332,1,1), +(1334,3,NULL,'Centralized networks**',NULL,463,464,1332,1,1), +(1335,3,NULL,'Circuit-switching networks',NULL,465,466,1332,1,1), +(1336,3,NULL,'Distributed networks',NULL,467,468,1332,1,1), +(1337,3,NULL,'Frame relay networks (NEW)',NULL,469,470,1332,1,1), +(1338,3,NULL,'ISDN (Integrated Services Digital Network)',NULL,471,472,1332,1,1), +(1339,3,NULL,'Network communications',NULL,473,474,1332,1,1), +(1340,3,NULL,'Network topology',NULL,475,476,1332,1,1), +(1341,3,NULL,'Packet-switching networks (REVISED)',NULL,477,478,1332,1,1), +(1342,3,NULL,'Store and forward networks',NULL,479,480,1332,1,1), +(1343,3,NULL,'Wireless communication (NEW)',NULL,481,482,1332,1,1), +(1344,3,'C.2.2','Network Protocols','C.2.2',484,493,1057,1,1), +(1345,3,NULL,'Applications (SMTP, FTP, etc.) (NEW)',NULL,485,486,1344,1,1), +(1346,3,NULL,'Protocol architecture (OSI model) (REVISED)',NULL,487,488,1344,1,1), +(1347,3,NULL,'Protocol verification',NULL,489,490,1344,1,1), +(1348,3,NULL,'Routing protocols (NEW)',NULL,491,492,1344,1,1), +(1349,3,'C.2.3','Network Operations','C.2.3',494,501,1057,1,1), +(1350,3,NULL,'Network management',NULL,495,496,1349,1,1), +(1351,3,NULL,'Network monitoring',NULL,497,498,1349,1,1), +(1352,3,NULL,'Public networks',NULL,499,500,1349,1,1), +(1353,3,'C.2.4','Distributed Systems','C.2.4',502,511,1057,1,1), +(1354,3,NULL,'Client/server (NEW)',NULL,503,504,1353,1,1), +(1355,3,NULL,'Distributed applications',NULL,505,506,1353,1,1), +(1356,3,NULL,'Distributed databases',NULL,507,508,1353,1,1), +(1357,3,NULL,'Network operating systems',NULL,509,510,1353,1,1), +(1358,3,'C.2.5','Local and Wide-Area Networks (REVISED)','C.2.5',512,525,1057,1,1), +(1359,3,NULL,'Access schemes',NULL,513,514,1358,1,1), +(1360,3,NULL,'Buses',NULL,515,516,1358,1,1), +(1361,3,NULL,'Ethernet (e.g., CSMA/CD) (NEW)',NULL,517,518,1358,1,1), +(1362,3,NULL,'High-speed (e.g., FDDI, fiber channel, ATM) (NEW)',NULL,519,520,1358,1,1), +(1363,3,NULL,'Internet (e.g., TCP/IP) (NEW)',NULL,521,522,1358,1,1), +(1364,3,NULL,'Token rings (REVISED)',NULL,523,524,1358,1,1), +(1365,3,'C.2.6','Internetworking (C.2.2) (NEW)','C.2.6',526,531,1057,1,1), +(1366,3,NULL,'Routers (NEW)',NULL,527,528,1365,1,1), +(1367,3,NULL,'Standards (e.g., TCP/IP) (NEW)',NULL,529,530,1365,1,1), +(1368,3,'C.2.m','Miscellaneous','C.2.m',532,533,1057,1,1), +(1369,3,'C.5.0','General','C.5.0',540,541,1060,1,1), +(1370,3,'C.5.1','Large and Medium Mainframe Computers','C.5.1',542,545,1060,1,1), +(1371,3,NULL,'Super (very large) computers',NULL,543,544,1370,1,1), +(1372,3,'C.5.2','Minicomputers**','C.5.2',546,547,1060,1,1), +(1373,3,'C.5.3','Microcomputers','C.5.3',548,557,1060,1,1), +(1374,3,NULL,'Microprocessors',NULL,549,550,1373,1,1), +(1375,3,NULL,'Personal computers',NULL,551,552,1373,1,1), +(1376,3,NULL,'Portable devices (e.g., laptops, personal digital assistants) (NEW)',NULL,553,554,1373,1,1), +(1377,3,NULL,'Workstations',NULL,555,556,1373,1,1), +(1378,3,'C.5.4','VLSI Systems','C.5.4',558,559,1060,1,1), +(1379,3,'C.5.5','Servers (NEW)','C.5.5',560,561,1060,1,1), +(1380,3,'C.5.m','Miscellaneous','C.5.m',562,563,1060,1,1), +(1381,3,'D.1.0','General','D.1.0',572,573,1063,1,1), +(1382,3,'D.1.1','Applicative (Functional) Programming','D.1.1',574,575,1063,1,1), +(1383,3,'D.1.2','Automatic Programming (I.2.2)','D.1.2',576,577,1063,1,1), +(1384,3,'D.1.3','Concurrent Programming','D.1.3',578,583,1063,1,1), +(1385,3,NULL,'Distributed programming',NULL,579,580,1384,1,1), +(1386,3,NULL,'Parallel programming',NULL,581,582,1384,1,1), +(1387,3,'D.1.4','Sequential Programming','D.1.4',584,585,1063,1,1), +(1388,3,'D.1.5','Object-oriented Programming','D.1.5',586,587,1063,1,1), +(1389,3,'D.1.6','Logic Programming','D.1.6',588,589,1063,1,1), +(1390,3,'D.1.7','Visual Programming','D.1.7',590,591,1063,1,1), +(1391,3,'D.1.m','Miscellaneous','D.1.m',592,593,1063,1,1), +(1392,3,'D.2.0','General (K.5.1)','D.2.0',596,601,1064,1,1), +(1393,3,NULL,'Protection mechanisms',NULL,597,598,1392,1,1), +(1394,3,NULL,'Standards',NULL,599,600,1392,1,1), +(1395,3,'D.2.1','Requirements/Specifications (D.3.1)','D.2.1',602,611,1064,1,1), +(1396,3,NULL,'Elicitation methods (e.g., rapid prototyping, interviews, JAD) (NEW)',NULL,603,604,1395,1,1), +(1397,3,NULL,'Languages',NULL,605,606,1395,1,1), +(1398,3,NULL,'Methodologies (e.g., object-oriented, structured) (REVISED)',NULL,607,608,1395,1,1), +(1399,3,NULL,'Tools',NULL,609,610,1395,1,1), +(1400,3,'D.2.2','Design Tools and Techniques (REVISED)','D.2.2',612,639,1064,1,1), +(1401,3,NULL,'Computer-aided software engineering (CASE)',NULL,613,614,1400,1,1), +(1402,3,NULL,'Decision tables',NULL,615,616,1400,1,1), +(1403,3,NULL,'Evolutionary prototyping (NEW)',NULL,617,618,1400,1,1), +(1404,3,NULL,'Flow charts',NULL,619,620,1400,1,1), +(1405,3,NULL,'Modules and interfaces',NULL,621,622,1400,1,1), +(1406,3,NULL,'Object-oriented design methods (NEW)',NULL,623,624,1400,1,1), +(1407,3,NULL,'Petri nets',NULL,625,626,1400,1,1), +(1408,3,NULL,'Programmer workbench**',NULL,627,628,1400,1,1), +(1409,3,NULL,'Software libraries',NULL,629,630,1400,1,1), +(1410,3,NULL,'State diagrams (NEW)',NULL,631,632,1400,1,1), +(1411,3,NULL,'Structured programming**',NULL,633,634,1400,1,1), +(1412,3,NULL,'Top-down programming**',NULL,635,636,1400,1,1), +(1413,3,NULL,'User interfaces',NULL,637,638,1400,1,1), +(1414,3,'D.2.3','Coding Tools and Techniques (REVISED)','D.2.3',640,655,1064,1,1), +(1415,3,NULL,'Object-oriented programming (NEW)',NULL,641,642,1414,1,1), +(1416,3,NULL,'Pretty printers',NULL,643,644,1414,1,1), +(1417,3,NULL,'Program editors',NULL,645,646,1414,1,1), +(1418,3,NULL,'Reentrant code**',NULL,647,648,1414,1,1), +(1419,3,NULL,'Standards',NULL,649,650,1414,1,1), +(1420,3,NULL,'Structured programming (NEW)',NULL,651,652,1414,1,1), +(1421,3,NULL,'Top-down programming (NEW)',NULL,653,654,1414,1,1), +(1422,3,'D.2.4','Software/Program Verification (F.3.1) (REVISED)','D.2.4',656,675,1064,1,1), +(1423,3,NULL,'Assertion checkers',NULL,657,658,1422,1,1), +(1424,3,NULL,'Class invariants (NEW)',NULL,659,660,1422,1,1), +(1425,3,NULL,'Correctness proofs',NULL,661,662,1422,1,1), +(1426,3,NULL,'Formal methods (NEW)',NULL,663,664,1422,1,1), +(1427,3,NULL,'Model checking (NEW)',NULL,665,666,1422,1,1), +(1428,3,NULL,'Programming by contract (NEW)',NULL,667,668,1422,1,1), +(1429,3,NULL,'Reliability',NULL,669,670,1422,1,1), +(1430,3,NULL,'Statistical methods (NEW)',NULL,671,672,1422,1,1), +(1431,3,NULL,'Validation',NULL,673,674,1422,1,1), +(1432,3,'D.2.5','Testing and Debugging','D.2.5',676,697,1064,1,1), +(1433,3,NULL,'Code inspections and walk-throughs',NULL,677,678,1432,1,1), +(1434,3,NULL,'Debugging aids',NULL,679,680,1432,1,1), +(1435,3,NULL,'Diagnostics',NULL,681,682,1432,1,1), +(1436,3,NULL,'Distributed debugging (NEW)',NULL,683,684,1432,1,1), +(1437,3,NULL,'Dumps**',NULL,685,686,1432,1,1), +(1438,3,NULL,'Error handling and recovery',NULL,687,688,1432,1,1), +(1439,3,NULL,'Monitors',NULL,689,690,1432,1,1), +(1440,3,NULL,'Symbolic execution',NULL,691,692,1432,1,1), +(1441,3,NULL,'Testing tools (e.g., data generators, coverage testing) (REVISED)',NULL,693,694,1432,1,1), +(1442,3,NULL,'Tracing',NULL,695,696,1432,1,1), +(1443,3,'D.2.6','Programming Environments','D.2.6',698,707,1064,1,1), +(1444,3,NULL,'Graphical environments (NEW)',NULL,699,700,1443,1,1), +(1445,3,NULL,'Integrated environments (NEW)',NULL,701,702,1443,1,1), +(1446,3,NULL,'Interactive environments (REVISED)',NULL,703,704,1443,1,1), +(1447,3,NULL,'Programmer workbench (NEW)',NULL,705,706,1443,1,1), +(1448,3,'D.2.7','Distribution, Maintenance, and Enhancement (REVISED)','D.2.7',708,723,1064,1,1), +(1449,3,NULL,'Corrections**',NULL,709,710,1448,1,1), +(1450,3,NULL,'Documentation',NULL,711,712,1448,1,1), +(1451,3,NULL,'Enhancement**',NULL,713,714,1448,1,1), +(1452,3,NULL,'Extensibility**',NULL,715,716,1448,1,1), +(1453,3,NULL,'Portability',NULL,717,718,1448,1,1), +(1454,3,NULL,'Restructuring, reverse engineering, and reengineering (REVISED)',NULL,719,720,1448,1,1), +(1455,3,NULL,'Version control',NULL,721,722,1448,1,1), +(1456,3,'D.2.8','Metrics (D.4.8)','D.2.8',724,735,1064,1,1), +(1457,3,NULL,'Complexity measures',NULL,725,726,1456,1,1), +(1458,3,NULL,'Performance measures',NULL,727,728,1456,1,1), +(1459,3,NULL,'Process metrics (NEW)',NULL,729,730,1456,1,1), +(1460,3,NULL,'Product metrics (NEW)',NULL,731,732,1456,1,1), +(1461,3,NULL,'Software science**',NULL,733,734,1456,1,1), +(1462,3,'D.2.9','Management (K.6.3, K.6.4)','D.2.9',736,755,1064,1,1), +(1463,3,NULL,'Copyrights**',NULL,737,738,1462,1,1), +(1464,3,NULL,'Cost estimation',NULL,739,740,1462,1,1), +(1465,3,NULL,'Life cycle',NULL,741,742,1462,1,1), +(1466,3,NULL,'Productivity',NULL,743,744,1462,1,1), +(1467,3,NULL,'Programming teams',NULL,745,746,1462,1,1), +(1468,3,NULL,'Software configuration management',NULL,747,748,1462,1,1), +(1469,3,NULL,'Software process models (e.g., CMM, ISO, PSP) (NEW)',NULL,749,750,1462,1,1), +(1470,3,NULL,'Software quality assurance (SQA)',NULL,751,752,1462,1,1), +(1471,3,NULL,'Time estimation',NULL,753,754,1462,1,1), +(1472,3,'D.2.10','Design** (D.2.2)','D.2.10',756,761,1064,1,1), +(1473,3,NULL,'Methodologies**',NULL,757,758,1472,1,1), +(1474,3,NULL,'Representation**',NULL,759,760,1472,1,1), +(1475,3,'D.2.11','Software Architectures (NEW)','D.2.11',762,773,1064,1,1), +(1476,3,NULL,'Data abstraction (NEW)',NULL,763,764,1475,1,1), +(1477,3,NULL,'Domain-specific architectures (NEW)',NULL,765,766,1475,1,1), +(1478,3,NULL,'Information hiding (NEW)',NULL,767,768,1475,1,1), +(1479,3,NULL,'Languages (e.g., description, interconnection, definition) (NEW)',NULL,769,770,1475,1,1), +(1480,3,NULL,'Patterns (e.g., client/server, pipeline, blackboard) (NEW)',NULL,771,772,1475,1,1), +(1481,3,'D.2.12','Interoperability (NEW)','D.2.12',774,781,1064,1,1), +(1482,3,NULL,'Data mapping (NEW)',NULL,775,776,1481,1,1), +(1483,3,NULL,'Distributed objects (NEW)',NULL,777,778,1481,1,1), +(1484,3,NULL,'Interface definition languages (NEW)',NULL,779,780,1481,1,1), +(1485,3,'D.2.13','Reusable Software (NEW)','D.2.13',782,789,1064,1,1), +(1486,3,NULL,'Domain engineering (NEW)',NULL,783,784,1485,1,1), +(1487,3,NULL,'Reusable libraries (NEW)',NULL,785,786,1485,1,1), +(1488,3,NULL,'Reuse models (NEW)',NULL,787,788,1485,1,1), +(1489,3,'D.2.m','Miscellaneous','D.2.m',790,795,1064,1,1), +(1490,3,NULL,'Rapid prototyping**',NULL,791,792,1489,1,1), +(1491,3,NULL,'Reusable software**',NULL,793,794,1489,1,1), +(1492,3,'D.3.0','General','D.3.0',798,801,1065,1,1), +(1493,3,NULL,'Standards',NULL,799,800,1492,1,1), +(1494,3,'D.3.1','Formal Definitions and Theory (D.2.1, F.3.1-2, F.4.2-3)','D.3.1',802,807,1065,1,1), +(1495,3,NULL,'Semantics',NULL,803,804,1494,1,1), +(1496,3,NULL,'Syntax',NULL,805,806,1494,1,1), +(1497,3,'D.3.2','Language Classifications','D.3.2',808,837,1065,1,1), +(1498,3,NULL,'Applicative (functional) languages (REVISED)',NULL,809,810,1497,1,1), +(1499,3,NULL,'Concurrent, distributed, and parallel languages',NULL,811,812,1497,1,1), +(1500,3,NULL,'Constraint and logic languages (NEW)',NULL,813,814,1497,1,1), +(1501,3,NULL,'Data-flow languages',NULL,815,816,1497,1,1), +(1502,3,NULL,'Design languages',NULL,817,818,1497,1,1), +(1503,3,NULL,'Extensible languages',NULL,819,820,1497,1,1), +(1504,3,NULL,'Macro and assembly languages',NULL,821,822,1497,1,1), +(1505,3,NULL,'Microprogramming languages**',NULL,823,824,1497,1,1), +(1506,3,NULL,'Multiparadigm languages (NEW)',NULL,825,826,1497,1,1), +(1507,3,NULL,'Nondeterministic languages**',NULL,827,828,1497,1,1), +(1508,3,NULL,'Nonprocedural languages**',NULL,829,830,1497,1,1), +(1509,3,NULL,'Object-oriented languages',NULL,831,832,1497,1,1), +(1510,3,NULL,'Specialized application languages',NULL,833,834,1497,1,1), +(1511,3,NULL,'Very high-level languages',NULL,835,836,1497,1,1), +(1512,3,'D.3.3','Language Constructs and Features (E.2)','D.3.3',838,871,1065,1,1), +(1513,3,NULL,'Abstract data types',NULL,839,840,1512,1,1), +(1514,3,NULL,'Classes and objects (NEW)',NULL,841,842,1512,1,1), +(1515,3,NULL,'Concurrent programming structures',NULL,843,844,1512,1,1), +(1516,3,NULL,'Constraints (NEW)',NULL,845,846,1512,1,1), +(1517,3,NULL,'Control structures',NULL,847,848,1512,1,1), +(1518,3,NULL,'Coroutines',NULL,849,850,1512,1,1), +(1519,3,NULL,'Data types and structures',NULL,851,852,1512,1,1), +(1520,3,NULL,'Dynamic storage management',NULL,853,854,1512,1,1), +(1521,3,NULL,'Frameworks (NEW)',NULL,855,856,1512,1,1), +(1522,3,NULL,'Inheritance (NEW)',NULL,857,858,1512,1,1), +(1523,3,NULL,'Input/output',NULL,859,860,1512,1,1), +(1524,3,NULL,'Modules, packages',NULL,861,862,1512,1,1), +(1525,3,NULL,'Patterns (NEW)',NULL,863,864,1512,1,1), +(1526,3,NULL,'Polymorphism (NEW)',NULL,865,866,1512,1,1), +(1527,3,NULL,'Procedures, functions, and subroutines',NULL,867,868,1512,1,1), +(1528,3,NULL,'Recursion',NULL,869,870,1512,1,1), +(1529,3,'D.3.4','Processors','D.3.4',872,897,1065,1,1), +(1530,3,NULL,'Code generation',NULL,873,874,1529,1,1), +(1531,3,NULL,'Compilers',NULL,875,876,1529,1,1), +(1532,3,NULL,'Debuggers (NEW)',NULL,877,878,1529,1,1), +(1533,3,NULL,'Incremental compilers (NEW)',NULL,879,880,1529,1,1), +(1534,3,NULL,'Interpreters',NULL,881,882,1529,1,1), +(1535,3,NULL,'Memory management (garbage collection) (NEW)',NULL,883,884,1529,1,1), +(1536,3,NULL,'Optimization',NULL,885,886,1529,1,1), +(1537,3,NULL,'Parsing',NULL,887,888,1529,1,1), +(1538,3,NULL,'Preprocessors',NULL,889,890,1529,1,1), +(1539,3,NULL,'Retargetable compilers (NEW)',NULL,891,892,1529,1,1), +(1540,3,NULL,'Run-time environments',NULL,893,894,1529,1,1), +(1541,3,NULL,'Translator writing systems and compiler generators',NULL,895,896,1529,1,1), +(1542,3,'D.3.m','Miscellaneous','D.3.m',898,899,1065,1,1), +(1543,3,'D.4.0','General','D.4.0',902,903,1066,1,1), +(1544,3,'D.4.1','Process Management','D.4.1',904,919,1066,1,1), +(1545,3,NULL,'Concurrency',NULL,905,906,1544,1,1), +(1546,3,NULL,'Deadlocks',NULL,907,908,1544,1,1), +(1547,3,NULL,'Multiprocessing/multiprogramming/multitasking (REVISED)',NULL,909,910,1544,1,1), +(1548,3,NULL,'Mutual exclusion',NULL,911,912,1544,1,1), +(1549,3,NULL,'Scheduling',NULL,913,914,1544,1,1), +(1550,3,NULL,'Synchronization',NULL,915,916,1544,1,1), +(1551,3,NULL,'Threads (NEW)',NULL,917,918,1544,1,1), +(1552,3,'D.4.2','Storage Management','D.4.2',920,939,1066,1,1), +(1553,3,NULL,'Allocation/deallocation strategies',NULL,921,922,1552,1,1), +(1554,3,NULL,'Distributed memories',NULL,923,924,1552,1,1), +(1555,3,NULL,'Garbage collection (NEW)',NULL,925,926,1552,1,1), +(1556,3,NULL,'Main memory',NULL,927,928,1552,1,1), +(1557,3,NULL,'Secondary storage',NULL,929,930,1552,1,1), +(1558,3,NULL,'Segmentation**',NULL,931,932,1552,1,1), +(1559,3,NULL,'Storage hierarchies',NULL,933,934,1552,1,1), +(1560,3,NULL,'Swapping**',NULL,935,936,1552,1,1), +(1561,3,NULL,'Virtual memory',NULL,937,938,1552,1,1), +(1562,3,'D.4.3','File Systems Management (E.5)','D.4.3',940,951,1066,1,1), +(1563,3,NULL,'Access methods',NULL,941,942,1562,1,1), +(1564,3,NULL,'Directory structures',NULL,943,944,1562,1,1), +(1565,3,NULL,'Distributed file systems',NULL,945,946,1562,1,1), +(1566,3,NULL,'File organization',NULL,947,948,1562,1,1), +(1567,3,NULL,'Maintenance**',NULL,949,950,1562,1,1), +(1568,3,'D.4.4','Communications Management (C.2)','D.4.4',952,963,1066,1,1), +(1569,3,NULL,'Buffering',NULL,953,954,1568,1,1), +(1570,3,NULL,'Input/output',NULL,955,956,1568,1,1), +(1571,3,NULL,'Message sending',NULL,957,958,1568,1,1), +(1572,3,NULL,'Network communication',NULL,959,960,1568,1,1), +(1573,3,NULL,'Terminal management**',NULL,961,962,1568,1,1), +(1574,3,'D.4.5','Reliability','D.4.5',964,973,1066,1,1), +(1575,3,NULL,'Backup procedures',NULL,965,966,1574,1,1), +(1576,3,NULL,'Checkpoint/restart',NULL,967,968,1574,1,1), +(1577,3,NULL,'Fault-tolerance',NULL,969,970,1574,1,1), +(1578,3,NULL,'Verification',NULL,971,972,1574,1,1), +(1579,3,'D.4.6','Security and Protection (K.6.5)','D.4.6',974,989,1066,1,1), +(1580,3,NULL,'Access controls',NULL,975,976,1579,1,1), +(1581,3,NULL,'Authentication',NULL,977,978,1579,1,1), +(1582,3,NULL,'Cryptographic controls',NULL,979,980,1579,1,1), +(1583,3,NULL,'Information flow controls',NULL,981,982,1579,1,1), +(1584,3,NULL,'Invasive software (e.g., viruses, worms, Trojan horses)',NULL,983,984,1579,1,1), +(1585,3,NULL,'Security kernels**',NULL,985,986,1579,1,1), +(1586,3,NULL,'Verification**',NULL,987,988,1579,1,1), +(1587,3,'D.4.7','Organization and Design','D.4.7',990,1001,1066,1,1), +(1588,3,NULL,'Batch processing systems**',NULL,991,992,1587,1,1), +(1589,3,NULL,'Distributed systems',NULL,993,994,1587,1,1), +(1590,3,NULL,'Hierarchical design**',NULL,995,996,1587,1,1), +(1591,3,NULL,'Interactive systems',NULL,997,998,1587,1,1), +(1592,3,NULL,'Real-time systems and embedded systems',NULL,999,1000,1587,1,1), +(1593,3,'D.4.8','Performance (C.4, D.2.8, I.6)','D.4.8',1002,1017,1066,1,1), +(1594,3,NULL,'Measurements',NULL,1003,1004,1593,1,1), +(1595,3,NULL,'Modeling and prediction',NULL,1005,1006,1593,1,1), +(1596,3,NULL,'Monitors',NULL,1007,1008,1593,1,1), +(1597,3,NULL,'Operational analysis',NULL,1009,1010,1593,1,1), +(1598,3,NULL,'Queueing theory',NULL,1011,1012,1593,1,1), +(1599,3,NULL,'Simulation',NULL,1013,1014,1593,1,1), +(1600,3,NULL,'Stochastic analysis',NULL,1015,1016,1593,1,1), +(1601,3,'D.4.9','Systems Programs and Utilities','D.4.9',1018,1027,1066,1,1), +(1602,3,NULL,'Command and control languages',NULL,1019,1020,1601,1,1), +(1603,3,NULL,'Linkers**',NULL,1021,1022,1601,1,1), +(1604,3,NULL,'Loaders**',NULL,1023,1024,1601,1,1), +(1605,3,NULL,'Window managers',NULL,1025,1026,1601,1,1), +(1606,3,'D.4.m','Miscellaneous','D.4.m',1028,1029,1066,1,1), +(1607,3,NULL,'Software psychology**',NULL,1032,1033,1067,1,1), +(1608,3,NULL,'Arrays',NULL,1040,1041,1069,1,1), +(1609,3,NULL,'Distributed data structures (NEW)',NULL,1042,1043,1069,1,1), +(1610,3,NULL,'Graphs and networks (REVISED)',NULL,1044,1045,1069,1,1), +(1611,3,NULL,'Lists, stacks, and queues (REVISED)',NULL,1046,1047,1069,1,1), +(1612,3,NULL,'Records (NEW)',NULL,1048,1049,1069,1,1), +(1613,3,NULL,'Tables**',NULL,1050,1051,1069,1,1), +(1614,3,NULL,'Trees',NULL,1052,1053,1069,1,1), +(1615,3,NULL,'Composite structures**',NULL,1056,1057,1070,1,1), +(1616,3,NULL,'Contiguous representations**',NULL,1058,1059,1070,1,1), +(1617,3,NULL,'Hash-table representations',NULL,1060,1061,1070,1,1), +(1618,3,NULL,'Linked representations',NULL,1062,1063,1070,1,1), +(1619,3,NULL,'Object representation (NEW)',NULL,1064,1065,1070,1,1), +(1620,3,NULL,'Primitive data items**',NULL,1066,1067,1070,1,1), +(1621,3,NULL,'Code breaking (NEW)',NULL,1070,1071,1071,1,1), +(1622,3,NULL,'Data encryption standard (DES)**',NULL,1072,1073,1071,1,1), +(1623,3,NULL,'Public key cryptosystems',NULL,1074,1075,1071,1,1), +(1624,3,NULL,'Standards (e.g., DES, PGP, RSA) (NEW)',NULL,1076,1077,1071,1,1), +(1625,3,NULL,'Data compaction and compression',NULL,1080,1081,1072,1,1), +(1626,3,NULL,'Error control codes',NULL,1082,1083,1072,1,1), +(1627,3,NULL,'Formal models of communication',NULL,1084,1085,1072,1,1), +(1628,3,NULL,'Nonsecret encoding schemes**',NULL,1086,1087,1072,1,1), +(1629,3,NULL,'Backup/recovery',NULL,1090,1091,1073,1,1), +(1630,3,NULL,'Optimization**',NULL,1092,1093,1073,1,1), +(1631,3,NULL,'Organization/structure',NULL,1094,1095,1073,1,1), +(1632,3,NULL,'Sorting/searching',NULL,1096,1097,1073,1,1), +(1633,3,'F.1.0','General','F.1.0',1106,1107,1076,1,1), +(1634,3,'F.1.1','Models of Computation (F.4.1)','F.1.1',1108,1121,1076,1,1), +(1635,3,NULL,'Automata (e.g., finite, push-down, resource-bounded)',NULL,1109,1110,1634,1,1), +(1636,3,NULL,'Bounded-action devices (e.g., Turing machines, random access machines)',NULL,1111,1112,1634,1,1), +(1637,3,NULL,'Computability theory',NULL,1113,1114,1634,1,1), +(1638,3,NULL,'Relations between models',NULL,1115,1116,1634,1,1), +(1639,3,NULL,'Self-modifying machines (e.g., neural networks)',NULL,1117,1118,1634,1,1), +(1640,3,NULL,'Unbounded-action devices (e.g., cellular automata, circuits, networks of machines)',NULL,1119,1120,1634,1,1), +(1641,3,'F.1.2','Modes of Computation','F.1.2',1122,1137,1076,1,1), +(1642,3,NULL,'Alternation and nondeterminism',NULL,1123,1124,1641,1,1), +(1643,3,NULL,'Interactive and reactive computation (REVISED)',NULL,1125,1126,1641,1,1), +(1644,3,NULL,'Online computation',NULL,1127,1128,1641,1,1), +(1645,3,NULL,'Parallelism and concurrency',NULL,1129,1130,1641,1,1), +(1646,3,NULL,'Probabilistic computation',NULL,1131,1132,1641,1,1), +(1647,3,NULL,'Relations among modes**',NULL,1133,1134,1641,1,1), +(1648,3,NULL,'Relativized computation',NULL,1135,1136,1641,1,1), +(1649,3,'F.1.3','Complexity Measures and Classes (F.2) (REVISED)','F.1.3',1138,1149,1076,1,1), +(1650,3,NULL,'Complexity hierarchies',NULL,1139,1140,1649,1,1), +(1651,3,NULL,'Machine-independent complexity**',NULL,1141,1142,1649,1,1), +(1652,3,NULL,'Reducibility and completeness',NULL,1143,1144,1649,1,1), +(1653,3,NULL,'Relations among complexity classes',NULL,1145,1146,1649,1,1), +(1654,3,NULL,'Relations among complexity measures',NULL,1147,1148,1649,1,1), +(1655,3,'F.1.m','Miscellaneous','F.1.m',1150,1151,1076,1,1), +(1656,3,'F.2.0','General','F.2.0',1154,1155,1077,1,1), +(1657,3,'F.2.1','Numerical Algorithms and Problems (G.1, G.4, I.1)','F.2.1',1156,1167,1077,1,1), +(1658,3,NULL,'Computation of transforms (e.g., fast Fourier transform)',NULL,1157,1158,1657,1,1), +(1659,3,NULL,'Computations in finite fields',NULL,1159,1160,1657,1,1), +(1660,3,NULL,'Computations on matrices',NULL,1161,1162,1657,1,1), +(1661,3,NULL,'Computations on polynomials',NULL,1163,1164,1657,1,1), +(1662,3,NULL,'Number-theoretic computations (e.g., factoring, primality testing)',NULL,1165,1166,1657,1,1), +(1663,3,'F.2.2','Nonnumerical Algorithms and Problems (E.2-5, G.2, H.2-3)','F.2.2',1168,1183,1077,1,1), +(1664,3,NULL,'Complexity of proof procedures',NULL,1169,1170,1663,1,1), +(1665,3,NULL,'Computations on discrete structures',NULL,1171,1172,1663,1,1), +(1666,3,NULL,'Geometrical problems and computations',NULL,1173,1174,1663,1,1), +(1667,3,NULL,'Pattern matching',NULL,1175,1176,1663,1,1), +(1668,3,NULL,'Routing and layout',NULL,1177,1178,1663,1,1), +(1669,3,NULL,'Sequencing and scheduling',NULL,1179,1180,1663,1,1), +(1670,3,NULL,'Sorting and searching',NULL,1181,1182,1663,1,1), +(1671,3,'F.2.3','Tradeoffs between Complexity Measures (F.1.3)','F.2.3',1184,1185,1077,1,1), +(1672,3,'F.2.m','Miscellaneous','F.2.m',1186,1187,1077,1,1), +(1673,3,'F.3.0','General','F.3.0',1190,1191,1078,1,1), +(1674,3,'F.3.1','Specifying and Verifying and Reasoning about Programs (D.2.1, D.2.4, D.3.1, E.1)','F.3.1',1192,1205,1078,1,1), +(1675,3,NULL,'Assertions',NULL,1193,1194,1674,1,1), +(1676,3,NULL,'Invariants',NULL,1195,1196,1674,1,1), +(1677,3,NULL,'Logics of programs',NULL,1197,1198,1674,1,1), +(1678,3,NULL,'Mechanical verification',NULL,1199,1200,1674,1,1), +(1679,3,NULL,'Pre- and post-conditions',NULL,1201,1202,1674,1,1), +(1680,3,NULL,'Specification techniques',NULL,1203,1204,1674,1,1), +(1681,3,'F.3.2','Semantics of Programming Languages (D.3.1)','F.3.2',1206,1219,1078,1,1), +(1682,3,NULL,'Algebraic approaches to semantics',NULL,1207,1208,1681,1,1), +(1683,3,NULL,'Denotational semantics',NULL,1209,1210,1681,1,1), +(1684,3,NULL,'Operational semantics',NULL,1211,1212,1681,1,1), +(1685,3,NULL,'Partial evaluation (NEW)',NULL,1213,1214,1681,1,1), +(1686,3,NULL,'Process models (NEW)',NULL,1215,1216,1681,1,1), +(1687,3,NULL,'Program analysis (NEW)',NULL,1217,1218,1681,1,1), +(1688,3,'F.3.3','Studies of Program Constructs (D.3.2-3)','F.3.3',1220,1231,1078,1,1), +(1689,3,NULL,'Control primitives',NULL,1221,1222,1688,1,1), +(1690,3,NULL,'Functional constructs',NULL,1223,1224,1688,1,1), +(1691,3,NULL,'Object-oriented constructs (NEW)',NULL,1225,1226,1688,1,1), +(1692,3,NULL,'Program and recursion schemes',NULL,1227,1228,1688,1,1), +(1693,3,NULL,'Type structure',NULL,1229,1230,1688,1,1), +(1694,3,'F.3.m','Miscellaneous','F.3.m',1232,1233,1078,1,1), +(1695,3,'F.4.0','General','F.4.0',1236,1237,1079,1,1), +(1696,3,'F.4.1','Mathematical Logic (F.1.1, I.2.2-4)','F.4.1',1238,1261,1079,1,1), +(1697,3,NULL,'Computability theory',NULL,1239,1240,1696,1,1), +(1698,3,NULL,'Computational logic',NULL,1241,1242,1696,1,1), +(1699,3,NULL,'Lambda calculus and related systems',NULL,1243,1244,1696,1,1), +(1700,3,NULL,'Logic and constraint programming (REVISED)',NULL,1245,1246,1696,1,1), +(1701,3,NULL,'Mechanical theorem proving',NULL,1247,1248,1696,1,1), +(1702,3,NULL,'Modal logic (NEW)',NULL,1249,1250,1696,1,1), +(1703,3,NULL,'Model theory',NULL,1251,1252,1696,1,1), +(1704,3,NULL,'Proof theory',NULL,1253,1254,1696,1,1), +(1705,3,NULL,'Recursive function theory',NULL,1255,1256,1696,1,1), +(1706,3,NULL,'Set theory (NEW)',NULL,1257,1258,1696,1,1), +(1707,3,NULL,'Temporal logic (NEW)',NULL,1259,1260,1696,1,1), +(1708,3,'F.4.2','Grammars and Other Rewriting Systems (D.3.1)','F.4.2',1262,1273,1079,1,1), +(1709,3,NULL,'Decision problems',NULL,1263,1264,1708,1,1), +(1710,3,NULL,'Grammar types (e.g., context-free, context-sensitive)',NULL,1265,1266,1708,1,1), +(1711,3,NULL,'Parallel rewriting systems (e.g., developmental systems, L-systems)',NULL,1267,1268,1708,1,1), +(1712,3,NULL,'Parsing',NULL,1269,1270,1708,1,1), +(1713,3,NULL,'Thue systems',NULL,1271,1272,1708,1,1), +(1714,3,'F.4.3','Formal Languages (D.3.1)','F.4.3',1274,1285,1079,1,1), +(1715,3,NULL,'Algebraic language theory',NULL,1275,1276,1714,1,1), +(1716,3,NULL,'Classes defined by grammars or automata (e.g., context-free languages, regular sets, recursive sets)',NULL,1277,1278,1714,1,1), +(1717,3,NULL,'Classes defined by resource-bounded automata**',NULL,1279,1280,1714,1,1), +(1718,3,NULL,'Decision problems',NULL,1281,1282,1714,1,1), +(1719,3,NULL,'Operations on languages',NULL,1283,1284,1714,1,1), +(1720,3,'F.4.m','Miscellaneous','F.4.m',1286,1287,1079,1,1), +(1721,3,'G.1.0','General','G.1.0',1296,1313,1082,1,1), +(1722,3,NULL,'Computer arithmetic',NULL,1297,1298,1721,1,1), +(1723,3,NULL,'Conditioning (and ill-conditioning) (REVISED)',NULL,1299,1300,1721,1,1), +(1724,3,NULL,'Error analysis',NULL,1301,1302,1721,1,1), +(1725,3,NULL,'Interval arithmetic (NEW)',NULL,1303,1304,1721,1,1), +(1726,3,NULL,'Multiple precision arithmetic (NEW)',NULL,1305,1306,1721,1,1), +(1727,3,NULL,'Numerical algorithms',NULL,1307,1308,1721,1,1), +(1728,3,NULL,'Parallel algorithms',NULL,1309,1310,1721,1,1), +(1729,3,NULL,'Stability (and instability)',NULL,1311,1312,1721,1,1), +(1730,3,'G.1.1','Interpolation (I.3.5, I.3.7)','G.1.1',1314,1325,1082,1,1), +(1731,3,NULL,'Difference formulas**',NULL,1315,1316,1730,1,1), +(1732,3,NULL,'Extrapolation',NULL,1317,1318,1730,1,1), +(1733,3,NULL,'Interpolation formulas',NULL,1319,1320,1730,1,1), +(1734,3,NULL,'Smoothing',NULL,1321,1322,1730,1,1), +(1735,3,NULL,'Spline and piecewise polynomial interpolation',NULL,1323,1324,1730,1,1), +(1736,3,'G.1.2','Approximation','G.1.2',1326,1351,1082,1,1), +(1737,3,NULL,'Approximation of surfaces and contours (NEW)',NULL,1327,1328,1736,1,1), +(1738,3,NULL,'Chebyshev approximation and theory',NULL,1329,1330,1736,1,1), +(1739,3,NULL,'Elementary function approximation',NULL,1331,1332,1736,1,1), +(1740,3,NULL,'Fast Fourier transforms (FFT) (NEW)',NULL,1333,1334,1736,1,1), +(1741,3,NULL,'Least squares approximation',NULL,1335,1336,1736,1,1), +(1742,3,NULL,'Linear approximation',NULL,1337,1338,1736,1,1), +(1743,3,NULL,'Minimax approximation and algorithms',NULL,1339,1340,1736,1,1), +(1744,3,NULL,'Nonlinear approximation',NULL,1341,1342,1736,1,1), +(1745,3,NULL,'Rational approximation',NULL,1343,1344,1736,1,1), +(1746,3,NULL,'Special function approximations (NEW)',NULL,1345,1346,1736,1,1), +(1747,3,NULL,'Spline and piecewise polynomial approximation',NULL,1347,1348,1736,1,1), +(1748,3,NULL,'Wavelets and fractals (NEW)',NULL,1349,1350,1736,1,1), +(1749,3,'G.1.3','Numerical Linear Algebra','G.1.3',1352,1371,1082,1,1), +(1750,3,NULL,'Conditioning',NULL,1353,1354,1749,1,1), +(1751,3,NULL,'Determinants**',NULL,1355,1356,1749,1,1), +(1752,3,NULL,'Eigenvalues and eigenvectors (direct and iterative methods) (REVISED)',NULL,1357,1358,1749,1,1), +(1753,3,NULL,'Error analysis',NULL,1359,1360,1749,1,1), +(1754,3,NULL,'Linear systems (direct and iterative methods)',NULL,1361,1362,1749,1,1), +(1755,3,NULL,'Matrix inversion',NULL,1363,1364,1749,1,1), +(1756,3,NULL,'Pseudoinverses**',NULL,1365,1366,1749,1,1), +(1757,3,NULL,'Singular value decomposition (NEW)',NULL,1367,1368,1749,1,1), +(1758,3,NULL,'Sparse, structured, and very large systems (direct and iterative methods) (REVISED)',NULL,1369,1370,1749,1,1), +(1759,3,'G.1.4','Quadrature and Numerical Differentiation (F.2.1)','G.1.4',1372,1389,1082,1,1), +(1760,3,NULL,'Adaptive and iterative quadrature (REVISED)',NULL,1373,1374,1759,1,1), +(1761,3,NULL,'Automatic differentiation (NEW)',NULL,1375,1376,1759,1,1), +(1762,3,NULL,'Equal interval integration**',NULL,1377,1378,1759,1,1), +(1763,3,NULL,'Error analysis',NULL,1379,1380,1759,1,1), +(1764,3,NULL,'Finite difference methods',NULL,1381,1382,1759,1,1), +(1765,3,NULL,'Gaussian quadrature',NULL,1383,1384,1759,1,1), +(1766,3,NULL,'Iterative methods',NULL,1385,1386,1759,1,1), +(1767,3,NULL,'Multidimensional (multiple) quadrature (REVISED)',NULL,1387,1388,1759,1,1), +(1768,3,'G.1.5','Roots of Nonlinear Equations','G.1.5',1390,1403,1082,1,1), +(1769,3,NULL,'Continuation (homotopy) methods (NEW)',NULL,1391,1392,1768,1,1), +(1770,3,NULL,'Convergence',NULL,1393,1394,1768,1,1), +(1771,3,NULL,'Error analysis',NULL,1395,1396,1768,1,1), +(1772,3,NULL,'Iterative methods',NULL,1397,1398,1768,1,1), +(1773,3,NULL,'Polynomials, methods for',NULL,1399,1400,1768,1,1), +(1774,3,NULL,'Systems of equations',NULL,1401,1402,1768,1,1), +(1775,3,'G.1.6','Optimization','G.1.6',1404,1429,1082,1,1), +(1776,3,NULL,'Constrained optimization',NULL,1405,1406,1775,1,1), +(1777,3,NULL,'Convex programming (NEW)',NULL,1407,1408,1775,1,1), +(1778,3,NULL,'Global optimization (NEW)',NULL,1409,1410,1775,1,1), +(1779,3,NULL,'Gradient methods',NULL,1411,1412,1775,1,1), +(1780,3,NULL,'Integer programming',NULL,1413,1414,1775,1,1), +(1781,3,NULL,'Least squares methods',NULL,1415,1416,1775,1,1), +(1782,3,NULL,'Linear programming',NULL,1417,1418,1775,1,1), +(1783,3,NULL,'Nonlinear programming',NULL,1419,1420,1775,1,1), +(1784,3,NULL,'Quadratic programming methods (NEW)',NULL,1421,1422,1775,1,1), +(1785,3,NULL,'Simulated annealing (NEW)',NULL,1423,1424,1775,1,1), +(1786,3,NULL,'Stochastic programming (NEW)',NULL,1425,1426,1775,1,1), +(1787,3,NULL,'Unconstrained optimization (NEW)',NULL,1427,1428,1775,1,1), +(1788,3,'G.1.7','Ordinary Differential Equations','G.1.7',1430,1451,1082,1,1), +(1789,3,NULL,'Boundary value problems',NULL,1431,1432,1788,1,1), +(1790,3,NULL,'Chaotic systems (NEW)',NULL,1433,1434,1788,1,1), +(1791,3,NULL,'Convergence and stability',NULL,1435,1436,1788,1,1), +(1792,3,NULL,'Differential-algebraic equations (NEW)',NULL,1437,1438,1788,1,1), +(1793,3,NULL,'Error analysis',NULL,1439,1440,1788,1,1), +(1794,3,NULL,'Finite difference methods (NEW)',NULL,1441,1442,1788,1,1), +(1795,3,NULL,'Initial value problems',NULL,1443,1444,1788,1,1), +(1796,3,NULL,'Multistep and multivalue methods (REVISED)',NULL,1445,1446,1788,1,1), +(1797,3,NULL,'One-step (single step) methods (REVISED)',NULL,1447,1448,1788,1,1), +(1798,3,NULL,'Stiff equations',NULL,1449,1450,1788,1,1), +(1799,3,'G.1.8','Partial Differential Equations','G.1.8',1452,1477,1082,1,1), +(1800,3,NULL,'Domain decomposition methods (NEW)',NULL,1453,1454,1799,1,1), +(1801,3,NULL,'Elliptic equations',NULL,1455,1456,1799,1,1), +(1802,3,NULL,'Finite difference methods (REVISED)',NULL,1457,1458,1799,1,1), +(1803,3,NULL,'Finite element methods',NULL,1459,1460,1799,1,1), +(1804,3,NULL,'Finite volume methods (NEW)',NULL,1461,1462,1799,1,1), +(1805,3,NULL,'Hyperbolic equations',NULL,1463,1464,1799,1,1), +(1806,3,NULL,'Inverse problems (NEW)',NULL,1465,1466,1799,1,1), +(1807,3,NULL,'Iterative solution techniques (NEW)',NULL,1467,1468,1799,1,1), +(1808,3,NULL,'Method of lines',NULL,1469,1470,1799,1,1), +(1809,3,NULL,'Multigrid and multilevel methods (NEW)',NULL,1471,1472,1799,1,1), +(1810,3,NULL,'Parabolic equations',NULL,1473,1474,1799,1,1), +(1811,3,NULL,'Spectral methods (NEW)',NULL,1475,1476,1799,1,1), +(1812,3,'G.1.9','Integral Equations','G.1.9',1478,1487,1082,1,1), +(1813,3,NULL,'Delay equations (NEW)',NULL,1479,1480,1812,1,1), +(1814,3,NULL,'Fredholm equations',NULL,1481,1482,1812,1,1), +(1815,3,NULL,'Integro-differential equations',NULL,1483,1484,1812,1,1), +(1816,3,NULL,'Volterra equations',NULL,1485,1486,1812,1,1), +(1817,3,'G.1.m','Miscellaneous','G.1.m',1488,1489,1082,1,1), +(1818,3,'G.2.0','General','G.2.0',1492,1493,1083,1,1), +(1819,3,'G.2.1','Combinatorics (F.2.2)','G.2.1',1494,1505,1083,1,1), +(1820,3,NULL,'Combinatorial algorithms',NULL,1495,1496,1819,1,1), +(1821,3,NULL,'Counting problems',NULL,1497,1498,1819,1,1), +(1822,3,NULL,'Generating functions',NULL,1499,1500,1819,1,1), +(1823,3,NULL,'Permutations and combinations',NULL,1501,1502,1819,1,1), +(1824,3,NULL,'Recurrences and difference equations',NULL,1503,1504,1819,1,1), +(1825,3,'G.2.2','Graph Theory (F.2.2)','G.2.2',1506,1519,1083,1,1), +(1826,3,NULL,'Graph algorithms',NULL,1507,1508,1825,1,1), +(1827,3,NULL,'Graph labeling (NEW)',NULL,1509,1510,1825,1,1), +(1828,3,NULL,'Hypergraphs (NEW)',NULL,1511,1512,1825,1,1), +(1829,3,NULL,'Network problems',NULL,1513,1514,1825,1,1), +(1830,3,NULL,'Path and circuit problems',NULL,1515,1516,1825,1,1), +(1831,3,NULL,'Trees',NULL,1517,1518,1825,1,1), +(1832,3,'G.2.3','Applications (NEW)','G.2.3',1520,1521,1083,1,1), +(1833,3,'G.2.m','Miscellaneous','G.2.m',1522,1523,1083,1,1), +(1834,3,NULL,'Contingency table analysis (NEW)',NULL,1526,1527,1084,1,1), +(1835,3,NULL,'Correlation and regression analysis (NEW)',NULL,1528,1529,1084,1,1), +(1836,3,NULL,'Distribution functions (NEW)',NULL,1530,1531,1084,1,1), +(1837,3,NULL,'Experimental design (NEW)',NULL,1532,1533,1084,1,1), +(1838,3,NULL,'Markov processes (NEW)',NULL,1534,1535,1084,1,1), +(1839,3,NULL,'Multivariate statistics (NEW)',NULL,1536,1537,1084,1,1), +(1840,3,NULL,'Nonparametric statistics (NEW)',NULL,1538,1539,1084,1,1), +(1841,3,NULL,'Probabilistic algorithms (including Monte Carlo)',NULL,1540,1541,1084,1,1), +(1842,3,NULL,'Queueing theory (NEW)',NULL,1542,1543,1084,1,1), +(1843,3,NULL,'Random number generation',NULL,1544,1545,1084,1,1), +(1844,3,NULL,'Reliability and life testing (NEW)',NULL,1546,1547,1084,1,1), +(1845,3,NULL,'Renewal theory (NEW)',NULL,1548,1549,1084,1,1), +(1846,3,NULL,'Robust regression (NEW)',NULL,1550,1551,1084,1,1), +(1847,3,NULL,'Statistical computing',NULL,1552,1553,1084,1,1), +(1848,3,NULL,'Statistical software',NULL,1554,1555,1084,1,1), +(1849,3,NULL,'Stochastic processes (NEW)',NULL,1556,1557,1084,1,1), +(1850,3,NULL,'Survival analysis (NEW)',NULL,1558,1559,1084,1,1), +(1851,3,NULL,'Time series analysis (NEW)',NULL,1560,1561,1084,1,1), +(1852,3,NULL,'Algorithm design and analysis (REVISED)',NULL,1564,1565,1085,1,1), +(1853,3,NULL,'Certification and testing',NULL,1566,1567,1085,1,1), +(1854,3,NULL,'Documentation (NEW)',NULL,1568,1569,1085,1,1), +(1855,3,NULL,'Efficiency',NULL,1570,1571,1085,1,1), +(1856,3,NULL,'Parallel and vector implementations (NEW)',NULL,1572,1573,1085,1,1), +(1857,3,NULL,'Portability**',NULL,1574,1575,1085,1,1), +(1858,3,NULL,'Reliability and robustness',NULL,1576,1577,1085,1,1), +(1859,3,NULL,'User interfaces (NEW)',NULL,1578,1579,1085,1,1), +(1860,3,NULL,'Verification**',NULL,1580,1581,1085,1,1), +(1861,3,NULL,'Queueing theory**',NULL,1584,1585,1086,1,1), +(1862,3,'H.1.0','General','H.1.0',1592,1593,1088,1,1), +(1863,3,'H.1.1','Systems and Information Theory (E.4)','H.1.1',1594,1601,1088,1,1), +(1864,3,NULL,'General systems theory',NULL,1595,1596,1863,1,1), +(1865,3,NULL,'Information theory',NULL,1597,1598,1863,1,1), +(1866,3,NULL,'Value of information',NULL,1599,1600,1863,1,1), +(1867,3,'H.1.2','User/Machine Systems','H.1.2',1602,1609,1088,1,1), +(1868,3,NULL,'Human factors',NULL,1603,1604,1867,1,1), +(1869,3,NULL,'Human information processing',NULL,1605,1606,1867,1,1), +(1870,3,NULL,'Software psychology (NEW)',NULL,1607,1608,1867,1,1), +(1871,3,'H.1.m','Miscellaneous','H.1.m',1610,1611,1088,1,1), +(1872,3,'H.2.0','General','H.2.0',1614,1617,1089,1,1), +(1873,3,NULL,'Security, integrity, and protection**',NULL,1615,1616,1872,1,1), +(1874,3,'H.2.1','Logical Design','H.2.1',1618,1625,1089,1,1), +(1875,3,NULL,'Data models',NULL,1619,1620,1874,1,1), +(1876,3,NULL,'Normal forms',NULL,1621,1622,1874,1,1), +(1877,3,NULL,'Schema and subschema',NULL,1623,1624,1874,1,1), +(1878,3,'H.2.2','Physical Design','H.2.2',1626,1633,1089,1,1), +(1879,3,NULL,'Access methods',NULL,1627,1628,1878,1,1), +(1880,3,NULL,'Deadlock avoidance',NULL,1629,1630,1878,1,1), +(1881,3,NULL,'Recovery and restart',NULL,1631,1632,1878,1,1), +(1882,3,'H.2.3','Languages (D.3.2)','H.2.3',1634,1645,1089,1,1), +(1883,3,NULL,'Data description languages (DDL)',NULL,1635,1636,1882,1,1), +(1884,3,NULL,'Data manipulation languages (DML)',NULL,1637,1638,1882,1,1), +(1885,3,NULL,'Database (persistent) programming languages',NULL,1639,1640,1882,1,1), +(1886,3,NULL,'Query languages',NULL,1641,1642,1882,1,1), +(1887,3,NULL,'Report writers',NULL,1643,1644,1882,1,1), +(1888,3,'H.2.4','Systems','H.2.4',1646,1667,1089,1,1), +(1889,3,NULL,'Concurrency',NULL,1647,1648,1888,1,1), +(1890,3,NULL,'Distributed databases (REVISED)',NULL,1649,1650,1888,1,1), +(1891,3,NULL,'Multimedia databases (NEW)',NULL,1651,1652,1888,1,1), +(1892,3,NULL,'Object-oriented databases (NEW)',NULL,1653,1654,1888,1,1), +(1893,3,NULL,'Parallel databases (NEW)',NULL,1655,1656,1888,1,1), +(1894,3,NULL,'Query processing',NULL,1657,1658,1888,1,1), +(1895,3,NULL,'Relational databases (NEW)',NULL,1659,1660,1888,1,1), +(1896,3,NULL,'Rule-based databases (NEW)',NULL,1661,1662,1888,1,1), +(1897,3,NULL,'Textual databases (NEW)',NULL,1663,1664,1888,1,1), +(1898,3,NULL,'Transaction processing',NULL,1665,1666,1888,1,1), +(1899,3,'H.2.5','Heterogeneous Databases','H.2.5',1668,1673,1089,1,1), +(1900,3,NULL,'Data translation**',NULL,1669,1670,1899,1,1), +(1901,3,NULL,'Program translation**',NULL,1671,1672,1899,1,1), +(1902,3,'H.2.6','Database Machines','H.2.6',1674,1675,1089,1,1), +(1903,3,'H.2.7','Database Administration','H.2.7',1676,1685,1089,1,1), +(1904,3,NULL,'Data dictionary/directory',NULL,1677,1678,1903,1,1), +(1905,3,NULL,'Data warehouse and repository (NEW)',NULL,1679,1680,1903,1,1), +(1906,3,NULL,'Logging and recovery',NULL,1681,1682,1903,1,1), +(1907,3,NULL,'Security, integrity, and protection (NEW)',NULL,1683,1684,1903,1,1), +(1908,3,'H.2.8','Database Applications','H.2.8',1686,1697,1089,1,1), +(1909,3,NULL,'Data mining (NEW)',NULL,1687,1688,1908,1,1), +(1910,3,NULL,'Image databases (NEW)',NULL,1689,1690,1908,1,1), +(1911,3,NULL,'Scientific databases (NEW)',NULL,1691,1692,1908,1,1), +(1912,3,NULL,'Spatial databases and GIS (NEW)',NULL,1693,1694,1908,1,1), +(1913,3,NULL,'Statistical databases (NEW)',NULL,1695,1696,1908,1,1), +(1914,3,'H.2.m','Miscellaneous','H.2.m',1698,1699,1089,1,1), +(1915,3,'H.3.0','General','H.3.0',1702,1703,1090,1,1), +(1916,3,'H.3.1','Content Analysis and Indexing','H.3.1',1704,1715,1090,1,1), +(1917,3,NULL,'Abstracting methods',NULL,1705,1706,1916,1,1), +(1918,3,NULL,'Dictionaries',NULL,1707,1708,1916,1,1), +(1919,3,NULL,'Indexing methods',NULL,1709,1710,1916,1,1), +(1920,3,NULL,'Linguistic processing',NULL,1711,1712,1916,1,1), +(1921,3,NULL,'Thesauruses',NULL,1713,1714,1916,1,1), +(1922,3,'H.3.2','Information Storage','H.3.2',1716,1721,1090,1,1), +(1923,3,NULL,'File organization',NULL,1717,1718,1922,1,1), +(1924,3,NULL,'Record classification**',NULL,1719,1720,1922,1,1), +(1925,3,'H.3.3','Information Search and Retrieval','H.3.3',1722,1737,1090,1,1), +(1926,3,NULL,'Clustering',NULL,1723,1724,1925,1,1), +(1927,3,NULL,'Information filtering (NEW)',NULL,1725,1726,1925,1,1), +(1928,3,NULL,'Query formulation',NULL,1727,1728,1925,1,1), +(1929,3,NULL,'Relevance feedback (NEW)',NULL,1729,1730,1925,1,1), +(1930,3,NULL,'Retrieval models',NULL,1731,1732,1925,1,1), +(1931,3,NULL,'Search process',NULL,1733,1734,1925,1,1), +(1932,3,NULL,'Selection process',NULL,1735,1736,1925,1,1), +(1933,3,'H.3.4','Systems and Software','H.3.4',1738,1751,1090,1,1), +(1934,3,NULL,'Current awareness systems (selective dissemination of information--SDI)**',NULL,1739,1740,1933,1,1), +(1935,3,NULL,'Distributed systems (NEW)',NULL,1741,1742,1933,1,1), +(1936,3,NULL,'Information networks',NULL,1743,1744,1933,1,1), +(1937,3,NULL,'Performance evaluation (efficiency and effectiveness) (NEW)',NULL,1745,1746,1933,1,1), +(1938,3,NULL,'Question-answering (fact retrieval) systems**',NULL,1747,1748,1933,1,1), +(1939,3,NULL,'User profiles and alert services (NEW)',NULL,1749,1750,1933,1,1), +(1940,3,'H.3.5','Online Information Services','H.3.5',1752,1759,1090,1,1), +(1941,3,NULL,'Commercial services (NEW)',NULL,1753,1754,1940,1,1), +(1942,3,NULL,'Data sharing (REVISED)',NULL,1755,1756,1940,1,1), +(1943,3,NULL,'Web-based services (NEW)',NULL,1757,1758,1940,1,1), +(1944,3,'H.3.6','Library Automation','H.3.6',1760,1763,1090,1,1), +(1945,3,NULL,'Large text archives',NULL,1761,1762,1944,1,1), +(1946,3,'H.3.7','Digital Libraries (NEW)','H.3.7',1764,1775,1090,1,1), +(1947,3,NULL,'Collection (NEW)',NULL,1765,1766,1946,1,1), +(1948,3,NULL,'Dissemination (NEW)',NULL,1767,1768,1946,1,1), +(1949,3,NULL,'Standards (NEW)',NULL,1769,1770,1946,1,1), +(1950,3,NULL,'Systems issues (NEW)',NULL,1771,1772,1946,1,1), +(1951,3,NULL,'User issues (NEW)',NULL,1773,1774,1946,1,1), +(1952,3,'H.3.m','Miscellaneous','H.3.m',1776,1777,1090,1,1), +(1953,3,'H.4.0','General','H.4.0',1780,1781,1091,1,1), +(1954,3,'H.4.1','Office Automation (I.7)','H.4.1',1782,1797,1091,1,1), +(1955,3,NULL,'Desktop publishing (NEW)',NULL,1783,1784,1954,1,1), +(1956,3,NULL,'Equipment**',NULL,1785,1786,1954,1,1), +(1957,3,NULL,'Groupware (NEW)',NULL,1787,1788,1954,1,1), +(1958,3,NULL,'Spreadsheets',NULL,1789,1790,1954,1,1), +(1959,3,NULL,'Time management (e.g., calendars, schedules)',NULL,1791,1792,1954,1,1), +(1960,3,NULL,'Word processing',NULL,1793,1794,1954,1,1), +(1961,3,NULL,'Workflow management (NEW)',NULL,1795,1796,1954,1,1), +(1962,3,'H.4.2','Types of Systems','H.4.2',1798,1803,1091,1,1), +(1963,3,NULL,'Decision support (e.g., MIS)',NULL,1799,1800,1962,1,1), +(1964,3,NULL,'Logistics',NULL,1801,1802,1962,1,1), +(1965,3,'H.4.3','Communications Applications','H.4.3',1804,1815,1091,1,1), +(1966,3,NULL,'Bulletin boards',NULL,1805,1806,1965,1,1), +(1967,3,NULL,'Computer conferencing, teleconferencing, and videoconferencing (REVISED)',NULL,1807,1808,1965,1,1), +(1968,3,NULL,'Electronic mail',NULL,1809,1810,1965,1,1), +(1969,3,NULL,'Information browsers (NEW)',NULL,1811,1812,1965,1,1), +(1970,3,NULL,'Videotex',NULL,1813,1814,1965,1,1), +(1971,3,'H.4.m','Miscellaneous','H.4.m',1816,1817,1091,1,1), +(1972,3,'H.5.0','General','H.5.0',1820,1821,1092,1,1), +(1973,3,'H.5.1','Multimedia Information Systems','H.5.1',1822,1835,1092,1,1), +(1974,3,NULL,'Animations',NULL,1823,1824,1973,1,1), +(1975,3,NULL,'Artificial, augmented, and virtual realities (REVISED)',NULL,1825,1826,1973,1,1), +(1976,3,NULL,'Audio input/output',NULL,1827,1828,1973,1,1), +(1977,3,NULL,'Evaluation/methodology',NULL,1829,1830,1973,1,1), +(1978,3,NULL,'Hypertext navigation and maps**',NULL,1831,1832,1973,1,1), +(1979,3,NULL,'Video (e.g., tape, disk, DVI)',NULL,1833,1834,1973,1,1), +(1980,3,'H.5.2','User Interfaces (D.2.2, H.1.2, I.3.6)','H.5.2',1836,1875,1092,1,1), +(1981,3,NULL,'Auditory (non-speech) feedback (NEW)',NULL,1837,1838,1980,1,1), +(1982,3,NULL,'Benchmarking (NEW)',NULL,1839,1840,1980,1,1), +(1983,3,NULL,'Ergonomics',NULL,1841,1842,1980,1,1), +(1984,3,NULL,'Evaluation/methodology',NULL,1843,1844,1980,1,1), +(1985,3,NULL,'Graphical user interfaces (GUI) (NEW)',NULL,1845,1846,1980,1,1), +(1986,3,NULL,'Haptic I/O (NEW)',NULL,1847,1848,1980,1,1), +(1987,3,NULL,'Input devices and strategies (e.g., mouse, touchscreen)',NULL,1849,1850,1980,1,1), +(1988,3,NULL,'Interaction styles (e.g., commands, menus, forms, direct manipulation)',NULL,1851,1852,1980,1,1), +(1989,3,NULL,'Natural language (NEW)',NULL,1853,1854,1980,1,1), +(1990,3,NULL,'Prototyping (NEW)',NULL,1855,1856,1980,1,1), +(1991,3,NULL,'Screen design (e.g., text, graphics, color)',NULL,1857,1858,1980,1,1), +(1992,3,NULL,'Standardization (NEW)',NULL,1859,1860,1980,1,1), +(1993,3,NULL,'Style guides (NEW)',NULL,1861,1862,1980,1,1), +(1994,3,NULL,'Theory and methods',NULL,1863,1864,1980,1,1), +(1995,3,NULL,'Training, help, and documentation',NULL,1865,1866,1980,1,1), +(1996,3,NULL,'User-centered design (NEW)',NULL,1867,1868,1980,1,1), +(1997,3,NULL,'User interface management systems (UIMS)',NULL,1869,1870,1980,1,1), +(1998,3,NULL,'Voice I/O (NEW)',NULL,1871,1872,1980,1,1), +(1999,3,NULL,'Windowing systems',NULL,1873,1874,1980,1,1), +(2000,3,'H.5.3','Group and Organization Interfaces','H.5.3',1876,1893,1092,1,1), +(2001,3,NULL,'Asynchronous interaction',NULL,1877,1878,2000,1,1), +(2002,3,NULL,'Collaborative computing (NEW)',NULL,1879,1880,2000,1,1), +(2003,3,NULL,'Computer-supported cooperative work (NEW)',NULL,1881,1882,2000,1,1), +(2004,3,NULL,'Evaluation/methodology',NULL,1883,1884,2000,1,1), +(2005,3,NULL,'Organizational design',NULL,1885,1886,2000,1,1), +(2006,3,NULL,'Synchronous interaction',NULL,1887,1888,2000,1,1), +(2007,3,NULL,'Theory and models',NULL,1889,1890,2000,1,1), +(2008,3,NULL,'Web-based interaction (NEW)',NULL,1891,1892,2000,1,1), +(2009,3,'H.5.4','Hypertext/Hypermedia (I.7, J.7) (NEW)','H.5.4',1894,1903,1092,1,1), +(2010,3,NULL,'Architectures (NEW)',NULL,1895,1896,2009,1,1), +(2011,3,NULL,'Navigation (NEW)',NULL,1897,1898,2009,1,1), +(2012,3,NULL,'Theory (NEW)',NULL,1899,1900,2009,1,1), +(2013,3,NULL,'User issues (NEW)',NULL,1901,1902,2009,1,1), +(2014,3,'H.5.5','Sound and Music Computing (J.5) (NEW)','H.5.5',1904,1913,1092,1,1), +(2015,3,NULL,'Methodologies and techniques (NEW)',NULL,1905,1906,2014,1,1), +(2016,3,NULL,'Modeling (NEW)',NULL,1907,1908,2014,1,1), +(2017,3,NULL,'Signal analysis, synthesis, and processing (NEW)',NULL,1909,1910,2014,1,1), +(2018,3,NULL,'Systems (NEW)',NULL,1911,1912,2014,1,1), +(2019,3,'H.5.m','Miscellaneous (NEW)','H.5.m',1914,1915,1092,1,1), +(2020,3,'I.1.0','General','I.1.0',1924,1925,1095,1,1), +(2021,3,'I.1.1','Expressions and Their Representation (E.1-2)','I.1.1',1926,1931,1095,1,1), +(2022,3,NULL,'Representations (general and polynomial)',NULL,1927,1928,2021,1,1), +(2023,3,NULL,'Simplification of expressions',NULL,1929,1930,2021,1,1), +(2024,3,'I.1.2','Algorithms (F.2.1-2)','I.1.2',1932,1939,1095,1,1), +(2025,3,NULL,'Algebraic algorithms',NULL,1933,1934,2024,1,1), +(2026,3,NULL,'Analysis of algorithms',NULL,1935,1936,2024,1,1), +(2027,3,NULL,'Nonalgebraic algorithms',NULL,1937,1938,2024,1,1), +(2028,3,'I.1.3','Languages and Systems (D.3.2-3, F.2.2)','I.1.3',1940,1951,1095,1,1), +(2029,3,NULL,'Evaluation strategies',NULL,1941,1942,2028,1,1), +(2030,3,NULL,'Nonprocedural languages**',NULL,1943,1944,2028,1,1), +(2031,3,NULL,'Special-purpose algebraic systems',NULL,1945,1946,2028,1,1), +(2032,3,NULL,'Special-purpose hardware**',NULL,1947,1948,2028,1,1), +(2033,3,NULL,'Substitution mechanisms**',NULL,1949,1950,2028,1,1), +(2034,3,'I.1.4','Applications','I.1.4',1952,1953,1095,1,1), +(2035,3,'I.1.m','Miscellaneous','I.1.m',1954,1955,1095,1,1), +(2036,3,'I.2.0','General','I.2.0',1958,1963,1096,1,1), +(2037,3,NULL,'Cognitive simulation',NULL,1959,1960,2036,1,1), +(2038,3,NULL,'Philosophical foundations',NULL,1961,1962,2036,1,1), +(2039,3,'I.2.1','Applications and Expert Systems (H.4, J)','I.2.1',1964,1979,1096,1,1), +(2040,3,NULL,'Cartography',NULL,1965,1966,2039,1,1), +(2041,3,NULL,'Games',NULL,1967,1968,2039,1,1), +(2042,3,NULL,'Industrial automation',NULL,1969,1970,2039,1,1), +(2043,3,NULL,'Law',NULL,1971,1972,2039,1,1), +(2044,3,NULL,'Medicine and science',NULL,1973,1974,2039,1,1), +(2045,3,NULL,'Natural language interfaces',NULL,1975,1976,2039,1,1), +(2046,3,NULL,'Office automation',NULL,1977,1978,2039,1,1), +(2047,3,'I.2.2','Automatic Programming (D.1.2, F.3.1, F.4.1)','I.2.2',1980,1991,1096,1,1), +(2048,3,NULL,'Automatic analysis of algorithms',NULL,1981,1982,2047,1,1), +(2049,3,NULL,'Program modification',NULL,1983,1984,2047,1,1), +(2050,3,NULL,'Program synthesis',NULL,1985,1986,2047,1,1), +(2051,3,NULL,'Program transformation',NULL,1987,1988,2047,1,1), +(2052,3,NULL,'Program verification',NULL,1989,1990,2047,1,1), +(2053,3,'I.2.3','Deduction and Theorem Proving (F.4.1)','I.2.3',1992,2009,1096,1,1), +(2054,3,NULL,'Answer/reason extraction',NULL,1993,1994,2053,1,1), +(2055,3,NULL,'Deduction (e.g., natural, rule-based)',NULL,1995,1996,2053,1,1), +(2056,3,NULL,'Inference engines (NEW)',NULL,1997,1998,2053,1,1), +(2057,3,NULL,'Logic programming',NULL,1999,2000,2053,1,1), +(2058,3,NULL,'Mathematical induction',NULL,2001,2002,2053,1,1), +(2059,3,NULL,'Metatheory**',NULL,2003,2004,2053,1,1), +(2060,3,NULL,'Nonmonotonic reasoning and belief revision',NULL,2005,2006,2053,1,1), +(2061,3,NULL,'Resolution',NULL,2007,2008,2053,1,1), +(2062,3,'I.2.4','Knowledge Representation Formalisms and Methods (F.4.1)','I.2.4',2010,2027,1096,1,1), +(2063,3,NULL,'Frames and scripts',NULL,2011,2012,2062,1,1), +(2064,3,NULL,'Modal logic (NEW)',NULL,2013,2014,2062,1,1), +(2065,3,NULL,'Predicate logic',NULL,2015,2016,2062,1,1), +(2066,3,NULL,'Relation systems',NULL,2017,2018,2062,1,1), +(2067,3,NULL,'Representation languages',NULL,2019,2020,2062,1,1), +(2068,3,NULL,'Representations (procedural and rule-based)',NULL,2021,2022,2062,1,1), +(2069,3,NULL,'Semantic networks',NULL,2023,2024,2062,1,1), +(2070,3,NULL,'Temporal logic (NEW)',NULL,2025,2026,2062,1,1), +(2071,3,'I.2.5','Programming Languages and Software (D.3.2)','I.2.5',2028,2031,1096,1,1), +(2072,3,NULL,'Expert system tools and techniques',NULL,2029,2030,2071,1,1), +(2073,3,'I.2.6','Learning (K.3.2)','I.2.6',2032,2047,1096,1,1), +(2074,3,NULL,'Analogies',NULL,2033,2034,2073,1,1), +(2075,3,NULL,'Concept learning',NULL,2035,2036,2073,1,1), +(2076,3,NULL,'Connectionism and neural nets',NULL,2037,2038,2073,1,1), +(2077,3,NULL,'Induction',NULL,2039,2040,2073,1,1), +(2078,3,NULL,'Knowledge acquisition',NULL,2041,2042,2073,1,1), +(2079,3,NULL,'Language acquisition',NULL,2043,2044,2073,1,1), +(2080,3,NULL,'Parameter learning',NULL,2045,2046,2073,1,1), +(2081,3,'I.2.7','Natural Language Processing','I.2.7',2048,2063,1096,1,1), +(2082,3,NULL,'Discourse',NULL,2049,2050,2081,1,1), +(2083,3,NULL,'Language generation',NULL,2051,2052,2081,1,1), +(2084,3,NULL,'Language models',NULL,2053,2054,2081,1,1), +(2085,3,NULL,'Language parsing and understanding',NULL,2055,2056,2081,1,1), +(2086,3,NULL,'Machine translation',NULL,2057,2058,2081,1,1), +(2087,3,NULL,'Speech recognition and synthesis',NULL,2059,2060,2081,1,1), +(2088,3,NULL,'Text analysis',NULL,2061,2062,2081,1,1), +(2089,3,'I.2.8','Problem Solving, Control Methods, and Search (F.2.2)','I.2.8',2064,2079,1096,1,1), +(2090,3,NULL,'Backtracking',NULL,2065,2066,2089,1,1), +(2091,3,NULL,'Control theory (NEW)',NULL,2067,2068,2089,1,1), +(2092,3,NULL,'Dynamic programming',NULL,2069,2070,2089,1,1), +(2093,3,NULL,'Graph and tree search strategies',NULL,2071,2072,2089,1,1), +(2094,3,NULL,'Heuristic methods',NULL,2073,2074,2089,1,1), +(2095,3,NULL,'Plan execution, formation, and generation',NULL,2075,2076,2089,1,1), +(2096,3,NULL,'Scheduling (NEW)',NULL,2077,2078,2089,1,1), +(2097,3,'I.2.9','Robotics','I.2.9',2080,2097,1096,1,1), +(2098,3,NULL,'Autonomous vehicles (NEW)',NULL,2081,2082,2097,1,1), +(2099,3,NULL,'Commercial robots and applications (NEW)',NULL,2083,2084,2097,1,1), +(2100,3,NULL,'Kinematics and dynamics (NEW)',NULL,2085,2086,2097,1,1), +(2101,3,NULL,'Manipulators',NULL,2087,2088,2097,1,1), +(2102,3,NULL,'Operator interfaces (NEW)',NULL,2089,2090,2097,1,1), +(2103,3,NULL,'Propelling mechanisms',NULL,2091,2092,2097,1,1), +(2104,3,NULL,'Sensors',NULL,2093,2094,2097,1,1), +(2105,3,NULL,'Workcell organization and planning (NEW)',NULL,2095,2096,2097,1,1), +(2106,3,'I.2.10','Vision and Scene Understanding (I.4.8, I.5)','I.2.10',2098,2119,1096,1,1), +(2107,3,NULL,'3D/stereo scene analysis (NEW)',NULL,2099,2100,2106,1,1), +(2108,3,NULL,'Architecture and control structures**',NULL,2101,2102,2106,1,1), +(2109,3,NULL,'Intensity, color, photometry, and thresholding',NULL,2103,2104,2106,1,1), +(2110,3,NULL,'Modeling and recovery of physical attributes',NULL,2105,2106,2106,1,1), +(2111,3,NULL,'Motion',NULL,2107,2108,2106,1,1), +(2112,3,NULL,'Perceptual reasoning',NULL,2109,2110,2106,1,1), +(2113,3,NULL,'Representations, data structures, and transforms',NULL,2111,2112,2106,1,1), +(2114,3,NULL,'Shape',NULL,2113,2114,2106,1,1), +(2115,3,NULL,'Texture',NULL,2115,2116,2106,1,1), +(2116,3,NULL,'Video analysis (NEW)',NULL,2117,2118,2106,1,1), +(2117,3,'I.2.11','Distributed Artificial Intelligence','I.2.11',2120,2129,1096,1,1), +(2118,3,NULL,'Coherence and coordination',NULL,2121,2122,2117,1,1), +(2119,3,NULL,'Intelligent agents (NEW)',NULL,2123,2124,2117,1,1), +(2120,3,NULL,'Languages and structures',NULL,2125,2126,2117,1,1), +(2121,3,NULL,'Multiagent systems (NEW)',NULL,2127,2128,2117,1,1), +(2122,3,'I.2.m','Miscellaneous','I.2.m',2130,2131,1096,1,1), +(2123,3,'I.3.0','General','I.3.0',2134,2135,1097,1,1), +(2124,3,'I.3.1','Hardware Architecture (B.4.2)','I.3.1',2136,2153,1097,1,1), +(2125,3,NULL,'Graphics processors',NULL,2137,2138,2124,1,1), +(2126,3,NULL,'Hardcopy devices**',NULL,2139,2140,2124,1,1), +(2127,3,NULL,'Input devices',NULL,2141,2142,2124,1,1), +(2128,3,NULL,'Parallel processing',NULL,2143,2144,2124,1,1), +(2129,3,NULL,'Raster display devices',NULL,2145,2146,2124,1,1), +(2130,3,NULL,'Storage devices**',NULL,2147,2148,2124,1,1), +(2131,3,NULL,'Three-dimensional displays**',NULL,2149,2150,2124,1,1), +(2132,3,NULL,'Vector display devices**',NULL,2151,2152,2124,1,1), +(2133,3,'I.3.2','Graphics Systems (C.2.1, C.2.4, C.3)','I.3.2',2154,2161,1097,1,1), +(2134,3,NULL,'Distributed/network graphics',NULL,2155,2156,2133,1,1), +(2135,3,NULL,'Remote systems**',NULL,2157,2158,2133,1,1), +(2136,3,NULL,'Stand-alone systems**',NULL,2159,2160,2133,1,1), +(2137,3,'I.3.3','Picture/Image Generation','I.3.3',2162,2175,1097,1,1), +(2138,3,NULL,'Antialiasing**',NULL,2163,2164,2137,1,1), +(2139,3,NULL,'Bitmap and framebuffer operations',NULL,2165,2166,2137,1,1), +(2140,3,NULL,'Digitizing and scanning',NULL,2167,2168,2137,1,1), +(2141,3,NULL,'Display algorithms',NULL,2169,2170,2137,1,1), +(2142,3,NULL,'Line and curve generation',NULL,2171,2172,2137,1,1), +(2143,3,NULL,'Viewing algorithms',NULL,2173,2174,2137,1,1), +(2144,3,'I.3.4','Graphics Utilities','I.3.4',2176,2195,1097,1,1), +(2145,3,NULL,'Application packages',NULL,2177,2178,2144,1,1), +(2146,3,NULL,'Device drivers**',NULL,2179,2180,2144,1,1), +(2147,3,NULL,'Graphics editors',NULL,2181,2182,2144,1,1), +(2148,3,NULL,'Graphics packages',NULL,2183,2184,2144,1,1), +(2149,3,NULL,'Meta files**',NULL,2185,2186,2144,1,1), +(2150,3,NULL,'Paint systems',NULL,2187,2188,2144,1,1), +(2151,3,NULL,'Picture description languages**',NULL,2189,2190,2144,1,1), +(2152,3,NULL,'Software support',NULL,2191,2192,2144,1,1), +(2153,3,NULL,'Virtual device interfaces',NULL,2193,2194,2144,1,1), +(2154,3,'I.3.5','Computational Geometry and Object Modeling','I.3.5',2196,2215,1097,1,1), +(2155,3,NULL,'Boundary representations',NULL,2197,2198,2154,1,1), +(2156,3,NULL,'Constructive solid geometry (CSG)**',NULL,2199,2200,2154,1,1), +(2157,3,NULL,'Curve, surface, solid, and object representations',NULL,2201,2202,2154,1,1), +(2158,3,NULL,'Geometric algorithms, languages, and systems',NULL,2203,2204,2154,1,1), +(2159,3,NULL,'Hierarchy and geometric transformations',NULL,2205,2206,2154,1,1), +(2160,3,NULL,'Modeling packages',NULL,2207,2208,2154,1,1), +(2161,3,NULL,'Object hierarchies',NULL,2209,2210,2154,1,1), +(2162,3,NULL,'Physically based modeling',NULL,2211,2212,2154,1,1), +(2163,3,NULL,'Splines',NULL,2213,2214,2154,1,1), +(2164,3,'I.3.6','Methodology and Techniques','I.3.6',2216,2229,1097,1,1), +(2165,3,NULL,'Device independence**',NULL,2217,2218,2164,1,1), +(2166,3,NULL,'Ergonomics',NULL,2219,2220,2164,1,1), +(2167,3,NULL,'Graphics data structures and data types',NULL,2221,2222,2164,1,1), +(2168,3,NULL,'Interaction techniques',NULL,2223,2224,2164,1,1), +(2169,3,NULL,'Languages',NULL,2225,2226,2164,1,1), +(2170,3,NULL,'Standards',NULL,2227,2228,2164,1,1), +(2171,3,'I.3.7','Three-Dimensional Graphics and Realism','I.3.7',2230,2247,1097,1,1), +(2172,3,NULL,'Animation',NULL,2231,2232,2171,1,1), +(2173,3,NULL,'Color, shading, shadowing, and texture',NULL,2233,2234,2171,1,1), +(2174,3,NULL,'Fractals',NULL,2235,2236,2171,1,1), +(2175,3,NULL,'Hidden line/surface removal',NULL,2237,2238,2171,1,1), +(2176,3,NULL,'Radiosity',NULL,2239,2240,2171,1,1), +(2177,3,NULL,'Raytracing',NULL,2241,2242,2171,1,1), +(2178,3,NULL,'Virtual reality',NULL,2243,2244,2171,1,1), +(2179,3,NULL,'Visible line/surface algorithms',NULL,2245,2246,2171,1,1), +(2180,3,'I.3.8','Applications','I.3.8',2248,2249,1097,1,1), +(2181,3,'I.3.m','Miscellaneous','I.3.m',2250,2251,1097,1,1), +(2182,3,'I.4.0','General','I.4.0',2254,2259,1098,1,1), +(2183,3,NULL,'Image displays',NULL,2255,2256,2182,1,1), +(2184,3,NULL,'Image processing software',NULL,2257,2258,2182,1,1), +(2185,3,'I.4.1','Digitization and Image Capture (REVISED)','I.4.1',2260,2275,1098,1,1), +(2186,3,NULL,'Camera calibration (NEW)',NULL,2261,2262,2185,1,1), +(2187,3,NULL,'Imaging geometry (NEW)',NULL,2263,2264,2185,1,1), +(2188,3,NULL,'Quantization',NULL,2265,2266,2185,1,1), +(2189,3,NULL,'Radiometry (NEW)',NULL,2267,2268,2185,1,1), +(2190,3,NULL,'Reflectance (NEW)',NULL,2269,2270,2185,1,1), +(2191,3,NULL,'Sampling',NULL,2271,2272,2185,1,1), +(2192,3,NULL,'Scanning',NULL,2273,2274,2185,1,1), +(2193,3,'I.4.2','Compression (Coding) (E.4)','I.4.2',2276,2281,1098,1,1), +(2194,3,NULL,'Approximate methods',NULL,2277,2278,2193,1,1), +(2195,3,NULL,'Exact coding**',NULL,2279,2280,2193,1,1), +(2196,3,'I.4.3','Enhancement','I.4.3',2282,2295,1098,1,1), +(2197,3,NULL,'Filtering',NULL,2283,2284,2196,1,1), +(2198,3,NULL,'Geometric correction',NULL,2285,2286,2196,1,1), +(2199,3,NULL,'Grayscale manipulation',NULL,2287,2288,2196,1,1), +(2200,3,NULL,'Registration',NULL,2289,2290,2196,1,1), +(2201,3,NULL,'Sharpening and deblurring**',NULL,2291,2292,2196,1,1), +(2202,3,NULL,'Smoothing',NULL,2293,2294,2196,1,1), +(2203,3,'I.4.4','Restoration','I.4.4',2296,2305,1098,1,1), +(2204,3,NULL,'Inverse filtering**',NULL,2297,2298,2203,1,1), +(2205,3,NULL,'Kalman filtering',NULL,2299,2300,2203,1,1), +(2206,3,NULL,'Pseudoinverse restoration**',NULL,2301,2302,2203,1,1), +(2207,3,NULL,'Wiener filtering**',NULL,2303,2304,2203,1,1), +(2208,3,'I.4.5','Reconstruction','I.4.5',2306,2313,1098,1,1), +(2209,3,NULL,'Series expansion methods',NULL,2307,2308,2208,1,1), +(2210,3,NULL,'Summation methods**',NULL,2309,2310,2208,1,1), +(2211,3,NULL,'Transform methods',NULL,2311,2312,2208,1,1), +(2212,3,'I.4.6','Segmentation','I.4.6',2314,2323,1098,1,1), +(2213,3,NULL,'Edge and feature detection',NULL,2315,2316,2212,1,1), +(2214,3,NULL,'Pixel classification',NULL,2317,2318,2212,1,1), +(2215,3,NULL,'Region growing, partitioning',NULL,2319,2320,2212,1,1), +(2216,3,NULL,'Relaxation (NEW)',NULL,2321,2322,2212,1,1), +(2217,3,'I.4.7','Feature Measurement','I.4.7',2324,2337,1098,1,1), +(2218,3,NULL,'Feature representation (NEW)',NULL,2325,2326,2217,1,1), +(2219,3,NULL,'Invariants',NULL,2327,2328,2217,1,1), +(2220,3,NULL,'Moments',NULL,2329,2330,2217,1,1), +(2221,3,NULL,'Projections',NULL,2331,2332,2217,1,1), +(2222,3,NULL,'Size and shape',NULL,2333,2334,2217,1,1), +(2223,3,NULL,'Texture',NULL,2335,2336,2217,1,1), +(2224,3,'I.4.8','Scene Analysis','I.4.8',2338,2365,1098,1,1), +(2225,3,NULL,'Color (NEW)',NULL,2339,2340,2224,1,1), +(2226,3,NULL,'Depth cues',NULL,2341,2342,2224,1,1), +(2227,3,NULL,'Motion (NEW)',NULL,2343,2344,2224,1,1), +(2228,3,NULL,'Object recognition (NEW)',NULL,2345,2346,2224,1,1), +(2229,3,NULL,'Photometry',NULL,2347,2348,2224,1,1), +(2230,3,NULL,'Range data',NULL,2349,2350,2224,1,1), +(2231,3,NULL,'Sensor fusion',NULL,2351,2352,2224,1,1), +(2232,3,NULL,'Shading (NEW)',NULL,2353,2354,2224,1,1), +(2233,3,NULL,'Shape (NEW)',NULL,2355,2356,2224,1,1), +(2234,3,NULL,'Stereo',NULL,2357,2358,2224,1,1), +(2235,3,NULL,'Surface fitting (NEW)',NULL,2359,2360,2224,1,1), +(2236,3,NULL,'Time-varying imagery',NULL,2361,2362,2224,1,1), +(2237,3,NULL,'Tracking (NEW)',NULL,2363,2364,2224,1,1), +(2238,3,'I.4.9','Applications','I.4.9',2366,2367,1098,1,1), +(2239,3,'I.4.10','Image Representation','I.4.10',2368,2379,1098,1,1), +(2240,3,NULL,'Hierarchical',NULL,2369,2370,2239,1,1), +(2241,3,NULL,'Morphological',NULL,2371,2372,2239,1,1), +(2242,3,NULL,'Multidimensional',NULL,2373,2374,2239,1,1), +(2243,3,NULL,'Statistical',NULL,2375,2376,2239,1,1), +(2244,3,NULL,'Volumetric',NULL,2377,2378,2239,1,1), +(2245,3,'I.4.m','Miscellaneous','I.4.m',2380,2381,1098,1,1), +(2246,3,'I.5.0','General','I.5.0',2384,2385,1099,1,1), +(2247,3,'I.5.1','Models','I.5.1',2386,2399,1099,1,1), +(2248,3,NULL,'Deterministic**',NULL,2387,2388,2247,1,1), +(2249,3,NULL,'Fuzzy set',NULL,2389,2390,2247,1,1), +(2250,3,NULL,'Geometric',NULL,2391,2392,2247,1,1), +(2251,3,NULL,'Neural nets',NULL,2393,2394,2247,1,1), +(2252,3,NULL,'Statistical',NULL,2395,2396,2247,1,1), +(2253,3,NULL,'Structural',NULL,2397,2398,2247,1,1), +(2254,3,'I.5.2','Design Methodology','I.5.2',2400,2407,1099,1,1), +(2255,3,NULL,'Classifier design and evaluation',NULL,2401,2402,2254,1,1), +(2256,3,NULL,'Feature evaluation and selection',NULL,2403,2404,2254,1,1), +(2257,3,NULL,'Pattern analysis',NULL,2405,2406,2254,1,1), +(2258,3,'I.5.3','Clustering','I.5.3',2408,2413,1099,1,1), +(2259,3,NULL,'Algorithms',NULL,2409,2410,2258,1,1), +(2260,3,NULL,'Similarity measures',NULL,2411,2412,2258,1,1), +(2261,3,'I.5.4','Applications','I.5.4',2414,2423,1099,1,1), +(2262,3,NULL,'Computer vision',NULL,2415,2416,2261,1,1), +(2263,3,NULL,'Signal processing',NULL,2417,2418,2261,1,1), +(2264,3,NULL,'Text processing',NULL,2419,2420,2261,1,1), +(2265,3,NULL,'Waveform analysis',NULL,2421,2422,2261,1,1), +(2266,3,'I.5.5','Implementation (C.3)','I.5.5',2424,2429,1099,1,1), +(2267,3,NULL,'Interactive systems',NULL,2425,2426,2266,1,1), +(2268,3,NULL,'Special architectures',NULL,2427,2428,2266,1,1), +(2269,3,'I.5.m','Miscellaneous','I.5.m',2430,2431,1099,1,1), +(2270,3,'I.6.0','General','I.6.0',2434,2435,1100,1,1), +(2271,3,'I.6.1','Simulation Theory','I.6.1',2436,2443,1100,1,1), +(2272,3,NULL,'Model classification',NULL,2437,2438,2271,1,1), +(2273,3,NULL,'Systems theory',NULL,2439,2440,2271,1,1), +(2274,3,NULL,'Types of simulation (continuous and discrete)*',NULL,2441,2442,2271,1,1), +(2275,3,'I.6.2','Simulation Languages','I.6.2',2444,2445,1100,1,1), +(2276,3,'I.6.3','Applications','I.6.3',2446,2447,1100,1,1), +(2277,3,'I.6.4','Model Validation and Analysis','I.6.4',2448,2449,1100,1,1), +(2278,3,'I.6.5','Model Development','I.6.5',2450,2453,1100,1,1), +(2279,3,NULL,'Modeling methodologies',NULL,2451,2452,2278,1,1), +(2280,3,'I.6.6','Simulation Output Analysis','I.6.6',2454,2455,1100,1,1), +(2281,3,'I.6.7','Simulation Support Systems','I.6.7',2456,2459,1100,1,1), +(2282,3,NULL,'Environments',NULL,2457,2458,2281,1,1), +(2283,3,'I.6.8','Types of Simulation','I.6.8',2460,2479,1100,1,1), +(2284,3,NULL,'Animation',NULL,2461,2462,2283,1,1), +(2285,3,NULL,'Combined',NULL,2463,2464,2283,1,1), +(2286,3,NULL,'Continuous',NULL,2465,2466,2283,1,1), +(2287,3,NULL,'Discrete event',NULL,2467,2468,2283,1,1), +(2288,3,NULL,'Distributed',NULL,2469,2470,2283,1,1), +(2289,3,NULL,'Gaming',NULL,2471,2472,2283,1,1), +(2290,3,NULL,'Monte Carlo',NULL,2473,2474,2283,1,1), +(2291,3,NULL,'Parallel',NULL,2475,2476,2283,1,1), +(2292,3,NULL,'Visual',NULL,2477,2478,2283,1,1), +(2293,3,'I.6.m','Miscellaneous','I.6.m',2480,2481,1100,1,1), +(2294,3,'I.7.0','General','I.7.0',2484,2485,1101,1,1), +(2295,3,'I.7.1','Document and Text Editing (REVISED)','I.7.1',2486,2495,1101,1,1), +(2296,3,NULL,'Document management (NEW)',NULL,2487,2488,2295,1,1), +(2297,3,NULL,'Languages**',NULL,2489,2490,2295,1,1), +(2298,3,NULL,'Spelling**',NULL,2491,2492,2295,1,1), +(2299,3,NULL,'Version control (NEW)',NULL,2493,2494,2295,1,1), +(2300,3,'I.7.2','Document Preparation','I.7.2',2496,2517,1101,1,1), +(2301,3,NULL,'Desktop publishing',NULL,2497,2498,2300,1,1), +(2302,3,NULL,'Format and notation',NULL,2499,2500,2300,1,1), +(2303,3,NULL,'Hypertext/hypermedia',NULL,2501,2502,2300,1,1), +(2304,3,NULL,'Index generation (NEW)',NULL,2503,2504,2300,1,1), +(2305,3,NULL,'Languages and systems',NULL,2505,2506,2300,1,1), +(2306,3,NULL,'Markup languages (NEW)',NULL,2507,2508,2300,1,1), +(2307,3,NULL,'Multi/mixed media',NULL,2509,2510,2300,1,1), +(2308,3,NULL,'Photocomposition/typesetting',NULL,2511,2512,2300,1,1), +(2309,3,NULL,'Scripting languages (NEW)',NULL,2513,2514,2300,1,1), +(2310,3,NULL,'Standards',NULL,2515,2516,2300,1,1), +(2311,3,'I.7.3','Index Generation**','I.7.3',2518,2519,1101,1,1), +(2312,3,'I.7.4','Electronic Publishing (H.5.4, J.7) (NEW)','I.7.4',2520,2521,1101,1,1), +(2313,3,'I.7.5','Document Capture (I.4.1) (NEW)','I.7.5',2522,2531,1101,1,1), +(2314,3,NULL,'Document analysis (NEW)',NULL,2523,2524,2313,1,1), +(2315,3,NULL,'Graphics recognition and interpretation (NEW)',NULL,2525,2526,2313,1,1), +(2316,3,NULL,'Optical character recognition (OCR) (NEW)',NULL,2527,2528,2313,1,1), +(2317,3,NULL,'Scanning (NEW)',NULL,2529,2530,2313,1,1), +(2318,3,'I.7.m','Miscellaneous','I.7.m',2532,2533,1101,1,1), +(2319,3,NULL,'Business',NULL,2542,2543,1104,1,1), +(2320,3,NULL,'Education',NULL,2544,2545,1104,1,1), +(2321,3,NULL,'Financial (e.g., EFTS)',NULL,2546,2547,1104,1,1), +(2322,3,NULL,'Government',NULL,2548,2549,1104,1,1), +(2323,3,NULL,'Law',NULL,2550,2551,1104,1,1), +(2324,3,NULL,'Manufacturing',NULL,2552,2553,1104,1,1), +(2325,3,NULL,'Marketing',NULL,2554,2555,1104,1,1), +(2326,3,NULL,'Military',NULL,2556,2557,1104,1,1), +(2327,3,NULL,'Aerospace',NULL,2560,2561,1105,1,1), +(2328,3,NULL,'Archaeology (NEW)',NULL,2562,2563,1105,1,1), +(2329,3,NULL,'Astronomy',NULL,2564,2565,1105,1,1), +(2330,3,NULL,'Chemistry',NULL,2566,2567,1105,1,1), +(2331,3,NULL,'Earth and atmospheric sciences',NULL,2568,2569,1105,1,1), +(2332,3,NULL,'Electronics',NULL,2570,2571,1105,1,1), +(2333,3,NULL,'Engineering',NULL,2572,2573,1105,1,1), +(2334,3,NULL,'Mathematics and statistics',NULL,2574,2575,1105,1,1), +(2335,3,NULL,'Physics',NULL,2576,2577,1105,1,1), +(2336,3,NULL,'Biology and genetics (REVISED)',NULL,2580,2581,1106,1,1), +(2337,3,NULL,'Health',NULL,2582,2583,1106,1,1), +(2338,3,NULL,'Medical information systems',NULL,2584,2585,1106,1,1), +(2339,3,NULL,'Economics',NULL,2588,2589,1107,1,1), +(2340,3,NULL,'Psychology',NULL,2590,2591,1107,1,1), +(2341,3,NULL,'Sociology',NULL,2592,2593,1107,1,1), +(2342,3,NULL,'Architecture (NEW)',NULL,2596,2597,1108,1,1), +(2343,3,NULL,'Arts, fine and performing**',NULL,2598,2599,1108,1,1), +(2344,3,NULL,'Fine arts (NEW)',NULL,2600,2601,1108,1,1), +(2345,3,NULL,'Language translation',NULL,2602,2603,1108,1,1), +(2346,3,NULL,'Linguistics',NULL,2604,2605,1108,1,1), +(2347,3,NULL,'Literature',NULL,2606,2607,1108,1,1), +(2348,3,NULL,'Music**',NULL,2608,2609,1108,1,1), +(2349,3,NULL,'Performing arts (e.g., dance, music) (NEW)',NULL,2610,2611,1108,1,1), +(2350,3,NULL,'Computer-aided design (CAD)',NULL,2614,2615,1109,1,1), +(2351,3,NULL,'Computer-aided manufacturing (CAM)',NULL,2616,2617,1109,1,1), +(2352,3,NULL,'Command and control',NULL,2620,2621,1110,1,1), +(2353,3,NULL,'Consumer products',NULL,2622,2623,1110,1,1), +(2354,3,NULL,'Industrial control',NULL,2624,2625,1110,1,1), +(2355,3,NULL,'Military',NULL,2626,2627,1110,1,1), +(2356,3,NULL,'Process control',NULL,2628,2629,1110,1,1), +(2357,3,NULL,'Publishing',NULL,2630,2631,1110,1,1), +(2358,3,NULL,'Real time',NULL,2632,2633,1110,1,1), +(2359,3,NULL,'Markets',NULL,2642,2643,1113,1,1), +(2360,3,NULL,'Standards',NULL,2644,2645,1113,1,1), +(2361,3,NULL,'Statistics',NULL,2646,2647,1113,1,1), +(2362,3,NULL,'Suppliers',NULL,2648,2649,1113,1,1), +(2363,3,NULL,'Hardware',NULL,2652,2653,1114,1,1), +(2364,3,NULL,'People',NULL,2654,2655,1114,1,1), +(2365,3,NULL,'Software',NULL,2656,2657,1114,1,1), +(2366,3,NULL,'Systems',NULL,2658,2659,1114,1,1), +(2367,3,NULL,'Theory',NULL,2660,2661,1114,1,1), +(2368,3,'K.3.0','General','K.3.0',2664,2665,1115,1,1), +(2369,3,'K.3.1','Computer Uses in Education','K.3.1',2666,2675,1115,1,1), +(2370,3,NULL,'Collaborative learning (NEW)',NULL,2667,2668,2369,1,1), +(2371,3,NULL,'Computer-assisted instruction (CAI)',NULL,2669,2670,2369,1,1), +(2372,3,NULL,'Computer-managed instruction (CMI)',NULL,2671,2672,2369,1,1), +(2373,3,NULL,'Distance learning (NEW)',NULL,2673,2674,2369,1,1), +(2374,3,'K.3.2','Computer and Information Science Education','K.3.2',2676,2689,1115,1,1), +(2375,3,NULL,'Accreditation (NEW)',NULL,2677,2678,2374,1,1), +(2376,3,NULL,'Computer science education',NULL,2679,2680,2374,1,1), +(2377,3,NULL,'Curriculum',NULL,2681,2682,2374,1,1), +(2378,3,NULL,'Information systems education',NULL,2683,2684,2374,1,1), +(2379,3,NULL,'Literacy (NEW)',NULL,2685,2686,2374,1,1), +(2380,3,NULL,'Self-assessment',NULL,2687,2688,2374,1,1), +(2381,3,'K.3.m','Miscellaneous','K.3.m',2690,2695,1115,1,1), +(2382,3,NULL,'Accreditation**',NULL,2691,2692,2381,1,1), +(2383,3,NULL,'Computer literacy**',NULL,2693,2694,2381,1,1), +(2384,3,'K.4.0','General','K.4.0',2698,2699,1116,1,1), +(2385,3,'K.4.1','Public Policy Issues','K.4.1',2700,2719,1116,1,1), +(2386,3,NULL,'Abuse and crime involving computers (NEW)',NULL,2701,2702,2385,1,1), +(2387,3,NULL,'Computer-related health issues (NEW)',NULL,2703,2704,2385,1,1), +(2388,3,NULL,'Ethics (NEW)',NULL,2705,2706,2385,1,1), +(2389,3,NULL,'Human safety',NULL,2707,2708,2385,1,1), +(2390,3,NULL,'Intellectual property rights (NEW)',NULL,2709,2710,2385,1,1), +(2391,3,NULL,'Privacy',NULL,2711,2712,2385,1,1), +(2392,3,NULL,'Regulation',NULL,2713,2714,2385,1,1), +(2393,3,NULL,'Transborder data flow',NULL,2715,2716,2385,1,1), +(2394,3,NULL,'Use/abuse of power (NEW)',NULL,2717,2718,2385,1,1), +(2395,3,'K.4.2','Social Issues','K.4.2',2720,2729,1116,1,1), +(2396,3,NULL,'Abuse and crime involving computers**',NULL,2721,2722,2395,1,1), +(2397,3,NULL,'Assistive technologies for persons with disabilities (NEW)',NULL,2723,2724,2395,1,1), +(2398,3,NULL,'Employment',NULL,2725,2726,2395,1,1), +(2399,3,NULL,'Handicapped persons/special needs**',NULL,2727,2728,2395,1,1), +(2400,3,'K.4.3','Organizational Impacts','K.4.3',2730,2739,1116,1,1), +(2401,3,NULL,'Automation (NEW)',NULL,2731,2732,2400,1,1), +(2402,3,NULL,'Computer-supported collaborative work (NEW)',NULL,2733,2734,2400,1,1), +(2403,3,NULL,'Employment (NEW)',NULL,2735,2736,2400,1,1), +(2404,3,NULL,'Reengineering (NEW)',NULL,2737,2738,2400,1,1), +(2405,3,'K.4.4','Electronic Commerce (J.1) (NEW)','K.4.4',2740,2753,1116,1,1), +(2406,3,NULL,'Cybercash, digital cash (NEW)',NULL,2741,2742,2405,1,1), +(2407,3,NULL,'Distributed commercial transactions (NEW)',NULL,2743,2744,2405,1,1), +(2408,3,NULL,'Electronic data interchange (EDI) (NEW)',NULL,2745,2746,2405,1,1), +(2409,3,NULL,'Intellectual property (NEW)',NULL,2747,2748,2405,1,1), +(2410,3,NULL,'Payment schemes (NEW)',NULL,2749,2750,2405,1,1), +(2411,3,NULL,'Security (NEW)',NULL,2751,2752,2405,1,1), +(2412,3,'K.4.m','Miscellaneous','K.4.m',2754,2755,1116,1,1), +(2413,3,'K.5.0','General','K.5.0',2758,2759,1117,1,1), +(2414,3,'K.5.1','Hardware/Software Protection (REVISED)','K.5.1',2760,2771,1117,1,1), +(2415,3,NULL,'Copyrights',NULL,2761,2762,2414,1,1), +(2416,3,NULL,'Licensing (NEW)',NULL,2763,2764,2414,1,1), +(2417,3,NULL,'Patents',NULL,2765,2766,2414,1,1), +(2418,3,NULL,'Proprietary rights',NULL,2767,2768,2414,1,1), +(2419,3,NULL,'Trade secrets**',NULL,2769,2770,2414,1,1), +(2420,3,'K.5.2','Governmental Issues','K.5.2',2772,2779,1117,1,1), +(2421,3,NULL,'Censorship (NEW)',NULL,2773,2774,2420,1,1), +(2422,3,NULL,'Regulation',NULL,2775,2776,2420,1,1), +(2423,3,NULL,'Taxation',NULL,2777,2778,2420,1,1), +(2424,3,'K.5.m','Miscellaneous','K.5.m',2780,2785,1117,1,1), +(2425,3,NULL,'Contracts**',NULL,2781,2782,2424,1,1), +(2426,3,NULL,'Hardware patents**',NULL,2783,2784,2424,1,1), +(2427,3,'K.6.0','General','K.6.0',2788,2791,1118,1,1), +(2428,3,NULL,'Economics',NULL,2789,2790,2427,1,1), +(2429,3,'K.6.1','Project and People Management','K.6.1',2792,2807,1118,1,1), +(2430,3,NULL,'Life cycle',NULL,2793,2794,2429,1,1), +(2431,3,NULL,'Management techniques (e.g., PERT/CPM)',NULL,2795,2796,2429,1,1), +(2432,3,NULL,'Staffing',NULL,2797,2798,2429,1,1), +(2433,3,NULL,'Strategic information systems planning (NEW)',NULL,2799,2800,2429,1,1), +(2434,3,NULL,'Systems analysis and design',NULL,2801,2802,2429,1,1), +(2435,3,NULL,'Systems development',NULL,2803,2804,2429,1,1), +(2436,3,NULL,'Training',NULL,2805,2806,2429,1,1), +(2437,3,'K.6.2','Installation Management','K.6.2',2808,2819,1118,1,1), +(2438,3,NULL,'Benchmarks',NULL,2809,2810,2437,1,1), +(2439,3,NULL,'Computer selection',NULL,2811,2812,2437,1,1), +(2440,3,NULL,'Computing equipment management',NULL,2813,2814,2437,1,1), +(2441,3,NULL,'Performance and usage measurement',NULL,2815,2816,2437,1,1), +(2442,3,NULL,'Pricing and resource allocation',NULL,2817,2818,2437,1,1), +(2443,3,'K.6.3','Software Management (D.2.9)','K.6.3',2820,2829,1118,1,1), +(2444,3,NULL,'Software development',NULL,2821,2822,2443,1,1), +(2445,3,NULL,'Software maintenance',NULL,2823,2824,2443,1,1), +(2446,3,NULL,'Software process (NEW)',NULL,2825,2826,2443,1,1), +(2447,3,NULL,'Software selection',NULL,2827,2828,2443,1,1), +(2448,3,'K.6.4','System Management','K.6.4',2830,2837,1118,1,1), +(2449,3,NULL,'Centralization/decentralization',NULL,2831,2832,2448,1,1), +(2450,3,NULL,'Management audit',NULL,2833,2834,2448,1,1), +(2451,3,NULL,'Quality assurance',NULL,2835,2836,2448,1,1), +(2452,3,'K.6.5','Security and Protection (D.4.6, K.4.2)','K.6.5',2838,2849,1118,1,1), +(2453,3,NULL,'Authentication',NULL,2839,2840,2452,1,1), +(2454,3,NULL,'Insurance**',NULL,2841,2842,2452,1,1), +(2455,3,NULL,'Invasive software (e.g., viruses, worms, Trojan horses)',NULL,2843,2844,2452,1,1), +(2456,3,NULL,'Physical security**',NULL,2845,2846,2452,1,1), +(2457,3,NULL,'Unauthorized access (e.g., hacking, phreaking) (NEW)',NULL,2847,2848,2452,1,1), +(2458,3,'K.6.m','Miscellaneous','K.6.m',2850,2855,1118,1,1), +(2459,3,NULL,'Insurance*',NULL,2851,2852,2458,1,1), +(2460,3,NULL,'Security*',NULL,2853,2854,2458,1,1), +(2461,3,'K.7.0','General','K.7.0',2858,2859,1119,1,1), +(2462,3,'K.7.1','Occupations','K.7.1',2860,2861,1119,1,1), +(2463,3,'K.7.2','Organizations','K.7.2',2862,2863,1119,1,1), +(2464,3,'K.7.3','Testing, Certification, and Licensing','K.7.3',2864,2865,1119,1,1), +(2465,3,'K.7.4','Professional Ethics (K.4) (NEW)','K.7.4',2866,2873,1119,1,1), +(2466,3,NULL,'Codes of ethics (NEW)',NULL,2867,2868,2465,1,1), +(2467,3,NULL,'Codes of good practice (NEW)',NULL,2869,2870,2465,1,1), +(2468,3,NULL,'Ethical dilemmas (NEW)',NULL,2871,2872,2465,1,1), +(2469,3,'K.7.m','Miscellaneous','K.7.m',2874,2879,1119,1,1), +(2470,3,NULL,'Codes of good practice**',NULL,2875,2876,2469,1,1), +(2471,3,NULL,'Ethics**',NULL,2877,2878,2469,1,1), +(2472,3,NULL,'Games*',NULL,2882,2883,1120,1,1), +(2473,3,'K.8.0','General','K.8.0',2884,2887,1120,1,1), +(2474,3,NULL,'Games',NULL,2885,2886,2473,1,1), +(2475,3,'K.8.1','Application Packages','K.8.1',2888,2901,1120,1,1), +(2476,3,NULL,'Data communications',NULL,2889,2890,2475,1,1), +(2477,3,NULL,'Database processing',NULL,2891,2892,2475,1,1), +(2478,3,NULL,'Freeware/shareware (NEW)',NULL,2893,2894,2475,1,1), +(2479,3,NULL,'Graphics',NULL,2895,2896,2475,1,1), +(2480,3,NULL,'Spreadsheets',NULL,2897,2898,2475,1,1), +(2481,3,NULL,'Word processing',NULL,2899,2900,2475,1,1), +(2482,3,'K.8.2','Hardware','K.8.2',2902,2903,1120,1,1), +(2483,3,'K.8.3','Management/Maintenance','K.8.3',2904,2905,1120,1,1), +(2484,3,'K.8.m','Miscellaneous (NEW)','K.8.m',2906,2907,1120,1,1); \ No newline at end of file diff --git a/database/factories/create_collections_data_ddc.sql b/database/factories/create_collections_data_ddc.sql new file mode 100644 index 0000000..38e789c --- /dev/null +++ b/database/factories/create_collections_data_ddc.sql @@ -0,0 +1,1044 @@ +-- Dewey classification +/* The ten main classes are: see number at db below +0 Computer science, information & general works +1 Philosophy & psychology +2 Religion +3 Social sciences +4 Language +5 Science +6 Technology +7 Arts & recreation +8 Literature +9 History & geography +*/ + +INSERT INTO collections (id, role_id, number, name, oai_subset, left_id, right_id, parent_id, visible, visible_publish) VALUES +(3,2,'0','Informatik, Informationswissenschaft, allgemeine Werke','0',2,189,NULL,1,1), +(4,2,'1','Philosophie und Psychologie','1',190,389,NULL,1,1), +(5,2,'2','Religion','2',390,589,NULL,1,1), +(6,2,'3','Sozialwissenschaften','3',590,791,NULL,1,1), +(7,2,'4','Sprache','4',792,983,NULL,1,1), +(8,2,'5','Naturwissenschaften und Mathematik','5',984,1191,NULL,1,1), +(9,2,'6','Technik, Medizin, angewandte Wissenschaften','6',1192,1399,NULL,1,1), +(10,2,'7','Künste und Unterhaltung','7',1400,1613,NULL,1,1), +(11,2,'8','Literatur','8',1614,1833,NULL,1,1), +(12,2,'9','Geschichte und Geografie','9',1834,2053,NULL,1,1), +(13,2,'00','Informatik, Wissen, Systeme','00',3,18,3,1,1), +(14,2,'01','Bibliografien','01',19,38,3,1,1), +(15,2,'02','Bibliotheks- und Informationswissenschaften','02',39,56,3,1,1), +(16,2,'03','Enzyklopädien, Faktenbücher','03',57,78,3,1,1), +(17,2,'05','Zeitschriften, fortlaufende Sammelwerke','05',79,100,3,1,1), +(18,2,'06','Verbände, Organisationen, Museen','06',101,122,3,1,1), +(19,2,'07','Publizistische Medien, Journalismus, Verlagswesen','07',123,144,3,1,1), +(20,2,'08','Allgemeine Sammelwerke, Zitatensammlungen','08',145,166,3,1,1), +(21,2,'09','Handschriften, seltene Bücher','09',167,188,3,1,1), +(22,2,'10','Philosophie','10',191,210,4,1,1), +(23,2,'11','Metaphysik','11',211,230,4,0,1), +(24,2,'12','Epistemologie','12',231,250,4,0,1), +(25,2,'13','Parapsychologie, Okkultismus','13',251,266,4,1,1), +(26,2,'14','Philosophische Schulen','14',267,288,4,0,1), +(27,2,'15','Psychologie','15',289,304,4,1,1), +(28,2,'16','Logik','16',305,322,4,0,1), +(29,2,'17','Ethik','17',323,344,4,0,1), +(30,2,'18','Antike, mittelalterliche und östliche Philosophie','18',345,366,4,0,1), +(31,2,'19','Neuzeitliche westliche Philosophie','19',367,388,4,0,1), +(32,2,'20','Religion','20',391,412,5,1,1), +(33,2,'21','Religionsphilosophie, Religionstheorie','21',413,428,5,0,1), +(34,2,'22','Bibel','22',429,450,5,1,1), +(35,2,'23','Christentum, Christliche Theologie','23',451,470,5,1,1), +(36,2,'24','Christliche Erfahrung, christliches Leben','24',471,488,5,0,1), +(37,2,'25','Christliche Pastoraltheologie, Ordensgemeinschaften','25',489,504,5,0,1), +(38,2,'26','Kirchenorganisation, Sozialarbeit, Religionsausübung','26',505,526,5,0,1), +(39,2,'27','Geschichte des Christentums','27',527,548,5,0,1), +(40,2,'28','Christliche Konfessionen','28',549,568,5,0,1), +(41,2,'29','Andere Religionen','29',569,588,5,1,1), +(42,2,'30','Sozialwissenschaften, Soziologie','30',591,608,6,1,1), +(43,2,'31','Statistiken','31',609,624,6,1,1), +(44,2,'32','Politikwissenschaft','32',625,644,6,1,1), +(45,2,'33','Wirtschaft','33',645,666,6,1,1), +(46,2,'34','Recht','34',667,688,6,1,1), +(47,2,'35','Öffentliche Verwaltung, Militärwissenschaft','35',689,710,6,1,1), +(48,2,'36','Soziale Probleme, Sozialdienste','36',711,732,6,1,1), +(49,2,'37','Bildung und Erziehung','37',733,750,6,1,1), +(50,2,'38','Handel, Kommunikation, Verkehr','38',751,772,6,1,1), +(51,2,'39','Bräuche, Etikette, Folklore','39',773,790,6,1,1), +(52,2,'40','Sprache','40',793,814,7,1,1), +(53,2,'41','Linguistik','41',815,834,7,0,1), +(54,2,'42','Englisch, Altenglisch','42',835,852,7,1,1), +(55,2,'43','Deutsch, germanische Sprachen allgemein','43',853,870,7,1,1), +(56,2,'44','Französisch, romanische Sprachen allgemein','44',871,888,7,1,1), +(57,2,'45','Italienisch, Rumänisch, Rätoromanisch','45',889,906,7,1,1), +(58,2,'46','Spanisch, Portugiesisch','46',907,924,7,1,1), +(59,2,'47','Latein, italische Sprachen','47',925,942,7,1,1), +(60,2,'48','Griechisch','48',943,960,7,1,1), +(61,2,'49','Andere Sprachen','49',961,982,7,1,1), +(62,2,'50','Naturwissenschaften','50',985,1004,8,1,1), +(63,2,'51','Mathematik','51',1005,1024,8,1,1), +(64,2,'52','Astronomie','52',1025,1044,8,1,1), +(65,2,'53','Physik','53',1045,1066,8,1,1), +(66,2,'54','Chemie','54',1067,1084,8,1,1), +(67,2,'55','Geowissenschaften, Geologie','55',1085,1106,8,1,1), +(68,2,'56','Fossilien, Paläontologie','56',1107,1128,8,1,1), +(69,2,'57','Biowissenschaften, Biologie','57',1129,1148,8,1,1), +(70,2,'58','Pflanzen (Botanik)','58',1149,1168,8,1,1), +(71,2,'59','Tiere (Zoologie)','59',1169,1190,8,1,1), +(72,2,'60','Technik','60',1193,1214,9,1,1), +(73,2,'61','Medizin und Gesundheit','61',1215,1234,9,1,1), +(74,2,'62','Ingenieurwissenschaften','62',1235,1254,9,1,1), +(75,2,'63','Landwirtschaft','63',1255,1276,9,1,1), +(76,2,'64','Hauswirtschaft und Familie','64',1277,1298,9,1,1), +(77,2,'65','Management, Öffentlichkeitsarbeit','65',1299,1314,9,1,1), +(78,2,'66','Chemische Verfahrenstechnik','66',1315,1336,9,1,1), +(79,2,'67','Industrielle Fertigung','67',1337,1358,9,1,1), +(80,2,'68','Industrielle Fertigung für einzelne Verwendungszwecke','68',1359,1378,9,0,1), +(81,2,'69','Hausbau, Bauhandwerk','69',1379,1398,9,1,1), +(82,2,'70','Künste','70',1401,1422,10,1,1), +(83,2,'71','Landschaftsgestaltung, Raumplanung','71',1423,1444,10,1,1), +(84,2,'72','Architektur','72',1445,1466,10,1,1), +(85,2,'73','Bildhauerkunst, Keramik, Metallkunst','73',1467,1488,10,1,1), +(86,2,'74','Zeichnung, angewandte Kunst','74',1489,1510,10,1,1), +(87,2,'75','Malerei','75',1511,1530,10,1,1), +(88,2,'76','Grafik','76',1531,1548,10,1,1), +(89,2,'77','Fotografie, Computerkunst','77',1549,1568,10,1,1), +(90,2,'78','Musik','78',1569,1590,10,1,1), +(91,2,'79','Sport, Spiele, Unterhaltung','79',1591,1612,10,1,1), +(92,2,'80','Literatur, Rhetorik, Literaturwissenschaft','80',1615,1634,11,1,1), +(93,2,'81','Amerikanische Literatur in Englisch','81',1635,1656,11,1,1), +(94,2,'82','Englische, altenglische Literaturen','82',1657,1678,11,1,1), +(95,2,'83','Deutsche und verwandte Literaturen','83',1679,1700,11,1,1), +(96,2,'84','Französische und verwandte Literaturen','84',1701,1722,11,1,1), +(97,2,'85','Italienische, rumänische, rätoromanische Literaturen','85',1723,1744,11,1,1), +(98,2,'86','Spanische, portugiesische Literaturen','86',1745,1766,11,1,1), +(99,2,'87','Lateinische, italische Literaturen','87',1767,1788,11,1,1), +(100,2,'88','Griechische Literaturen','88',1789,1810,11,1,1), +(101,2,'89','Andere Literaturen','89',1811,1832,11,1,1), +(102,2,'90','Geschichte','90',1835,1856,12,1,1), +(103,2,'91','Geografie, Reisen','91',1857,1880,12,1,1), +(104,2,'92','Biografie, Genealogie','92',1881,1902,12,1,1), +(105,2,'93','Geschichte des Altertums (bis ca. 499), Archäologie','93',1903,1924,12,1,1), +(106,2,'94','Geschichte Europas','94',1925,1946,12,1,1), +(107,2,'95','Geschichte Asiens','95',1947,1968,12,1,1), +(108,2,'96','Geschichte Afrikas','96',1969,1990,12,1,1), +(109,2,'97','Geschichte Nordamerikas','97',1991,2012,12,1,1), +(110,2,'98','Geschichte Südamerikas','98',2013,2034,12,1,1), +(111,2,'99','Geschichte anderer Gebiete','99',2035,2052,12,1,1), +(112,2,'000','Informatik, Informationswissenschaft, allgemeine Werke','000',4,5,13,1,1), +(113,2,'001','Wissen','001',6,7,13,0,1), +(114,2,'002','Das Buch','002',8,9,13,0,1), +(115,2,'003','Systeme','003',10,11,13,0,1), +(116,2,'004','Datenverarbeitung, Informatik','004',12,13,13,1,1), +(117,2,'005','Computerprogrammierung, Programme, Daten','005',14,15,13,0,1), +(118,2,'006','Spezielle Computerverfahren','006',16,17,13,0,1), +(119,2,'010','Bibliografie','010',20,21,14,0,1), +(120,2,'011','Bibliografien','011',22,23,14,0,1), +(121,2,'012','Bibliografien von Einzelpersonen','012',24,25,14,0,1), +(122,2,'014','Bibliografien anonymer und pseudonymer Werke','014',26,27,14,0,1), +(123,2,'015','Bibliografien von Werken aus einzelnen Orten','015',28,29,14,0,1), +(124,2,'016','Bibliografien von Werken über einzelne Themen','016',30,31,14,0,1), +(125,2,'017','Allgemeine Sachkataloge','017',32,33,14,0,1), +(126,2,'018','Kataloge nach Autor, Erscheinungsjahr usw.','018',34,35,14,0,1), +(127,2,'019','Kreuzkataloge','019',36,37,14,0,1), +(128,2,'020','Bibliotheks- und Informationswissenschaften','020',40,41,15,0,1), +(129,2,'021','Beziehungen zwischen Bibliotheken','021',42,43,15,0,1), +(130,2,'022','Verwaltung von Bibliotheksgebäuden','022',44,45,15,0,1), +(131,2,'023','Personalmanagement','023',46,47,15,0,1), +(132,2,'025','Bibliothekarische Tätigkeiten','025',48,49,15,0,1), +(133,2,'026','Spezialbibliotheken','026',50,51,15,0,1), +(134,2,'027','Allgemeinbibliotheken','027',52,53,15,0,1), +(135,2,'028','Lesen und Nutzung anderer Informationsmedien','028',54,55,15,0,1), +(136,2,'030','Allgemeinenzyklopädien','030',58,59,16,0,1), +(137,2,'031','Enzyklopädien in amerikanischem Englisch','031',60,61,16,0,1), +(138,2,'032','Enzyklopädien in Englisch','032',62,63,16,0,1), +(139,2,'033','Enzyklopädien in Deutsch und Niederländisch','033',64,65,16,0,1), +(140,2,'034','Enzyklopädien in Französisch, Okzitanisch und Katalanisch','034',66,67,16,0,1), +(141,2,'035','Enzyklopädien in Italienisch, Rumänisch und Rätoromanisch','035',68,69,16,0,1), +(142,2,'036','Enzyklopädien in Spanisch und Portugiesisch','036',70,71,16,0,1), +(143,2,'037','Enzyklopädien in slawischen Sprachen','037',72,73,16,0,1), +(144,2,'038','Enzyklopädien in skandinavischen Sprachen','038',74,75,16,0,1), +(145,2,'039','Enzyklopädien in anderen Sprachen','039',76,77,16,0,1), +(146,2,'050','Zeitschriften, allgemeine fortlaufende Sammelwerke','050',80,81,17,0,1), +(147,2,'051','Fortlaufende Sammelwerke in amerikanischem Englisch','051',82,83,17,0,1), +(148,2,'052','Fortlaufende Sammelwerke in Englisch','052',84,85,17,0,1), +(149,2,'053','Fortlaufende Sammelwerke in Deutsch und Niederländisch','053',86,87,17,0,1), +(150,2,'054','Fortlaufende Sammelwerke in Französisch, Okzitanisch und Katalanisch','054',88,89,17,0,1), +(151,2,'055','Fortlaufende Sammelwerke in Italienisch, Rumänisch und Rätoromanisch','055',90,91,17,0,1), +(152,2,'056','Fortlaufende Sammelwerke in Spanisch und Portugiesisch','056',92,93,17,0,1), +(153,2,'057','Fortlaufende Sammelwerke in slawischen Sprachen','057',94,95,17,0,1), +(154,2,'058','Fortlaufende Sammelwerke in skandinavischen Sprachen','058',96,97,17,0,1), +(155,2,'059','Fortlaufende Sammelwerke in anderen Sprachen','059',98,99,17,0,1), +(156,2,'060','Allgemeine Organisationen, Museumswissenschaft','060',102,103,18,0,1), +(157,2,'061','Allgemeine Organisationen in Nordamerika','061',104,105,18,0,1), +(158,2,'062','Allgemeine Organisationen auf den Britischen Inseln, in England','062',106,107,18,0,1), +(159,2,'063','Allgemeine Organisationen in Mitteleuropa, in Deutschland','063',108,109,18,0,1), +(160,2,'064','Allgemeine Organisationen in Frankreich und Monaco','064',110,111,18,0,1), +(161,2,'065','Allgemeine Organisationen in Italien und auf benachbarten Inseln','065',112,113,18,0,1), +(162,2,'066','Allgemeine Organisationen auf der Iberischen Halbinsel und benachbarten Inseln','066',114,115,18,0,1), +(163,2,'067','Allgemeine Organisationen in Osteuropa, in Russland','067',116,117,18,0,1), +(164,2,'068','Allgemeine Organisationen in anderen geografischen Gebieten','068',118,119,18,0,1), +(165,2,'069','Museumswissenschaft','069',120,121,18,0,1), +(166,2,'070','Publizistische Medien, Journalismus, Verlagswesen','070',124,125,19,0,1), +(167,2,'071','Journalismus und Zeitungen in Nordamerika','071',126,127,19,0,1), +(168,2,'072','Journalismus und Zeitungen auf den Britischen Inseln, in England','072',128,129,19,0,1), +(169,2,'073','Journalismus und Zeitungen in Mitteleuropa, in Deutschland','073',130,131,19,0,1), +(170,2,'074','Journalismus und Zeitungen in Frankreich und Monaco','074',132,133,19,0,1), +(171,2,'075','Journalismus und Zeitungen in Italien und auf benachbarten Inseln','075',134,135,19,0,1), +(172,2,'076','Journalismus und Zeitungen auf der Iberischen Halbinsel und benachbarten Inseln','076',136,137,19,0,1), +(173,2,'077','Journalismus und Zeitungen in Osteuropa, in Russland','077',138,139,19,0,1), +(174,2,'078','Journalismus und Zeitungen in Skandinavien','078',140,141,19,0,1), +(175,2,'079','Journalismus und Zeitungen in anderen geografischen Gebieten','079',142,143,19,0,1), +(176,2,'080','Allgemeine Sammelwerke, Zitatensammlungen','080',146,147,20,0,1), +(177,2,'081','Sammelwerke in amerikanischem Englisch','081',148,149,20,0,1), +(178,2,'082','Sammelwerke in Englisch','082',150,151,20,0,1), +(179,2,'083','Sammelwerke in Deutsch und Niederländisch','083',152,153,20,0,1), +(180,2,'084','Sammelwerke in Französisch, Okzitanisch und Katalanisch','084',154,155,20,0,1), +(181,2,'085','Sammelwerke in Italienisch, Rumänisch und Rätoromanisch','085',156,157,20,0,1), +(182,2,'086','Sammelwerke in Spanisch und Portugiesisch','086',158,159,20,0,1), +(183,2,'087','Sammelwerke in slawischen Sprachen','087',160,161,20,0,1), +(184,2,'088','Sammelwerke in skandinavischen Sprachen','088',162,163,20,0,1), +(185,2,'089','Sammelwerke in anderen Sprachen','089',164,165,20,0,1), +(186,2,'090','Handschriften, seltene Bücher','090',168,169,21,0,1), +(187,2,'091','Handschriften','091',170,171,21,0,1), +(188,2,'092','Blockbücher','092',172,173,21,0,1), +(189,2,'093','Inkunabeln','093',174,175,21,0,1), +(190,2,'094','Gedruckte Bücher','094',176,177,21,0,1), +(191,2,'095','Bücher mit besonderem Einband','095',178,179,21,0,1), +(192,2,'096','Bücher mit besonderen Illustrationen','096',180,181,21,0,1), +(193,2,'097','Bücher aus besonderem Besitz oder besonderer Herkunft','097',182,183,21,0,1), +(194,2,'098','Verbotene Werke, Fälschungen, Scherzdrucke','098',184,185,21,0,1), +(195,2,'099','Bücher mit besonderem Format','099',186,187,21,0,1), +(196,2,'100','Philosophie und Psychologie','100',192,193,22,0,1), +(197,2,'101','Theorie der Philosophie','101',194,195,22,0,1), +(198,2,'102','Verschiedenes','102',196,197,22,0,1), +(199,2,'103','Wörterbücher, Enzyklopädien','103',198,199,22,0,1), +(200,2,'105','Fortlaufende Sammelwerke','105',200,201,22,0,1), +(201,2,'106','Organisationen, Management','106',202,203,22,0,1), +(202,2,'107','Ausbildung, Forschung, verwandte Themen','107',204,205,22,0,1), +(203,2,'108','Behandlung nach Personengruppen','108',206,207,22,0,1), +(204,2,'109','Histor. Behandlung, Behandlung mehrerer Einzelpersonen','109',208,209,22,0,1), +(205,2,'110','Metaphysik','110',212,213,23,1,1), +(206,2,'111','Ontologie','111',214,215,23,1,1), +(207,2,'113','Kosmologie','113',216,217,23,1,1), +(208,2,'114','Raum','114',218,219,23,1,1), +(209,2,'115','Zeit','115',220,221,23,1,1), +(210,2,'116','Veränderung','116',222,223,23,1,1), +(211,2,'117','Struktur','117',224,225,23,1,1), +(212,2,'118','Kraft und Energie','118',226,227,23,1,1), +(213,2,'119','Zahl und Quantität','119',228,229,23,1,1), +(214,2,'120','Epistemologie, Kausalität, Menschheit','120',232,233,24,1,1), +(215,2,'121','Epistemologie','121',234,235,24,1,1), +(216,2,'122','Kausalität','122',236,237,24,1,1), +(217,2,'123','Determinismus, Indeterminismus','123',238,239,24,1,1), +(218,2,'124','Teleologie','124',240,241,24,1,1), +(219,2,'126','Das Selbst','126',242,243,24,1,1), +(220,2,'127','Das Unbewusste, das Unterbewusste','127',244,245,24,1,1), +(221,2,'128','Menschheit','128',246,247,24,1,1), +(222,2,'129','Ursprung und Schicksal individueller Seelen','129',248,249,24,1,1), +(223,2,'130','Parapsychologie und Okkultismus','130',252,253,25,0,1), +(224,2,'131','Parapsychologische und okkulte Techniken','131',254,255,25,0,1), +(225,2,'133','Einzelne Themen der Parapsychologie und des Okkultismus','133',256,257,25,0,1), +(226,2,'135','Träume, Mysterien','135',258,259,25,0,1), +(227,2,'137','Divinatorische Graphologie','137',260,261,25,0,1), +(228,2,'138','Physiognomie','138',262,263,25,0,1), +(229,2,'139','Phrenologie','139',264,265,25,0,1), +(230,2,'140','Einzelne philosophische Schulen','140',268,269,26,1,1), +(231,2,'141','Idealismus und verwandte Systeme','141',270,271,26,1,1), +(232,2,'142','Kritizismus','142',272,273,26,1,1), +(233,2,'143','Bergsonismus, Intuitionismus','143',274,275,26,1,1), +(234,2,'144','Humanismus und verwandte Systeme','144',276,277,26,1,1), +(235,2,'145','Sensualismus','145',278,279,26,1,1), +(236,2,'146','Naturalismus und verwandte Systeme','146',280,281,26,1,1), +(237,2,'147','Pantheismus und verwandte Systeme','147',282,283,26,1,1), +(238,2,'148','Eklektizismus, Liberalismus, Traditionalismus','148',284,285,26,1,1), +(239,2,'149','Andere philosophische Systeme','149',286,287,26,1,1), +(240,2,'150','Psychologie','150',290,291,27,0,1), +(241,2,'152','Sinneswahrnehmung, Bewegung, Emotionen, Triebe','152',292,293,27,0,1), +(242,2,'153','Kognitive Prozesse, Intelligenz','153',294,295,27,0,1), +(243,2,'154','Unterbewusste und bewusstseinsveränderte Zustände','154',296,297,27,0,1), +(244,2,'155','Differentielle Psychologie, Entwicklungspsychologie','155',298,299,27,0,1), +(245,2,'156','Vergleichende Psychologie','156',300,301,27,0,1), +(246,2,'158','Angewandte Psychologie','158',302,303,27,0,1), +(247,2,'160','Logik','160',306,307,28,1,1), +(248,2,'161','Induktion','161',308,309,28,1,1), +(249,2,'162','Deduktion','162',310,311,28,1,1), +(250,2,'165','Fehlschlüsse, Fehlerquellen','165',312,313,28,1,1), +(251,2,'166','Syllogismen','166',314,315,28,1,1), +(252,2,'167','Hypothesen','167',316,317,28,1,1), +(253,2,'168','Argument, Überzeugungung','168',318,319,28,1,1), +(254,2,'169','Analogie','169',320,321,28,1,1), +(255,2,'170','Ethik','170',324,325,29,1,1), +(256,2,'171','Ethische Systeme','171',326,327,29,1,1), +(257,2,'172','Politische Ethik','172',328,329,29,1,1), +(258,2,'173','Familienethik','173',330,331,29,1,1), +(259,2,'174','Berufsethik','174',332,333,29,1,1), +(260,2,'175','Ethik von Freizeit und Erholung','175',334,335,29,1,1), +(261,2,'176','Sexual- und Reproduktionsethik','176',336,337,29,1,1), +(262,2,'177','Ethik sozialer Beziehungen','177',338,339,29,1,1), +(263,2,'178','Konsumethik','178',340,341,29,1,1), +(264,2,'179','Andere ethische Normen','179',342,343,29,1,1), +(265,2,'180','Antike, mittelalterliche und östliche Philosophie','180',346,347,30,1,1), +(266,2,'181','Östliche Philosophie','181',348,349,30,1,1), +(267,2,'182','Vorsokratische griechische Philosophien','182',350,351,30,1,1), +(268,2,'183','Sokratische und verwandte Philosophien','183',352,353,30,1,1), +(269,2,'184','Platonische Philosophie','184',354,355,30,1,1), +(270,2,'185','Aristotelische Philosophie','185',356,357,30,1,1), +(271,2,'186','Skeptische und neuplatonische Philosophien','186',358,359,30,1,1), +(272,2,'187','Epikureische Philosophie','187',360,361,30,1,1), +(273,2,'188','Stoische Philosophie','188',362,363,30,1,1), +(274,2,'189','Mittelalterliche westliche Philosophie','189',364,365,30,1,1), +(275,2,'190','Neuzeitliche westliche Philosophie','190',368,369,31,1,1), +(276,2,'191','Philosophie in den USA und Kanada','191',370,371,31,1,1), +(277,2,'192','Philosophie auf den Britischen Inseln','192',372,373,31,1,1), +(278,2,'193','Philosophie in Deutschland und Österreich','193',374,375,31,1,1), +(279,2,'194','Philosophie in Frankreich','194',376,377,31,1,1), +(280,2,'195','Philosophie in Italien','195',378,379,31,1,1), +(281,2,'196','Philosophie in Spanien und Portugal','196',380,381,31,1,1), +(282,2,'197','Philosophie in Russland und der früheren Sowjetunion','197',382,383,31,1,1), +(283,2,'198','Philosophie in Skandinavien','198',384,385,31,1,1), +(284,2,'199','Philosophie in anderen geografischen Gebieten','199',386,387,31,1,1), +(285,2,'200','Religion','200',392,393,32,0,1), +(286,2,'201','Religiöse Mythologie, Soziallehre','201',394,395,32,0,1), +(287,2,'202','Lehren','202',396,397,32,0,1), +(288,2,'203','Gottesdienst und andere Formen der öffentlichen Religionsausübung','203',398,399,32,0,1), +(289,2,'204','Religiöse Erfahrung, religiöses Leben, religiöse Praxis','204',400,401,32,0,1), +(290,2,'205','Religiöse Ethik','205',402,403,32,0,1), +(291,2,'206','Religiöse Führer und Organisation','206',404,405,32,0,1), +(292,2,'207','Mission, religiöse Erziehung','207',406,407,32,0,1), +(293,2,'208','Quellen','208',408,409,32,0,1), +(294,2,'209','Sekten, Reformbewegungen','209',410,411,32,0,1), +(295,2,'210','Religionsphilosophie, Religionstheorie','210',414,415,33,1,1), +(296,2,'211','Gottesvorstellungen','211',416,417,33,1,1), +(297,2,'212','Gottesfrage, Gotteserkenntnis, Eigenschaften Gottes','212',418,419,33,1,1), +(298,2,'213','Schöpfung','213',420,421,33,1,1), +(299,2,'214','Theodizee','214',422,423,33,1,1), +(300,2,'215','Naturwissenschaft und Religion','215',424,425,33,1,1), +(301,2,'218','Der Mensch','218',426,427,33,1,1), +(302,2,'220','Bibel','220',430,431,34,0,1), +(303,2,'221','Altes Testament (Tenach)','221',432,433,34,0,1), +(304,2,'222','Geschichtsbücher des Alten Testaments','222',434,435,34,0,1), +(305,2,'223','Poetische Bücher des Alten Testaments','223',436,437,34,0,1), +(306,2,'224','Prophetische Bücher des Alten Testaments','224',438,439,34,0,1), +(307,2,'225','Neues Testament','225',440,441,34,0,1), +(308,2,'226','Evangelien, Apostelgeschichte','226',442,443,34,0,1), +(309,2,'227','Briefe','227',444,445,34,0,1), +(310,2,'228','Johannes-Apokalypse (Offenbarung des Johannes)','228',446,447,34,0,1), +(311,2,'229','Apokryphen, Pseudepigraphen','229',448,449,34,0,1), +(312,2,'230','Christentum, Christliche Theologie','230',452,453,35,0,1), +(313,2,'231','Gott','231',454,455,35,0,1), +(314,2,'232','Jesus Christus und seine Familie','232',456,457,35,0,1), +(315,2,'233','Der Mensch','233',458,459,35,0,1), +(316,2,'234','Erlösung, Gnade','234',460,461,35,0,1), +(317,2,'235','Geistliche Wesen','235',462,463,35,0,1), +(318,2,'236','Eschatologie','236',464,465,35,0,1), +(319,2,'238','Glaubensbekenntnisse, Katechismen','238',466,467,35,0,1), +(320,2,'239','Apologetik, Polemik','239',468,469,35,0,1), +(321,2,'240','Christliche Ethik, spirituelle Theologie','240',472,473,36,1,1), +(322,2,'241','Christliche Ethik','241',474,475,36,1,1), +(323,2,'242','Erbauungsliteratur','242',476,477,36,1,1), +(324,2,'243','Evangelistisches Schrifttum für Einzelpersonen','243',478,479,36,1,1), +(325,2,'246','Kunst im Christentum','246',480,481,36,1,1), +(326,2,'247','Kirchenausstattung, liturgisches Gerät','247',482,483,36,1,1), +(327,2,'248','Christliche Erfahrung, christliche Praxis, christliches Leben','248',484,485,36,1,1), +(328,2,'249','Christliches Leben in der Familie','249',486,487,36,1,1), +(329,2,'250','Christliche Orden und Ortskirchen','250',490,491,37,1,1), +(330,2,'251','Homiletik','251',492,493,37,1,1), +(331,2,'252','Predigttexte','252',494,495,37,1,1), +(332,2,'253','Pastoraltheologie','253',496,497,37,1,1), +(333,2,'254','Gemeindeverwaltung','254',498,499,37,1,1), +(334,2,'255','Religiöse Kongregationen und Orden','255',500,501,37,1,1), +(335,2,'259','Familienseelsorge, Kategorialseelsorge','259',502,503,37,1,1), +(336,2,'260','Soziallehre, Ekklesiologie','260',506,507,38,1,1), +(337,2,'261','Soziallehre','261',508,509,38,1,1), +(338,2,'262','Ekklesiologie','262',510,511,38,1,1), +(339,2,'263','Heilige Tage, Zeiten und Orte','263',512,513,38,1,1), +(340,2,'264','Öffentliche Religionsausübung','264',514,515,38,1,1), +(341,2,'265','Sakramente, andere Riten und Handlungen','265',516,517,38,1,1), +(342,2,'266','Mission','266',518,519,38,1,1), +(343,2,'267','Religiöse Verbände','267',520,521,38,1,1), +(344,2,'268','Religiöse Erziehung','268',522,523,38,1,1), +(345,2,'269','Geistliche Erneuerung','269',524,525,38,1,1), +(346,2,'270','Geschichte des Christentums, Kirchengeschichte','270',528,529,39,1,1), +(347,2,'271','Religiöse Orden in der Kirchengeschichte','271',530,531,39,1,1), +(348,2,'272','Verfolgung in der Kirchengeschichte','272',532,533,39,1,1), +(349,2,'273','Dogmatische Kontroversen, Häresie','273',534,535,39,1,1), +(350,2,'274','Geschichte des Christentums in Europa','274',536,537,39,1,1), +(351,2,'275','Geschichte des Christentums in Asien','275',538,539,39,1,1), +(352,2,'276','Geschichte des Christentums in Afrika','276',540,541,39,1,1), +(353,2,'277','Geschichte des Christentums in Nordamerika','277',542,543,39,1,1), +(354,2,'278','Geschichte des Christentums in Südamerika','278',544,545,39,1,1), +(355,2,'279','Geschichte des Christentums in anderen Gebieten','279',546,547,39,1,1), +(356,2,'280','Christliche Konfessionen und Sekten','280',550,551,40,1,1), +(357,2,'281','Alte Kirche, Ostkirchen','281',552,553,40,1,1), +(358,2,'282','Römisch-Katholische Kirche','282',554,555,40,1,1), +(359,2,'283','Anglikanische Kirchen','283',556,557,40,1,1), +(360,2,'284','Protestanten kontinentaleuropäischen Ursprungs','284',558,559,40,1,1), +(361,2,'285','Presbyterianer, Reformierte, Kongregationalisten','285',560,561,40,1,1), +(362,2,'286','Baptisten, Disciples of Christ, Adventisten','286',562,563,40,1,1), +(363,2,'287','Methodisten und verwandte Kirchen','287',564,565,40,1,1), +(364,2,'289','Andere Konfessionen und Sekten','289',566,567,40,1,1), +(365,2,'290','Andere Religionen','290',570,571,41,0,1), +(366,2,'292','Griechische und römische Religion','292',572,573,41,0,1), +(367,2,'293','Germanische Religion','293',574,575,41,0,1), +(368,2,'294','Religionen indischen Ursprungs','294',576,577,41,0,1), +(369,2,'295','Parsismus','295',578,579,41,0,1), +(370,2,'296','Judentum','296',580,581,41,0,1), +(371,2,'297','Islam, Babismus, Bahaismus','297',582,583,41,0,1), +(372,2,'298','(Optionale Notation)','298',584,585,41,0,1), +(373,2,'299','An anderer Stelle nicht vorgesehene Religionen','299',586,587,41,0,1), +(374,2,'300','Sozialwissenschaften','300',592,593,42,0,1), +(375,2,'301','Soziologie, Anthropologie','301',594,595,42,0,1), +(376,2,'302','Soziale Interaktion','302',596,597,42,0,1), +(377,2,'303','Gesellschaftliche Prozesse','303',598,599,42,0,1), +(378,2,'304','Das Sozialverhalten beeinflussende Faktoren','304',600,601,42,0,1), +(379,2,'305','Soziale Gruppen','305',602,603,42,0,1), +(380,2,'306','Kultur und Institutionen','306',604,605,42,0,1), +(381,2,'307','Gemeinschaften','307',606,607,42,0,1), +(382,2,'310','Sammlungen allgemeiner Statistiken','310',610,611,43,0,1), +(383,2,'314','Allgemeine Statistiken zu Europa','314',612,613,43,0,1), +(384,2,'315','Allgemeine Statistiken zu Asien','315',614,615,43,0,1), +(385,2,'316','Allgemeine Statistiken zu Afrika','316',616,617,43,0,1), +(386,2,'317','Allgemeine Statistiken zu Nordamerika','317',618,619,43,0,1), +(387,2,'318','Allgemeine Statistiken zu Südamerika','318',620,621,43,0,1), +(388,2,'319','Allgemeine Statistiken zu anderen Gebieten','319',622,623,43,0,1), +(389,2,'320','Politikwissenschaft','320',626,627,44,0,1), +(390,2,'321','Staatsformen und Regierungssysteme','321',628,629,44,0,1), +(391,2,'322','Beziehungen des Staats zu organisierten Gruppen','322',630,631,44,0,1), +(392,2,'323','Grundrechte und politische Rechte','323',632,633,44,0,1), +(393,2,'324','Der politische Prozess','324',634,635,44,0,1), +(394,2,'325','Internationale Migration, Kolonisation','325',636,637,44,0,1), +(395,2,'326','Sklaverei und Sklavenbefreiung','326',638,639,44,0,1), +(396,2,'327','Internationale Beziehungen','327',640,641,44,0,1), +(397,2,'328','Der Gesetzgebungsprozess','328',642,643,44,0,1), +(398,2,'330','Wirtschaft','330',646,647,45,0,1), +(399,2,'331','Arbeitsökonomie','331',648,649,45,0,1), +(400,2,'332','Finanzwirtschaft','332',650,651,45,0,1), +(401,2,'333','Boden- und Energiewirtschaft','333',652,653,45,0,1), +(402,2,'334','Genossenschaften','334',654,655,45,0,1), +(403,2,'335','Sozialismus und verwandte Systeme','335',656,657,45,0,1), +(404,2,'336','Öffentliche Finanzen','336',658,659,45,0,1), +(405,2,'337','Weltwirtschaft','337',660,661,45,0,1), +(406,2,'338','Produktion','338',662,663,45,0,1), +(407,2,'339','Makroökonomie und verwandte Themen','339',664,665,45,0,1), +(408,2,'340','Recht','340',668,669,46,0,1), +(409,2,'341','Völkerrecht','341',670,671,46,0,1), +(410,2,'342','Verfassungs- und Verwaltungsrecht','342',672,673,46,0,1), +(411,2,'343','Wehrrecht, Steuerrecht, Wirtschaftsrecht','343',674,675,46,0,1), +(412,2,'344','Arbeitsrecht, Sozialrecht, Bildungsrecht, Kulturrecht','344',676,677,46,0,1), +(413,2,'345','Strafrecht','345',678,679,46,0,1), +(414,2,'346','Privatrecht','346',680,681,46,0,1), +(415,2,'347','Zivilprozessrecht, Zivilgerichte','347',682,683,46,0,1), +(416,2,'348','Gesetze, Verordnungen, Rechtsfälle','348',684,685,46,0,1), +(417,2,'349','Recht einzelner Gebietskörperschaften und Gebiete','349',686,687,46,0,1), +(418,2,'350','Öffentliche Verwaltung, Militärwissenschaft','350',690,691,47,1,1), +(419,2,'351','Öffentliche Verwaltung','351',692,693,47,0,1), +(420,2,'352','Allgemeines zur öffentlichen Verwaltung','352',694,695,47,0,1), +(421,2,'353','Einzelne Bereiche der öffentlichen Verwaltung','353',696,697,47,0,1), +(422,2,'354','Verwaltung von Wirtschaft und Umwelt','354',698,699,47,0,1), +(423,2,'355','Militärwissenschaft','355',700,701,47,1,1), +(424,2,'356','Infanterie und Kampfführung','356',702,703,47,0,1), +(425,2,'357','Kavalleriestreitkräfte und Kampfführung','357',704,705,47,0,1), +(426,2,'358','Luftstreitkräfte und andere spezialisierte Streitkräfte','358',706,707,47,0,1), +(427,2,'359','Seestreitkräfte und Kampfführung','359',708,709,47,0,1), +(428,2,'360','Soziale Probleme und Sozialdienste, Verbände','360',712,713,48,0,1), +(429,2,'361','Soziale Probleme und Sozialhilfe im Allgemeinen','361',714,715,48,0,1), +(430,2,'362','Probleme und Dienste der Sozialhilfe','362',716,717,48,0,1), +(431,2,'363','Andere soziale Probleme und Sozialdienste','363',718,719,48,0,1), +(432,2,'364','Kriminologie','364',720,721,48,0,1), +(433,2,'365','Justizvollzugsanstalten und verwandte Einrichtungen','365',722,723,48,0,1), +(434,2,'366','Verbände','366',724,725,48,0,1), +(435,2,'367','Allgemeine Klubs','367',726,727,48,0,1), +(436,2,'368','Versicherungen','368',728,729,48,0,1), +(437,2,'369','Verschiedene Arten von Verbänden','369',730,731,48,0,1), +(438,2,'370','Bildung und Erziehung','370',734,735,49,0,1), +(439,2,'371','Schulen, schulische Tätigkeiten, Sonderpädagogik','371',736,737,49,0,1), +(440,2,'372','Primar- und Elementarbildung','372',738,739,49,0,1), +(441,2,'373','Sekundarbildung','373',740,741,49,0,1), +(442,2,'374','Erwachsenenbildung','374',742,743,49,0,1), +(443,2,'375','Curricula','375',744,745,49,0,1), +(444,2,'378','Hochschulbildung','378',746,747,49,0,1), +(445,2,'379','Bildungspolitik','379',748,749,49,0,1), +(446,2,'380','Handel, Kommunikation, Verkehr','380',752,753,50,0,1), +(447,2,'381','Handel','381',754,755,50,0,1), +(448,2,'382','Internationaler Handel','382',756,757,50,0,1), +(449,2,'383','Postverkehr','383',758,759,50,0,1), +(450,2,'384','Kommunikation, Telekommunikation','384',760,761,50,0,1), +(451,2,'385','Schienenverkehr','385',762,763,50,0,1), +(452,2,'386','Binnenschifffahrt, Fährverkehr','386',764,765,50,0,1), +(453,2,'387','Schifffahrt, Luft-, Weltraumverkehr','387',766,767,50,0,1), +(454,2,'388','Verkehr, Landverkehr','388',768,769,50,0,1), +(455,2,'389','Metrologie, Normung','389',770,771,50,0,1), +(456,2,'390','Bräuche, Etikette, Folklore','390',774,775,51,0,1), +(457,2,'391','Kleidung, äußeres Erscheinungsbild','391',776,777,51,0,1), +(458,2,'392','Bräuche im Lebenslauf und im häuslichen Leben','392',778,779,51,0,1), +(459,2,'393','Sterbe- und Bestattungsriten','393',780,781,51,0,1), +(460,2,'394','Allgemeine Bräuche','394',782,783,51,0,1), +(461,2,'395','Etikette (Manieren)','395',784,785,51,0,1), +(462,2,'398','Folklore','398',786,787,51,0,1), +(463,2,'399','Bräuche des Krieges und der Diplomatie','399',788,789,51,0,1), +(464,2,'400','Sprache','400',794,795,52,0,1), +(465,2,'401','Sprachphilosophie, Sprachtheorie','401',796,797,52,0,1), +(466,2,'402','Verschiedenes','402',798,799,52,0,1), +(467,2,'403','Wörterbücher, Enzyklopädien','403',800,801,52,0,1), +(468,2,'404','Spezielle Themen','404',802,803,52,0,1), +(469,2,'405','Fortlaufende Sammelwerke','405',804,805,52,0,1), +(470,2,'406','Organisationen, Management','406',806,807,52,0,1), +(471,2,'407','Ausbildung, Forschung, verwandte Themen','407',808,809,52,0,1), +(472,2,'408','Behandlung nach Personengruppen','408',810,811,52,0,1), +(473,2,'409','Geografische, personenbezogene Behandlung','409',812,813,52,0,1), +(474,2,'410','Linguistik','410',816,817,53,1,1), +(475,2,'411','Schriftsysteme','411',818,819,53,1,1), +(476,2,'412','Etymologie','412',820,821,53,1,1), +(477,2,'413','Wörterbücher','413',822,823,53,1,1), +(478,2,'414','Phonologie, Phonetik','414',824,825,53,1,1), +(479,2,'415','Grammatik','415',826,827,53,1,1), +(480,2,'417','Dialektologie, historische Linguistik','417',828,829,53,1,1), +(481,2,'418','Standardsprache, Angewandte Linguistik','418',830,831,53,1,1), +(482,2,'419','Gebärdensprachen','419',832,833,53,1,1), +(483,2,'420','Englisch, Altenglisch','420',836,837,54,0,1), +(484,2,'421','Schriftsystem und Phonologie des Englischen','421',838,839,54,0,1), +(485,2,'422','Etymologie des Englischen','422',840,841,54,0,1), +(486,2,'423','Englische Wörterbücher','423',842,843,54,0,1), +(487,2,'425','Englische Grammatik','425',844,845,54,0,1), +(488,2,'427','Varianten des Englischen, Mittelenglisch','427',846,847,54,0,1), +(489,2,'428','Gebrauch des Standard-Englisch','428',848,849,54,0,1), +(490,2,'429','Altenglisch (Angelsächsisch)','429',850,851,54,0,1), +(491,2,'430','Germanische Sprachen, Deutsch','430',854,855,55,1,1), +(492,2,'431','Schriftsysteme und Phonologie des Deutschen','431',856,857,55,0,1), +(493,2,'432','Etymologie des Deutschen','432',858,859,55,0,1), +(494,2,'433','Deutsche Wörterbücher','433',860,861,55,0,1), +(495,2,'435','Deutsche Grammatik','435',862,863,55,0,1), +(496,2,'437','Varianten des Deutschen','437',864,865,55,0,1), +(497,2,'438','Gebrauch des Standard-Deutsch','438',866,867,55,0,1), +(498,2,'439','Andere germanische Sprachen','439',868,869,55,1,1), +(499,2,'440','Romanische Sprachen, Französisch','440',872,873,56,0,1), +(500,2,'441','Schriftsysteme und Phonologie des Französischen','441',874,875,56,0,1), +(501,2,'442','Etymologie des Französischen','442',876,877,56,0,1), +(502,2,'443','Französische Wörterbücher','443',878,879,56,0,1), +(503,2,'445','Französische Grammatik','445',880,881,56,0,1), +(504,2,'447','Varianten des Französischen','447',882,883,56,0,1), +(505,2,'448','Gebrauch des Standard-Französisch','448',884,885,56,0,1), +(506,2,'449','Okzitanisch, Katalanisch','449',886,887,56,0,1), +(507,2,'450','Italienisch, Rumänisch, Rätoromanisch','450',890,891,57,0,1), +(508,2,'451','Schriftsysteme und Phonologie des Italienischen','451',892,893,57,0,1), +(509,2,'452','Etymologie des Italienischen','452',894,895,57,0,1), +(510,2,'453','Italienische Wörterbücher','453',896,897,57,0,1), +(511,2,'455','Italienische Grammatik','455',898,899,57,0,1), +(512,2,'457','Varianten des Italienischen','457',900,901,57,0,1), +(513,2,'458','Gebrauch des Standard-Italienisch','458',902,903,57,0,1), +(514,2,'459','Rumänisch, Rätoromanisch','459',904,905,57,0,1), +(515,2,'460','Spanisch, Portugiesisch','460',908,909,58,0,1), +(516,2,'461','Schriftsysteme und Phonologie des Spanischen','461',910,911,58,0,1), +(517,2,'462','Etymologie des Spanischen','462',912,913,58,0,1), +(518,2,'463','Spanische Wörterbücher','463',914,915,58,0,1), +(519,2,'465','Spanische Grammatik','465',916,917,58,0,1), +(520,2,'467','Varianten des Spanischen','467',918,919,58,0,1), +(521,2,'468','Gebrauch des Standard-Spanisch','468',920,921,58,0,1), +(522,2,'469','Portugiesisch','469',922,923,58,0,1), +(523,2,'470','Italische Sprachen, Latein','470',926,927,59,0,1), +(524,2,'471','Schriftsysteme und Phonologie des klassischen Latein','471',928,929,59,0,1), +(525,2,'472','Etymologie des klassischen Latein','472',930,931,59,0,1), +(526,2,'473','Wörterbücher des klassischen Latein','473',932,933,59,0,1), +(527,2,'475','Grammatik des klassischen Latein','475',934,935,59,0,1), +(528,2,'477','Altlatein, Mittellatein, Neulatein, Kirchenlatein, Vulgärlatein','477',936,937,59,0,1), +(529,2,'478','Gebrauch des klassischen Latein','478',938,939,59,0,1), +(530,2,'479','Andere italische Sprachen','479',940,941,59,0,1), +(531,2,'480','Hellenische Sprachen, klassisches Griechisch','480',944,945,60,0,1), +(532,2,'481','Schriftsysteme und Phonologie des klassischen Griechisch','481',946,947,60,0,1), +(533,2,'482','Etymologie des klassischen Griechisch','482',948,949,60,0,1), +(534,2,'483','Wörterbücher des klassischen Griechisch','483',950,951,60,0,1), +(535,2,'485','Grammatik des klassischen Griechisch','485',952,953,60,0,1), +(536,2,'487','Vorklassisches Griechisch, Mittelgriechisch','487',954,955,60,0,1), +(537,2,'488','Gebrauch des klassischen Griechisch','488',956,957,60,0,1), +(538,2,'489','Andere hellenische Sprachen, Neugriechisch','489',958,959,60,0,1), +(539,2,'490','Andere Sprachen','490',962,963,61,0,1), +(540,2,'491','Ostindoeuropäische und keltische Sprachen','491',964,965,61,0,1), +(541,2,'492','Afroasiatische Sprachen, semitische Sprachen','492',966,967,61,0,1), +(542,2,'493','Nichtsemitische afroasiatische Sprachen','493',968,969,61,0,1), +(543,2,'494','Altaische, uralische, paläosibirische, drawidische Sprachen','494',970,971,61,0,1), +(544,2,'495','Ost- und südostasiatische Sprachen','495',972,973,61,0,1), +(545,2,'496','Afrikanische Sprachen','496',974,975,61,0,1), +(546,2,'497','Nordamerikanische Indianersprachen','497',976,977,61,0,1), +(547,2,'498','Südamerikanische Indianersprachen','498',978,979,61,0,1), +(548,2,'499','Austronesische und andere Sprachen','499',980,981,61,0,1), +(549,2,'500','Naturwissenschaften und Mathematik','500',986,987,62,0,1), +(550,2,'501','Philosophie, Theorie','501',988,989,62,0,1), +(551,2,'502','Verschiedenes','502',990,991,62,0,1), +(552,2,'503','Wörterbücher, Enzyklopädien','503',992,993,62,0,1), +(553,2,'505','Fortlaufende Sammelwerke','505',994,995,62,0,1), +(554,2,'506','Organisationen, Management','506',996,997,62,0,1), +(555,2,'507','Ausbildung, Forschung, verwandte Themen','507',998,999,62,0,1), +(556,2,'508','Naturgeschichte','508',1000,1001,62,0,1), +(557,2,'509','Histor., geogr., personenbezogene Behandlung','509',1002,1003,62,0,1), +(558,2,'510','Mathematik','510',1006,1007,63,0,1), +(559,2,'511','Allgemeine mathematische Prinzipien','511',1008,1009,63,0,1), +(560,2,'512','Algebra','512',1010,1011,63,0,1), +(561,2,'513','Arithmetik','513',1012,1013,63,0,1), +(562,2,'514','Topologie','514',1014,1015,63,0,1), +(563,2,'515','Analysis','515',1016,1017,63,0,1), +(564,2,'516','Geometrie','516',1018,1019,63,0,1), +(565,2,'518','Numerische Analysis','518',1020,1021,63,0,1), +(566,2,'519','Wahrscheinlichkeiten, angewandte Mathematik','519',1022,1023,63,0,1), +(567,2,'520','Astronomie und zugeordnete Wissenschaften','520',1026,1027,64,0,1), +(568,2,'521','Himmelsmechanik','521',1028,1029,64,0,1), +(569,2,'522','Techniken, Ausstattung, Materialien','522',1030,1031,64,0,1), +(570,2,'523','Einzelne Himmelskörper und Himmelsphänomene','523',1032,1033,64,0,1), +(571,2,'525','Erde (Astronomische Geografie)','525',1034,1035,64,0,1), +(572,2,'526','Mathematische Geografie','526',1036,1037,64,0,1), +(573,2,'527','Astronavigation','527',1038,1039,64,0,1), +(574,2,'528','Ephemeriden','528',1040,1041,64,0,1), +(575,2,'529','Chronologie','529',1042,1043,64,0,1), +(576,2,'530','Physik','530',1046,1047,65,0,1), +(577,2,'531','Klassische Mechanik, Festkörpermechanik','531',1048,1049,65,0,1), +(578,2,'532','Mechanik der Fluide, Mechanik der Flüssigkeiten','532',1050,1051,65,0,1), +(579,2,'533','Gasmechanik','533',1052,1053,65,0,1), +(580,2,'534','Schall und verwandte Schwingungen','534',1054,1055,65,0,1), +(581,2,'535','Licht, Infrarot- und Ultraviolettphänomene','535',1056,1057,65,0,1), +(582,2,'536','Wärme','536',1058,1059,65,0,1), +(583,2,'537','Elektrizität, Elektronik','537',1060,1061,65,0,1), +(584,2,'538','Magnetismus','538',1062,1063,65,0,1), +(585,2,'539','Moderne Physik','539',1064,1065,65,0,1), +(586,2,'540','Chemie und zugeordnete Wissenschaften','540',1068,1069,66,0,1), +(587,2,'541','Physikalische Chemie','541',1070,1071,66,0,1), +(588,2,'542','Techniken, Ausstattung, Materialien','542',1072,1073,66,0,1), +(589,2,'543','Analytische Chemie','543',1074,1075,66,0,1), +(590,2,'546','Anorganische Chemie','546',1076,1077,66,0,1), +(591,2,'547','Organische Chemie','547',1078,1079,66,0,1), +(592,2,'548','Kristallografie','548',1080,1081,66,0,1), +(593,2,'549','Mineralogie','549',1082,1083,66,0,1), +(594,2,'550','Geowissenschaften','550',1086,1087,67,0,1), +(595,2,'551','Geologie, Hydrologie, Meteorologie','551',1088,1089,67,0,1), +(596,2,'552','Petrologie','552',1090,1091,67,0,1), +(597,2,'553','Lagerstättenkunde','553',1092,1093,67,0,1), +(598,2,'554','Geowissenschaften Europas','554',1094,1095,67,0,1), +(599,2,'555','Geowissenschaften Asiens','555',1096,1097,67,0,1), +(600,2,'556','Geowissenschaften Afrikas','556',1098,1099,67,0,1), +(601,2,'557','Geowissenschaften Nordamerikas','557',1100,1101,67,0,1), +(602,2,'558','Geowissenschaften Südamerikas','558',1102,1103,67,0,1), +(603,2,'559','Geowissenschaften anderer Gebiete','559',1104,1105,67,0,1), +(604,2,'560','Paläontologie, Paläozoologie','560',1108,1109,68,0,1), +(605,2,'561','Paläobotanik, fossile Mikroorganismen','561',1110,1111,68,0,1), +(606,2,'562','Fossile Evertebrata (Wirbellose)','562',1112,1113,68,0,1), +(607,2,'563','Fossile Wirbellose des Meeres und der Meeresküste','563',1114,1115,68,0,1), +(608,2,'564','Fossile Mollusca (Weichtiere), Tentaculata (Kranzfühler)','564',1116,1117,68,0,1), +(609,2,'565','Fossile Arthropoden (Gliederfüßer)','565',1118,1119,68,0,1), +(610,2,'566','Fossile Chordata (Chordatiere)','566',1120,1121,68,0,1), +(611,2,'567','Fossile wechselwarme Wirbeltiere, fossile Pisces (Fische)','567',1122,1123,68,0,1), +(612,2,'568','Fossile Aves (Vögel)','568',1124,1125,68,0,1), +(613,2,'569','Fossile Mammalia (Säugetiere)','569',1126,1127,68,0,1), +(614,2,'570','Biowissenschaften, Biologie','570',1130,1131,69,0,1), +(615,2,'571','Physiologie und verwandte Themen','571',1132,1133,69,0,1), +(616,2,'572','Biochemie','572',1134,1135,69,0,1), +(617,2,'573','Einzelne physiologische Systeme bei Tieren','573',1136,1137,69,0,1), +(618,2,'575','Einzelne Teile von und physiologische Systeme bei Pflanzen','575',1138,1139,69,0,1), +(619,2,'576','Genetik und Evolution','576',1140,1141,69,0,1), +(620,2,'577','Ökologie','577',1142,1143,69,0,1), +(621,2,'578','Naturgeschichte von Organismen','578',1144,1145,69,0,1), +(622,2,'579','Mikroorganismen, Pilze, Algen','579',1146,1147,69,0,1), +(623,2,'580','Pflanzen (Botanik)','580',1150,1151,70,0,1), +(624,2,'581','Einzelne Themen in der Naturgeschichte','581',1152,1153,70,0,1), +(625,2,'582','Pflanzen mit spezifischen Merkmalen und Blüten','582',1154,1155,70,0,1), +(626,2,'583','Magnoliopsida (Zweikeimblättrige)','583',1156,1157,70,0,1), +(627,2,'584','Liliopsida (Einkeimblättrige)','584',1158,1159,70,0,1), +(628,2,'585','Gymnospermae (Nacktsamer), Coniferae (Nadelgehölze)','585',1160,1161,70,0,1), +(629,2,'586','Cryptogamia (Blütenlose Pflanzen)','586',1162,1163,70,0,1), +(630,2,'587','Pteridophyta (Farnpflanzen)','587',1164,1165,70,0,1), +(631,2,'588','Bryophyta (Moose)','588',1166,1167,70,0,1), +(632,2,'590','Tiere (Zoologie)','590',1170,1171,71,0,1), +(633,2,'591','Einzelne Themen in der Naturgeschichte','591',1172,1173,71,0,1), +(634,2,'592','Evertebrata (Wirbellose)','592',1174,1175,71,0,1), +(635,2,'593','Wirbellose des Meeres und der Meeresküste','593',1176,1177,71,0,1), +(636,2,'594','Mollusca (Weichtiere), Tentaculata (Kranzfühler)','594',1178,1179,71,0,1), +(637,2,'595','Arthropoden (Gliederfüßer)','595',1180,1181,71,0,1), +(638,2,'596','Chordata (Chordatiere)','596',1182,1183,71,0,1), +(639,2,'597','Wechselwarme Wirbeltiere, Pisces (Fische)','597',1184,1185,71,0,1), +(640,2,'598','Aves (Vögel)','598',1186,1187,71,0,1), +(641,2,'599','Mammalia (Säugetiere)','599',1188,1189,71,0,1), +(642,2,'600','Technik, Technologie','600',1194,1195,72,0,1), +(643,2,'601','Philosophie, Theorie','601',1196,1197,72,0,1), +(644,2,'602','Verschiedenes','602',1198,1199,72,0,1), +(645,2,'603','Wörterbücher, Enzyklopädien','603',1200,1201,72,0,1), +(646,2,'604','Spezielle Themen','604',1202,1203,72,0,1), +(647,2,'605','Fortlaufende Sammelwerke','605',1204,1205,72,0,1), +(648,2,'606','Organisationen','606',1206,1207,72,0,1), +(649,2,'607','Ausbildung, Forschung, verwandte Themen','607',1208,1209,72,0,1), +(650,2,'608','Erfindungen, Patente','608',1210,1211,72,0,1), +(651,2,'609','Histor., geogr., personenbezogene Behandlung','609',1212,1213,72,0,1), +(652,2,'610','Medizin und Gesundheit','610',1216,1217,73,0,1), +(653,2,'611','Menschliche Anatomie, Zytologie, Histologie','611',1218,1219,73,0,1), +(654,2,'612','Humanphysiologie','612',1220,1221,73,0,1), +(655,2,'613','Persönliche Gesundheit und Sicherheit','613',1222,1223,73,0,1), +(656,2,'614','Inzidenz und Prävention von Krankheiten','614',1224,1225,73,0,1), +(657,2,'615','Pharmakologie, Therapeutik','615',1226,1227,73,0,1), +(658,2,'616','Krankheiten','616',1228,1229,73,0,1), +(659,2,'617','Chirurgie und verwandte medizinische Fachrichtungen','617',1230,1231,73,0,1), +(660,2,'618','Gynäkologie, Geburtsmedizin, Pädiatrie, Geriatrie','618',1232,1233,73,0,1), +(661,2,'620','Ingenieurwissenschaften und zugeordnete Tätigkeiten','620',1236,1237,74,0,1), +(662,2,'621','Angewandte Physik','621',1238,1239,74,0,1), +(663,2,'622','Bergbau und verwandte Tätigkeiten','622',1240,1241,74,0,1), +(664,2,'623','Militär- und Schiffstechnik','623',1242,1243,74,0,1), +(665,2,'624','Ingenieurbau','624',1244,1245,74,0,1), +(666,2,'625','Eisenbahn- und Straßenbau','625',1246,1247,74,0,1), +(667,2,'627','Wasserbau','627',1248,1249,74,0,1), +(668,2,'628','Sanitär- und Kommunaltechnik, Umwelttechnik','628',1250,1251,74,0,1), +(669,2,'629','Andere Fachrichtungen der Ingenieurwissenschaften','629',1252,1253,74,0,1), +(670,2,'630','Landwirtschaft und verwandte Bereiche','630',1256,1257,75,0,1), +(671,2,'631','Techniken, Ausstattung, Materialien','631',1258,1259,75,0,1), +(672,2,'632','Schäden, Krankheiten, Schädlinge an Pflanzen','632',1260,1261,75,0,1), +(673,2,'633','Feld- und Plantagenfrüchte','633',1262,1263,75,0,1), +(674,2,'634','Obstanlagen, Früchte, Forstwirtschaft','634',1264,1265,75,0,1), +(675,2,'635','Gartenpflanzen (Gartenbau)','635',1266,1267,75,0,1), +(676,2,'636','Viehwirtschaft','636',1268,1269,75,0,1), +(677,2,'637','Milchverarbeitung und verwandte Produkte','637',1270,1271,75,0,1), +(678,2,'638','Insektenzucht','638',1272,1273,75,0,1), +(679,2,'639','Jagd, Fischfang, Naturschutz','639',1274,1275,75,0,1), +(680,2,'640','Hauswirtschaft und Familie','640',1278,1279,76,0,1), +(681,2,'641','Essen und Trinken','641',1280,1281,76,0,1), +(682,2,'642','Mahlzeiten, Tischkultur','642',1282,1283,76,0,1), +(683,2,'643','Wohnen, Haushaltsausstattung','643',1284,1285,76,0,1), +(684,2,'644','Gebäudeversorgung für Haushalte','644',1286,1287,76,0,1), +(685,2,'645','Einrichtungsgegenstände','645',1288,1289,76,0,1), +(686,2,'646','Nähen, Kleidung, persönliches Leben, Familienleben','646',1290,1291,76,0,1), +(687,2,'647','Großhaushaltsführung','647',1292,1293,76,0,1), +(688,2,'648','Haushaltsführung','648',1294,1295,76,0,1), +(689,2,'649','Kindererziehung, häusliche Betreuung','649',1296,1297,76,0,1), +(690,2,'650','Management und unterstützende Tätigkeiten','650',1300,1301,77,0,1), +(691,2,'651','Büroarbeit','651',1302,1303,77,0,1), +(692,2,'652','Techniken der schriftlichen Kommunikation','652',1304,1305,77,0,1), +(693,2,'653','Stenografie','653',1306,1307,77,0,1), +(694,2,'657','Rechnungslegung','657',1308,1309,77,0,1), +(695,2,'658','Allgemeines Management','658',1310,1311,77,0,1), +(696,2,'659','Werbung, Öffentlichkeitsarbeit','659',1312,1313,77,0,1), +(697,2,'660','Chemische Verfahrenstechnik','660',1316,1317,78,0,1), +(698,2,'661','Industriechemikalien','661',1318,1319,78,0,1), +(699,2,'662','Explosivstoffe, Brennstoffe und verwandte Produkte','662',1320,1321,78,0,1), +(700,2,'663','Getränketechnologie','663',1322,1323,78,0,1), +(701,2,'664','Lebensmitteltechnologie','664',1324,1325,78,0,1), +(702,2,'665','Industrielle Öle, Fette, Wachse, technische Gase','665',1326,1327,78,0,1), +(703,2,'666','Keramiktechnologie und zugeordnete Technologien','666',1328,1329,78,0,1), +(704,2,'667','Reinigungs-, Färbe-, Beschichtungstechniken','667',1330,1331,78,0,1), +(705,2,'668','Technik anderer organischer Produkte','668',1332,1333,78,0,1), +(706,2,'669','Metallurgie','669',1334,1335,78,0,1), +(707,2,'670','Industrielle Fertigung','670',1338,1339,79,0,1), +(708,2,'671','Metallverarbeitung und Rohprodukte aus Metall','671',1340,1341,79,0,1), +(709,2,'672','Eisen, Stahl, andere Eisenlegierungen','672',1342,1343,79,0,1), +(710,2,'673','Nichteisenmetalle','673',1344,1345,79,0,1), +(711,2,'674','Holzverarbeitung, Holzprodukte, Kork','674',1346,1347,79,0,1), +(712,2,'675','Leder- und Pelzverarbeitung','675',1348,1349,79,0,1), +(713,2,'676','Zellstoff und Papierherstellung','676',1350,1351,79,0,1), +(714,2,'677','Textilien','677',1352,1353,79,0,1), +(715,2,'678','Elastomere, Elastomerprodukte','678',1354,1355,79,0,1), +(716,2,'679','Andere Produkte aus einzelnen Werkstoffen','679',1356,1357,79,0,1), +(717,2,'680','Industrielle Fertigung für einzelne Verwendungszwecke','680',1360,1361,80,0,1), +(718,2,'681','Präzisionsinstrumente und andere Geräte','681',1362,1363,80,0,1), +(719,2,'682','Schmiedehandwerk','682',1364,1365,80,0,1), +(720,2,'683','Eisenwaren, Haushaltsgeräte','683',1366,1367,80,0,1), +(721,2,'684','Wohnungseinrichtung, Heimwerkstätten','684',1368,1369,80,0,1), +(722,2,'685','Leder- und Pelzwaren und verwandte Produkte','685',1370,1371,80,0,1), +(723,2,'686','Drucken und verwandte Tätigkeiten','686',1372,1373,80,0,1), +(724,2,'687','Kleidung, Accessoires','687',1374,1375,80,0,1), +(725,2,'688','Andere Endprodukte, Verpackungstechnik','688',1376,1377,80,0,1), +(726,2,'690','Hausbau, Bauhandwerk','690',1380,1381,81,0,1), +(727,2,'691','Baustoffe','691',1382,1383,81,0,1), +(728,2,'692','Bauhilfstechniken','692',1384,1385,81,0,1), +(729,2,'693','Einzelne Baustoffarten und Zwecke','693',1386,1387,81,0,1), +(730,2,'694','Holzbau, Zimmerhandwerk','694',1388,1389,81,0,1), +(731,2,'695','Dachdeckung','695',1390,1391,81,0,1), +(732,2,'696','Versorgungseinrichtungen','696',1392,1393,81,0,1), +(733,2,'697','Heizungs-, Lüftungs-, Klimatechnik','697',1394,1395,81,0,1), +(734,2,'698','Ausbau','698',1396,1397,81,0,1), +(735,2,'700','Künste, Bildende und angewandte Kunst','700',1402,1403,82,0,1), +(736,2,'701','Kunstphilosophie, Kunsttheorie der bildenden und angewandten Kunst','701',1404,1405,82,0,1), +(737,2,'702','Verschiedenes zur bildenden und angewandten Kunst','702',1406,1407,82,0,1), +(738,2,'703','Wörterbücher, Enzyklopädien zur bildenden und angewandten Kunst','703',1408,1409,82,0,1), +(739,2,'704','Spezielle Themen zur bildenden und angewandten Kunst','704',1410,1411,82,0,1), +(740,2,'705','Fortlaufende Sammelwerke zur bildenden und angewandten Kunst','705',1412,1413,82,0,1), +(741,2,'706','Organisationen, Management der bildenden und angewandten Kunst','706',1414,1415,82,0,1), +(742,2,'707','Ausbildung, Forschung, verwandte Themen zur bildenden und angewandten Kunst','707',1416,1417,82,0,1), +(743,2,'708','Galerien, Museen, Privatsammlungen zur bildenden und angewandten Kunst','708',1418,1419,82,0,1), +(744,2,'709','Histor., geogr., personenbezogene Behandlung der bildenden und angewandten Kunst','709',1420,1421,82,0,1), +(745,2,'710','Städtebau, Raumplanung, Landschaftsgestaltung','710',1424,1425,83,0,1), +(746,2,'711','Raumplanung','711',1426,1427,83,0,1), +(747,2,'712','Landschaftsgestaltung','712',1428,1429,83,0,1), +(748,2,'713','Landschaftsgestaltung von Verkehrswegen','713',1430,1431,83,0,1), +(749,2,'714','Wasser als Gestaltungselement','714',1432,1433,83,0,1), +(750,2,'715','Gehölze als Gestaltungselemente','715',1434,1435,83,0,1), +(751,2,'716','Krautige Pflanzen als Gestaltungselemente','716',1436,1437,83,0,1), +(752,2,'717','Andere Gestaltungselemente','717',1438,1439,83,0,1), +(753,2,'718','Landschaftsgestaltung von Friedhöfen','718',1440,1441,83,0,1), +(754,2,'719','Naturlandschaften','719',1442,1443,83,0,1), +(755,2,'720','Architektur','720',1446,1447,84,0,1), +(756,2,'721','Architektonische Struktur','721',1448,1449,84,0,1), +(757,2,'722','Architektur bis ca. 300','722',1450,1451,84,0,1), +(758,2,'723','Architektur von ca. 300 bis 1399','723',1452,1453,84,0,1), +(759,2,'724','Architektur ab 1400','724',1454,1455,84,0,1), +(760,2,'725','Öffentliche Bauwerke','725',1456,1457,84,0,1), +(761,2,'726','Gebäude für religiöse und verwandte Zwecke','726',1458,1459,84,0,1), +(762,2,'727','Gebäude für Lehr- und Forschungszwecke','727',1460,1461,84,0,1), +(763,2,'728','Wohnbauten und verwandte Gebäude','728',1462,1463,84,0,1), +(764,2,'729','Entwurf und Gestaltung, Innenarchitektur','729',1464,1465,84,0,1), +(765,2,'730','Plastische Künste, Bildhauerkunst','730',1468,1469,85,0,1), +(766,2,'731','Verfahren, Formen und Motive in der Bildhauerkunst','731',1470,1471,85,0,1), +(767,2,'732','Bildhauerei bis ca. 500','732',1472,1473,85,0,1), +(768,2,'733','Griechische, etruskische, römische Bildhauerkunst','733',1474,1475,85,0,1), +(769,2,'734','Bildhauerkunst von ca. 500 bis 1399','734',1476,1477,85,0,1), +(770,2,'735','Bildhauerkunst ab 1400','735',1478,1479,85,0,1), +(771,2,'736','Schnitzen, Schnitzereien','736',1480,1481,85,0,1), +(772,2,'737','Numismatik, Siegelkunde','737',1482,1483,85,0,1), +(773,2,'738','Keramikkunst','738',1484,1485,85,0,1), +(774,2,'739','Metallkunst','739',1486,1487,85,0,1), +(775,2,'740','Zeichnung, angewandte Kunst','740',1490,1491,86,1,1), +(776,2,'741','Zeichnung, Zeichnungen','741',1492,1493,86,0,1), +(777,2,'742','Perspektive','742',1496,1497,86,0,1), +(778,2,'743','Zeichnung und Zeichnungen nach Motiv','743',1498,1499,86,0,1), +(779,2,'745','Angewandte Kunst','745',1500,1501,86,0,1), +(780,2,'746','Textilkunst','746',1502,1503,86,0,1), +(781,2,'747','Innendekoration','747',1504,1505,86,0,1), +(782,2,'748','Glas','748',1506,1507,86,0,1), +(783,2,'749','Möbel, Möbelzubehör','749',1508,1509,86,0,1), +(784,2,'750','Malerei, Gemälde','750',1512,1513,87,0,1), +(785,2,'751','Techniken, Ausstattung, Materialien, Formen','751',1514,1515,87,0,1), +(786,2,'752','Farbe','752',1516,1517,87,0,1), +(787,2,'753','Symbolik, Allegorie, Mythologie, Legende','753',1518,1519,87,0,1), +(788,2,'754','Genremalerei','754',1520,1521,87,0,1), +(789,2,'755','Religion','755',1522,1523,87,0,1), +(790,2,'757','Menschliche Figuren','757',1524,1525,87,0,1), +(791,2,'758','Andere Motive','758',1526,1527,87,0,1), +(792,2,'759','Histor., geogr., personenbezogene Behandlung','759',1528,1529,87,0,1), +(793,2,'760','Grafik, Druckgrafik, Drucke','760',1532,1533,88,0,1), +(794,2,'761','Hochdruckverfahren (Blockdruck)','761',1534,1535,88,0,1), +(795,2,'763','Lithografische Druckverfahren','763',1536,1537,88,0,1), +(796,2,'764','Farblithografie, Serigrafie','764',1538,1539,88,0,1), +(797,2,'765','Metallgravur','765',1540,1541,88,0,1), +(798,2,'766','Mezzotinto, Aquatinta und verwandte Techniken','766',1542,1543,88,0,1), +(799,2,'767','Radierung, Kaltnadelarbeit','767',1544,1545,88,0,1), +(800,2,'769','Drucke','769',1546,1547,88,0,1), +(801,2,'770','Fotografie, Fotografien, Computerkunst','770',1550,1551,89,0,1), +(802,2,'771','Techniken, Ausstattung, Materialien','771',1552,1553,89,0,1), +(803,2,'772','Entwicklungsverfahren mit Metallsalzen','772',1554,1555,89,0,1), +(804,2,'773','Pigmentdruckverfahren','773',1556,1557,89,0,1), +(805,2,'774','Holografie','774',1558,1559,89,0,1), +(806,2,'775','Digitale Fotografie','775',1560,1561,89,0,1), +(807,2,'776','Computerkunst (Digitale Kunst)','776',1562,1563,89,0,1), +(808,2,'778','Bereiche und Arten der Fotografie','778',1564,1565,89,0,1), +(809,2,'779','Fotografien','779',1566,1567,89,0,1), +(810,2,'780','Musik','780',1570,1571,90,0,1), +(811,2,'781','Allgemeine Prinzipien, musikalische Formen','781',1572,1573,90,0,1), +(812,2,'782','Vokalmusik','782',1574,1575,90,0,1), +(813,2,'783','Musik für Einzelstimmen, die Stimme','783',1576,1577,90,0,1), +(814,2,'784','Instrumente, Instrumentalensembles','784',1578,1579,90,0,1), +(815,2,'785','Ensembles mit einem Instrument pro Stimme','785',1580,1581,90,0,1), +(816,2,'786','Tasteninstrumente, andere Instrumente','786',1582,1583,90,0,1), +(817,2,'787','Saiteninstrumente','787',1584,1585,90,0,1), +(818,2,'788','Blasinstrumente','788',1586,1587,90,0,1), +(819,2,'789','(Optionale Notation)','789',1588,1589,90,0,1), +(820,2,'790','Freizeitgestaltung, darstellende Künste, Sport','790',1592,1593,91,1,1), +(821,2,'791','Öffentliche Darbietungen, Film, Rundfunk','791',1594,1595,91,1,1), +(822,2,'792','Bühnenkunst','792',1596,1597,91,1,1), +(823,2,'793','Spiele und Freizeitaktivitäten für drinnen','793',1598,1599,91,1,1), +(824,2,'794','Unterhaltungsspiele für drinnen','794',1600,1601,91,0,1), +(825,2,'795','Glücksspiele','795',1602,1603,91,0,1), +(826,2,'796','Sportarten, Sportspiele','796',1604,1605,91,1,1), +(827,2,'797','Wasser- und Luftsport','797',1606,1607,91,0,1), +(828,2,'798','Pferdesport, Tierrennen','798',1608,1609,91,0,1), +(829,2,'799','Fischfang, Jagd, Schießen','799',1610,1611,91,0,1), +(830,2,'800','Literatur und Rhetorik','800',1616,1617,92,0,1), +(831,2,'801','Literaturtheorie','801',1618,1619,92,0,1), +(832,2,'802','Verschiedenes','802',1620,1621,92,0,1), +(833,2,'803','Wörterbücher, Enzyklopädien','803',1622,1623,92,0,1), +(834,2,'805','Fortlaufende Sammelwerke','805',1624,1625,92,0,1), +(835,2,'806','Organisationen, Management','806',1626,1627,92,0,1), +(836,2,'807','Ausbildung, Forschung, verwandte Themen','807',1628,1629,92,0,1), +(837,2,'808','Rhetorik, Sammlungen von Literatur','808',1630,1631,92,0,1), +(838,2,'809','Geschichte, Darstellung, Literaturwissenschaft und –k ritik','809',1632,1633,92,0,1), +(839,2,'810','Amerikanische Literatur in in Englisch','810',1636,1637,93,0,1), +(840,2,'811','Amerikanische Versdichtung','811',1638,1639,93,0,1), +(841,2,'812','Amerikanische Dramen','812',1640,1641,93,0,1), +(842,2,'813','Amerikanische Erzählprosa','813',1642,1643,93,0,1), +(843,2,'814','Amerikanische Essays','814',1644,1645,93,0,1), +(844,2,'815','Amerikanische Reden','815',1646,1647,93,0,1), +(845,2,'816','Amerikanische Briefe','816',1648,1649,93,0,1), +(846,2,'817','Amerikanischer Humor, amerikanische Satire','817',1650,1651,93,0,1), +(847,2,'818','Amerikanische vermischte Schriften','818',1652,1653,93,0,1), +(848,2,'819','(Optionale Notation)','819',1654,1655,93,0,1), +(849,2,'820','Englische, altenglische Literaturen','820',1658,1659,94,0,1), +(850,2,'821','Englische Versdichtung','821',1660,1661,94,0,1), +(851,2,'822','Englische Dramen','822',1662,1663,94,0,1), +(852,2,'823','Englische Erzählprosa','823',1664,1665,94,0,1), +(853,2,'824','Englische Essays','824',1666,1667,94,0,1), +(854,2,'825','Englische Reden','825',1668,1669,94,0,1), +(855,2,'826','Englische Briefe','826',1670,1671,94,0,1), +(856,2,'827','Englischer Humor, englische Satire','827',1672,1673,94,0,1), +(857,2,'828','Englische vermischte Schriften','828',1674,1675,94,0,1), +(858,2,'829','Altenglische (Angelsächsische) Literatur','829',1676,1677,94,0,1), +(859,2,'830','Literaturen germanischer Sprachen, Deutsche Literatur','830',1680,1681,95,1,1), +(860,2,'831','Deutsche Versdichtung','831',1682,1683,95,0,1), +(861,2,'832','Deutsche Dramen','832',1684,1685,95,0,1), +(862,2,'833','Deutsche Erzählprosa','833',1686,1687,95,0,1), +(863,2,'834','Deutsche Essays','834',1688,1689,95,0,1), +(864,2,'835','Deutsche Reden','835',1690,1691,95,0,1), +(865,2,'836','Deutsche Briefe','836',1692,1693,95,0,1), +(866,2,'837','Deutscher Humor, deutsche Satire','837',1694,1695,95,0,1), +(867,2,'838','Deutsche vermischte Schriften','838',1696,1697,95,0,1), +(868,2,'839','Andere germanische Literaturen','839',1698,1699,95,1,1), +(869,2,'840','Literaturen romanischer Sprachen, Französische Literatur','840',1702,1703,96,0,1), +(870,2,'841','Französische Versdichtung','841',1704,1705,96,0,1), +(871,2,'842','Französische Dramen','842',1706,1707,96,0,1), +(872,2,'843','Französische Erzählprosa','843',1708,1709,96,0,1), +(873,2,'844','Französische Essays','844',1710,1711,96,0,1), +(874,2,'845','Französische Reden','845',1712,1713,96,0,1), +(875,2,'846','Französische Briefe','846',1714,1715,96,0,1), +(876,2,'847','Französischer Humor, französische Satire','847',1716,1717,96,0,1), +(877,2,'848','Französische vermischte Schriften','848',1718,1719,96,0,1), +(878,2,'849','Okzitanische, katalanische Literaturen','849',1720,1721,96,0,1), +(879,2,'850','Italienische, rumänische, rätoromanische Literaturen','850',1724,1725,97,0,1), +(880,2,'851','Italienische Versdichtung','851',1726,1727,97,0,1), +(881,2,'852','Italienische Dramen','852',1728,1729,97,0,1), +(882,2,'853','Italienische Erzählprosa','853',1730,1731,97,0,1), +(883,2,'854','Italienische Essays','854',1732,1733,97,0,1), +(884,2,'855','Italienische Reden','855',1734,1735,97,0,1), +(885,2,'856','Italienische Briefe','856',1736,1737,97,0,1), +(886,2,'857','Italienischer Humor, italienische Satire','857',1738,1739,97,0,1), +(887,2,'858','Italienische vermischte Schriften','858',1740,1741,97,0,1), +(888,2,'859','Rumänische, rätoromanische Literaturen','859',1742,1743,97,0,1), +(889,2,'860','Spanische, portugiesische Literaturen','860',1746,1747,98,0,1), +(890,2,'861','Spanische Versdichtung','861',1748,1749,98,0,1), +(891,2,'862','Spanische Dramen','862',1750,1751,98,0,1), +(892,2,'863','Spanische Erzählprosa','863',1752,1753,98,0,1), +(893,2,'864','Spanische Essays','864',1754,1755,98,0,1), +(894,2,'865','Spanische Reden','865',1756,1757,98,0,1), +(895,2,'866','Spanische Briefe','866',1758,1759,98,0,1), +(896,2,'867','Spanischer Humor, spanische Satire','867',1760,1761,98,0,1), +(897,2,'868','Spanische vermischte Schriften','868',1762,1763,98,0,1), +(898,2,'869','Portugiesische Literatur','869',1764,1765,98,0,1), +(899,2,'870','Italische Literaturen, Lateinische Literatur','870',1768,1769,99,0,1), +(900,2,'871','Lateinische Versdichtung','871',1770,1771,99,0,1), +(901,2,'872','Lateinische dramatische Versdichtung, Dramen','872',1772,1773,99,0,1), +(902,2,'873','Lateinische erzählende Versdichtung, Erzählprosa','873',1774,1775,99,0,1), +(903,2,'874','Lateinische lyrische Versdichtung','874',1776,1777,99,0,1), +(904,2,'875','Lateinische Reden','875',1778,1779,99,0,1), +(905,2,'876','Lateinische Briefe','876',1780,1781,99,0,1), +(906,2,'877','Lateinischer Humor, lateinische Satire','877',1782,1783,99,0,1), +(907,2,'878','Lateinische vermischte Schriften','878',1784,1785,99,0,1), +(908,2,'879','Literaturen anderer italischer Sprachen','879',1786,1787,99,0,1), +(909,2,'880','Hellenische Literaturen, Klassische griechische Literatur','880',1790,1791,100,0,1), +(910,2,'881','Klassische griechische Versdichtung','881',1792,1793,100,0,1), +(911,2,'882','Klassische griechische dramatische Versdichtung, Dramen','882',1794,1795,100,0,1), +(912,2,'883','Klassische griechische erzählende Versdichtung, Erzählprosa','883',1796,1797,100,0,1), +(913,2,'884','Klassische griechische lyrische Versdichtung','884',1798,1799,100,0,1), +(914,2,'885','Klassische griechische Reden','885',1800,1801,100,0,1), +(915,2,'886','Klassische griechische Briefe','886',1802,1803,100,0,1), +(916,2,'887','Humor und Satire in klassischem Griechisch','887',1804,1805,100,0,1), +(917,2,'888','Klassische griechische vermischte Schriften','888',1806,1807,100,0,1), +(918,2,'889','Neugriechische Literatur','889',1808,1809,100,0,1), +(919,2,'890','Literaturen anderer Sprachen','890',1812,1813,101,0,1), +(920,2,'891','Ostindoeuropäische, keltische Literaturen','891',1814,1815,101,0,1), +(921,2,'892','Afroasiatische Literaturen, Semitische Literaturen','892',1816,1817,101,0,1), +(922,2,'893','Nichtsemitische afroasiatische Literaturen','893',1818,1819,101,0,1), +(923,2,'894','Altaische, uralische, paläosibirische, drawidische Literaturen','894',1820,1821,101,0,1), +(924,2,'895','Ost- und südostasiatische Literaturen','895',1822,1823,101,0,1), +(925,2,'896','Afrikanische Literaturen','896',1824,1825,101,0,1), +(926,2,'897','Literaturen nordamerikanischer Indianersprachen','897',1826,1827,101,0,1), +(927,2,'898','Literaturen südamerikanischer Indianersprachen','898',1828,1829,101,0,1), +(928,2,'899','Austronesische und andere Literaturen','899',1830,1831,101,0,1), +(929,2,'900','Geschichte und Geografie','900',1836,1837,102,0,1), +(930,2,'901','Geschichtsphilosophie, Geschichtstheorie','901',1838,1839,102,0,1), +(931,2,'902','Verschiedenes','902',1840,1841,102,0,1), +(932,2,'903','Wörterbücher, Enzyklopädien','903',1842,1843,102,0,1), +(933,2,'904','Allgemeine Darstellungen von Ereignissen','904',1844,1845,102,0,1), +(934,2,'905','Fortlaufende Sammelwerke','905',1846,1847,102,0,1), +(935,2,'906','Organisationen, Management','906',1848,1849,102,0,1), +(936,2,'907','Ausbildung, Forschung, verwandte Themen','907',1850,1851,102,0,1), +(937,2,'908','Behandlung nach Personengruppen','908',1852,1853,102,0,1), +(938,2,'909','Weltgeschichte','909',1854,1855,102,0,1), +(939,2,'910','Geografie, Reisen','910',1858,1859,103,1,1), +(940,2,'911','Historische Geografie','911',1860,1861,103,0,1), +(941,2,'912','Atlanten, Karten, Grafiken, Pläne','912',1862,1863,103,0,1), +(942,2,'913','Geografie der und Reisen in der Alten Welt','913',1864,1865,103,0,1), +(943,2,'914','Geografie Europas und Reisen in Europa','914',1866,1867,103,0,1), +(944,2,'915','Geografie Asiens und Reisen in Asien','915',1870,1871,103,0,1), +(945,2,'916','Geografie Afrikas und Reisen in Afrika','916',1872,1873,103,0,1), +(946,2,'917','Geografie Nordamerikas und Reisen in Nordamerika','917',1874,1875,103,0,1), +(947,2,'918','Geografie Südamerikas und Reisen in Südamerika','918',1876,1877,103,0,1), +(948,2,'919','Geografie anderer Gebiete und Reisen in anderen Gebieten','919',1878,1879,103,0,1), +(949,2,'920','Biografien, Genealogie, Insignien','920',1882,1883,104,0,1), +(950,2,'921','(Optionale Notation)','921',1884,1885,104,0,1), +(951,2,'922','(Optionale Notation)','922',1886,1887,104,0,1), +(952,2,'923','(Optionale Notation)','923',1888,1889,104,0,1), +(953,2,'924','(Optionale Notation)','924',1890,1891,104,0,1), +(954,2,'925','(Optionale Notation)','925',1892,1893,104,0,1), +(955,2,'926','(Optionale Notation)','926',1894,1895,104,0,1), +(956,2,'927','(Optionale Notation)','927',1896,1897,104,0,1), +(957,2,'928','(Optionale Notation)','928',1898,1899,104,0,1), +(958,2,'929','Genealogie, Namenkunde, Insignien','929',1900,1901,104,0,1), +(959,2,'930','Geschichte des Altertums bis ca. 499, Archäologie','930',1904,1905,105,0,1), +(960,2,'931','Geschichte Chinas bis 420','931',1906,1907,105,0,1), +(961,2,'932','Geschichte Ägyptens bis 640','932',1908,1909,105,0,1), +(962,2,'933','Geschichte Palästinas bis 70','933',1910,1911,105,0,1), +(963,2,'934','Geschichte Indiens bis 647','934',1912,1913,105,0,1), +(964,2,'935','Geschichte Mesopotamiens und der iranischen Hochebene bis 637','935',1914,1915,105,0,1), +(965,2,'936','Geschichte Europas nördlich und westlich von Italien bis ca. 499','936',1916,1917,105,0,1), +(966,2,'937','Geschichte Italiens und benachbarter Gebiete bis 476','937',1918,1919,105,0,1), +(967,2,'938','Geschichte Griechenlands bis 323','938',1920,1921,105,0,1), +(968,2,'939','Geschichte anderer Teile der Welt bis ca. 640','939',1922,1923,105,0,1), +(969,2,'940','Geschichte Europas','940',1926,1927,106,1,1), +(970,2,'941','Geschichte der Britischen Inseln','941',1928,1929,106,0,1), +(971,2,'942','Geschichte Englands und Wales','942',1930,1931,106,0,1), +(972,2,'943','Geschichte Mitteleuropas, Deutschlands','943',1932,1933,106,1,1), +(973,2,'944','Geschichte Frankreichs und Monacos','944',1934,1935,106,0,1), +(974,2,'945','Geschichte der italienische Halbinsel und benachbarter Inseln','945',1936,1937,106,0,1), +(975,2,'946','Geschichte der iberischen Halbinsel und benachbarter Inseln','946',1938,1939,106,0,1), +(976,2,'947','Geschichte Osteuropas, Russlands','947',1940,1941,106,0,1), +(977,2,'948','Geschichte Skandinaviens','948',1942,1943,106,0,1), +(978,2,'949','Geschichte anderer Teile Europas','949',1944,1945,106,0,1), +(979,2,'950','Geschichte Asiens, des Fernen Ostens','950',1948,1949,107,0,1), +(980,2,'951','Geschichte Chinas und benachbarter Gebiete','951',1950,1951,107,0,1), +(981,2,'952','Geschichte Japans','952',1952,1953,107,0,1), +(982,2,'953','Geschichte der arabischen Halbinsel und benachbarter Gebiete','953',1954,1955,107,0,1), +(983,2,'954','Geschichte Südasiens, Indiens','954',1956,1957,107,0,1), +(984,2,'955','Geschichte Irans','955',1958,1959,107,0,1), +(985,2,'956','Geschichte des Nahen Ostens (Mittleren Ostens)','956',1960,1961,107,0,1), +(986,2,'957','Geschichte Sibiriens (der Asiatischen Russlands)','957',1962,1963,107,0,1), +(987,2,'958','Geschichte Zentralasiens','958',1964,1965,107,0,1), +(988,2,'959','Geschichte Südostasiens','959',1966,1967,107,0,1), +(989,2,'960','Geschichte Afrikas','960',1970,1971,108,0,1), +(990,2,'961','Geschichte Tunesiens und Libyens','961',1972,1973,108,0,1), +(991,2,'962','Geschichte Ägyptens und Sudans','962',1974,1975,108,0,1), +(992,2,'963','Geschichte Äthiopiens und Eritreas','963',1976,1977,108,0,1), +(993,2,'964','Geschichte der nordwestafrikanischen Küste und vorgelagerter Inseln','964',1978,1979,108,0,1), +(994,2,'965','Geschichte Algeriens','965',1980,1981,108,0,1), +(995,2,'966','Geschichte Westafrikas und vorgelagerter Inseln','966',1982,1983,108,0,1), +(996,2,'967','Geschichte Zentralafrikas und vorgelagerter Inseln','967',1984,1985,108,0,1), +(997,2,'968','Geschichte Südafrikas, der Republik Südafrika','968',1986,1987,108,0,1), +(998,2,'969','Geschichte der Inseln im südlichen Indischen Ozean','969',1988,1989,108,0,1), +(999,2,'970','Geschichte Nordamerikas','970',1992,1993,109,0,1), +(1000,2,'971','Geschichte Kanadas','971',1994,1995,109,0,1), +(1001,2,'972','Geschichte Mittelamerikas, Mexikos','972',1996,1997,109,0,1), +(1002,2,'973','Geschichte der USA','973',1998,1999,109,0,1), +(1003,2,'974','Geschichte der nordöstlichen Staaten der USA','974',2000,2001,109,0,1), +(1004,2,'975','Geschichte der südöstlichen Staaten der USA','975',2002,2003,109,0,1), +(1005,2,'976','Geschichte der südlichen zentralen Staaten der USA','976',2004,2005,109,0,1), +(1006,2,'977','Geschichte der nördlichen zentralen Staaten der USA','977',2006,2007,109,0,1), +(1007,2,'978','Geschichte der westlichen Staaten der USA','978',2008,2009,109,0,1), +(1008,2,'979','Geschichte der Staaten des Großen Beckens und der pazifischen Gebirgsketten','979',2010,2011,109,0,1), +(1009,2,'980','Geschichte Südamerikas','980',2014,2015,110,0,1), +(1010,2,'981','Geschichte Brasiliens','981',2016,2017,110,0,1), +(1011,2,'982','Geschichte Argentiniens','982',2018,2019,110,0,1), +(1012,2,'983','Geschichte Chiles','983',2020,2021,110,0,1), +(1013,2,'984','Geschichte Boliviens','984',2022,2023,110,0,1), +(1014,2,'985','Geschichte Perus','985',2024,2025,110,0,1), +(1015,2,'986','Geschichte Kolumbiens und Ecuadors','986',2026,2027,110,0,1), +(1016,2,'987','Geschichte Venezuelas','987',2028,2029,110,0,1), +(1017,2,'988','Geschichte Guayanas','988',2030,2031,110,0,1), +(1018,2,'989','Geschichte Paraguays und Uruguays','989',2032,2033,110,0,1), +(1019,2,'990','Geschichte anderer Gebiete','990',2036,2037,111,0,1), +(1020,2,'993','Geschichte Neuseelands','993',2038,2039,111,0,1), +(1021,2,'994','Geschichte Australiens','994',2040,2041,111,0,1), +(1022,2,'995','Geschichte Melanesiens, Neuguineas','995',2042,2043,111,0,1), +(1023,2,'996','Geschichte anderer Teile des Pazifischen Ozeans, Polynesiens','996',2044,2045,111,0,1), +(1024,2,'997','Geschichte der atlantischen Inseln','997',2046,2047,111,0,1), +(1025,2,'998','Geschichte der arktischen Inseln und der Antarktis','998',2048,2049,111,0,1), +(1026,2,'999','Geschichte der außerirdischen Welten','999',2050,2051,111,0,1), +(1027,2,'741.5','Comics, Cartoons, Karikaturen','741.5',1494,1495,86,1,1), +(1028,2,'914.3','Landeskunde Deutschlands','914.3',1868,1869,103,1,1); + + + diff --git a/database/migrations/acl_4_accounts.ts b/database/migrations/acl_4_accounts.ts index ba2373f..1237635 100644 --- a/database/migrations/acl_4_accounts.ts +++ b/database/migrations/acl_4_accounts.ts @@ -18,6 +18,7 @@ export default class Accounts extends BaseSchema { table.text("two_factor_recovery_codes").nullable(); table.smallint('state').nullable(); table.bigint('last_counter').nullable(); + table.string('avatar').nullable(); }); } @@ -43,6 +44,7 @@ export default class Accounts extends BaseSchema { // two_factor_recovery_codes text COLLATE pg_catalog."default", // state smallint, // last_counter bigint, +// avatar character varying(255), // ) // ALTER TABLE gba.accounts @@ -85,3 +87,6 @@ export default class Accounts extends BaseSchema { // GRANT ALL ON SEQUENCE gba.totp_secrets_id_seq TO tethys_admin; // ALTER TABLE gba.totp_secrets ALTER COLUMN id SET DEFAULT nextval('gba.totp_secrets_id_seq'); + + +// ALTER TABLE "accounts" ADD COLUMN "avatar" VARCHAR(255) NULL diff --git a/database/migrations/1723813974183_create_appconfigs_table.ts b/database/migrations/config_1_appconfigs_table.ts similarity index 100% rename from database/migrations/1723813974183_create_appconfigs_table.ts rename to database/migrations/config_1_appconfigs_table.ts diff --git a/database/migrations/1721999420193_create_backupcodes_table.ts b/database/migrations/config_2_backupcodes_table.ts similarity index 100% rename from database/migrations/1721999420193_create_backupcodes_table.ts rename to database/migrations/config_2_backupcodes_table.ts diff --git a/database/migrations/dataset_2_documents.ts b/database/migrations/dataset_2_documents.ts index 565e1f9..6629689 100644 --- a/database/migrations/dataset_2_documents.ts +++ b/database/migrations/dataset_2_documents.ts @@ -86,3 +86,22 @@ export default class Documents extends BaseSchema { // CONSTRAINT documents_server_state_check CHECK (server_state::text = ANY (ARRAY['deleted'::character varying::text, 'inprogress'::character varying::text, 'published'::character varying::text, 'released'::character varying::text, 'editor_accepted'::character varying::text, 'approved'::character varying::text, 'rejected_reviewer'::character varying::text, 'rejected_editor'::character varying::text, 'reviewed'::character varying::text])), // CONSTRAINT documents_type_check CHECK (type::text = ANY (ARRAY['analysisdata'::character varying::text, 'measurementdata'::character varying::text, 'monitoring'::character varying::text, 'remotesensing'::character varying::text, 'gis'::character varying::text, 'models'::character varying::text, 'mixedtype'::character varying::text])) // ) + + +// ALTER TABLE documents DROP CONSTRAINT documents_server_state_check; + +// ALTER TABLE documents +// ADD CONSTRAINT documents_server_state_check CHECK ( +// server_state::text = ANY (ARRAY[ +// 'deleted', +// 'inprogress', +// 'published', +// 'released', +// 'editor_accepted', +// 'approved', +// 'rejected_reviewer', +// 'rejected_editor', +// 'reviewed', +// 'rejected_to_reviewer' -- new value added +// ]::text[]) +// ); \ No newline at end of file diff --git a/database/migrations/dataset_6_collection_roles.ts b/database/migrations/dataset_6_collection_roles.ts index 73f83e8..1491d9a 100644 --- a/database/migrations/dataset_6_collection_roles.ts +++ b/database/migrations/dataset_6_collection_roles.ts @@ -32,3 +32,21 @@ export default class CollectionsRoles extends BaseSchema { // visible_oai boolean NOT NULL DEFAULT true, // CONSTRAINT collections_roles_pkey PRIMARY KEY (id) // ) + +// change to normal intzeger: +// ALTER TABLE collections_roles ALTER COLUMN id DROP DEFAULT; +// DROP SEQUENCE IF EXISTS collections_roles_id_seq; + +// -- Step 1: Temporarily change one ID to a value not currently used +// UPDATE collections_roles SET id = 99 WHERE name = 'ccs'; + +// -- Step 2: Change 'ddc' ID to 2 (the old 'ccs' ID) +// UPDATE collections_roles SET id = 2 WHERE name = 'ddc'; + +// -- Step 3: Change the temporary ID (99) to 3 (the old 'ddc' ID) +// UPDATE collections_roles SET id = 3 WHERE name = 'ccs'; + +// UPDATE collections_roles SET id = 99 WHERE name = 'bk'; +// UPDATE collections_roles SET id = 1 WHERE name = 'institutes'; +// UPDATE collections_roles SET id = 4 WHERE name = 'pacs'; +// UPDATE collections_roles SET id = 7 WHERE name = 'bk'; \ No newline at end of file diff --git a/database/migrations/dataset_7_collections.ts b/database/migrations/dataset_7_collections.ts index 7e2b3a9..b942111 100644 --- a/database/migrations/dataset_7_collections.ts +++ b/database/migrations/dataset_7_collections.ts @@ -5,7 +5,7 @@ export default class Collections extends BaseSchema { public async up() { this.schema.createTable(this.tableName, (table) => { - table.increments('id').defaultTo("nextval('collections_id_seq')"); + table.increments('id');//.defaultTo("nextval('collections_id_seq')"); table.integer('role_id').unsigned(); table .foreign('role_id', 'collections_role_id_foreign') @@ -25,6 +25,8 @@ export default class Collections extends BaseSchema { .onUpdate('CASCADE'); table.boolean('visible').notNullable().defaultTo(true); table.boolean('visible_publish').notNullable().defaultTo(true); + table.integer('left_id').unsigned(); + table.integer('right_id').unsigned(); }); } @@ -54,3 +56,31 @@ export default class Collections extends BaseSchema { // ON UPDATE CASCADE // ON DELETE CASCADE // ) + + +// change to normal intzeger: +// ALTER TABLE collections ALTER COLUMN id DROP DEFAULT; +// DROP SEQUENCE IF EXISTS collections_id_seq; + + +// ALTER TABLE collections +// ADD COLUMN left_id INTEGER; +// COMMENT ON COLUMN collections.left_id IS 'comment'; +// ALTER TABLE collections +// ADD COLUMN right_id INTEGER; +// COMMENT ON COLUMN collections.right_id IS 'comment'; + +// -- Step 1: Drop the existing default +// ALTER TABLE collections +// ALTER COLUMN visible DROP DEFAULT, +// ALTER COLUMN visible_publish DROP DEFAULT; + +// -- Step 2: Change column types with proper casting +// ALTER TABLE collections +// ALTER COLUMN visible TYPE smallint USING CASE WHEN visible THEN 1 ELSE 0 END, +// ALTER COLUMN visible_publish TYPE smallint USING CASE WHEN visible_publish THEN 1 ELSE 0 END; + +// -- Step 3: Set new defaults as smallint +// ALTER TABLE collections +// ALTER COLUMN visible SET DEFAULT 1, +// ALTER COLUMN visible_publish SET DEFAULT 1; \ No newline at end of file diff --git a/database/migrations/update_1_to_mime_types.ts b/database/migrations/update_1_to_mime_types.ts new file mode 100644 index 0000000..f09210c --- /dev/null +++ b/database/migrations/update_1_to_mime_types.ts @@ -0,0 +1,18 @@ +import { BaseSchema } from "@adonisjs/lucid/schema"; + +export default class AddAlternateMimetypeToMimeTypes extends BaseSchema { + protected tableName = 'mime_types'; + + public async up () { + this.schema.alterTable(this.tableName, (table) => { + table.string('alternate_mimetype').nullable(); + }); + } + + public async down () { + this.schema.alterTable(this.tableName, (table) => { + table.dropColumn('alternate_mimetype'); + }); + } +} +// ALTER TABLE "mime_types" ADD COLUMN "alternate_mimetype" VARCHAR(255) NULL \ No newline at end of file diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 8ef61c7..10d0f37 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,47 +1,74 @@ #!/bin/bash - -# # Run freshclam to update virus definitions -# freshclam - -# # Sleep for a few seconds to give ClamAV time to start -# sleep 5 - -# # Start the ClamAV daemon -# /etc/init.d/clamav-daemon start - -# bootstrap clam av service and clam av database updater set -m -function process_file() { - if [[ ! -z "$1" ]]; then - local SETTING_LIST=$(echo "$1" | tr ',' '\n' | grep "^[A-Za-z][A-Za-z]*=.*$") - local SETTING - - for SETTING in ${SETTING_LIST}; do - # Remove any existing copies of this setting. We do this here so that - # settings with multiple values (e.g. ExtraDatabase) can still be added - # multiple times below - local KEY=${SETTING%%=*} - sed -i $2 -e "/^${KEY} /d" - done +echo "Starting ClamAV services..." - for SETTING in ${SETTING_LIST}; do - # Split on first '=' - local KEY=${SETTING%%=*} - local VALUE=${SETTING#*=} - echo "${KEY} ${VALUE}" >> "$2" - done - fi -} -# process_file "${CLAMD_SETTINGS_CSV}" /etc/clamav/clamd.conf -# process_file "${FRESHCLAM_SETTINGS_CSV}" /etc/clamav/freshclam.conf +# Try to download database if missing +# if [ ! "$(ls -A /var/lib/clamav 2>/dev/null)" ]; then +# echo "Downloading ClamAV database (this may take a while)..." + +# # Simple freshclam run without complex config +# if freshclam --datadir=/var/lib/clamav --quiet; then +# echo "✓ Database downloaded successfully" +# else +# echo "⚠ Database download failed - creating minimal setup" +# # Create a dummy file so clamd doesn't immediately fail +# touch /var/lib/clamav/.dummy +# fi +# fi + +# Start freshclam daemon for automatic updates +echo "Starting freshclam daemon for automatic updates..." +# sg clamav -c "freshclam -d" & +# Added --daemon-notify to freshclam - This notifies clamd when the database updates +freshclam -d --daemon-notify=/etc/clamav/clamd.conf & +#freshclam -d & -# start in background -freshclam -d & # /etc/init.d/clamav-freshclam start & -clamd +# Start clamd in background +# Start clamd in foreground (so dumb-init can supervise it) # /etc/init.d/clamav-daemon start & -# change back to CMD of dockerfile +# Give freshclam a moment to start +sleep 2 + +# Start clamd daemon in background using sg +echo "Starting ClamAV daemon..." +# sg clamav -c "clamd" & +# Use sg to run clamd with proper group permissions +# sg clamav -c "clamd" & +# clamd --config-file=/etc/clamav/clamd.conf & +clamd & + + +# Give services time to start +echo "Waiting for services to initialize..." +sleep 8 + +# simple check +if pgrep clamd > /dev/null; then + echo "✓ ClamAV daemon is running" +else + echo "⚠ ClamAV daemon status uncertain, but continuing..." +fi + +# Check if freshclam daemon is running +if pgrep freshclam > /dev/null; then + echo "✓ Freshclam daemon is running" +else + echo "⚠ Freshclam daemon status uncertain, but continuing..." +fi + +# # Optional: Test socket connectivity +# if [ -S /var/run/clamav/clamd.socket ]; then +# echo "✓ ClamAV socket exists" +# else +# echo "⚠ WARNING: ClamAV socket not found - services may still be starting" +# fi + +# # change back to CMD of dockerfile +echo "✓ ClamAV setup complete" +echo "Starting main application..." +# exec dumb-init -- "$@" exec "$@" \ No newline at end of file diff --git a/docs/commands/index-datasets.md b/docs/commands/index-datasets.md new file mode 100644 index 0000000..baecfe6 --- /dev/null +++ b/docs/commands/index-datasets.md @@ -0,0 +1,278 @@ +# Dataset Indexing Command + +AdonisJS Ace command for indexing and synchronizing published datasets with OpenSearch for search functionality. + +## Overview + +The `index:datasets` command processes published datasets and creates/updates corresponding search index documents in OpenSearch. It intelligently compares modification timestamps to only re-index datasets when necessary, optimizing performance while maintaining search index accuracy. + +## Command Syntax + +```bash +node ace index:datasets [options] +``` + +## Options + +| Flag | Alias | Description | +|------|-------|-------------| +| `--publish_id <number>` | `-p` | Index a specific dataset by publish_id | + +## Usage Examples + +### Basic Operations + +```bash +# Index all published datasets that have been modified since last indexing +node ace index:datasets + +# Index a specific dataset by publish_id +node ace index:datasets --publish_id 231 +node ace index:datasets -p 231 +``` + +## How It Works + +### 1. **Dataset Selection** +The command processes datasets that meet these criteria: +- `server_state = 'published'` - Only published datasets +- Has preloaded `xmlCache` relationship for metadata transformation +- Optionally filtered by specific `publish_id` + +### 2. **Smart Update Detection** +For each dataset, the command: +- Checks if the dataset exists in the OpenSearch index +- Compares `server_date_modified` timestamps +- Only re-indexes if the dataset is newer than the indexed version + +### 3. **Document Processing** +The indexing process involves: +1. **XML Generation**: Creates structured XML from dataset metadata +2. **XSLT Transformation**: Converts XML to JSON using Saxon-JS processor +3. **Index Update**: Updates or creates the document in OpenSearch +4. **Logging**: Records success/failure for each operation + +## Index Structure + +### Index Configuration +- **Index Name**: `tethys-records` +- **Document ID**: Dataset `publish_id` +- **Refresh**: `true` (immediate availability) + +### Document Fields +The indexed documents contain: +- **Metadata Fields**: Title, description, authors, keywords +- **Identifiers**: DOI, publish_id, and other identifiers +- **Temporal Data**: Publication dates, coverage periods +- **Geographic Data**: Spatial coverage information +- **Technical Details**: Data formats, access information +- **Timestamps**: Creation and modification dates + +## Example Output + +### Successful Run +```bash +node ace index:datasets +``` +``` +Found 150 published datasets to process +Dataset with publish_id 231 successfully indexed +Dataset with publish_id 245 is up to date, skipping indexing +Dataset with publish_id 267 successfully indexed +An error occurred while indexing dataset with publish_id 289. Error: Invalid XML metadata +Processing completed: 148 indexed, 1 skipped, 1 error +``` + +### Specific Dataset +```bash +node ace index:datasets --publish_id 231 +``` +``` +Found 1 published dataset to process +Dataset with publish_id 231 successfully indexed +Processing completed: 1 indexed, 0 skipped, 0 errors +``` + +## Update Logic + +The command uses intelligent indexing to avoid unnecessary processing: + +| Condition | Action | Reason | +|-----------|--------|--------| +| Dataset not in index | ✅ Index | New dataset needs indexing | +| Dataset newer than indexed version | ✅ Re-index | Dataset has been updated | +| Dataset same/older than indexed version | ❌ Skip | Already up to date | +| OpenSearch document check fails | ✅ Index | Better safe than sorry | +| Invalid XML metadata | ❌ Skip + Log Error | Cannot process invalid data | + +### Timestamp Comparison +```typescript +// Example comparison logic +const existingModified = DateTime.fromMillis(Number(existingDoc.server_date_modified) * 1000); +const currentModified = dataset.server_date_modified; + +if (currentModified <= existingModified) { + // Skip - already up to date + return false; +} +// Proceed with indexing +``` + +## XML Transformation Process + +### 1. **XML Generation** +```xml +<?xml version="1.0" encoding="UTF-8" standalone="true"?> +<root> + <Dataset> + <!-- Dataset metadata fields --> + <title>Research Dataset Title + Dataset description... + + + +``` + +### 2. **XSLT Processing** +The command uses Saxon-JS with a compiled stylesheet (`solr.sef.json`) to transform XML to JSON: +```javascript +const result = await SaxonJS.transform({ + stylesheetText: proc, + destination: 'serialized', + sourceText: xmlString, +}); +``` + +### 3. **Final JSON Document** +```json +{ + "id": "231", + "title": "Research Dataset Title", + "description": "Dataset description...", + "authors": ["Author Name"], + "server_date_modified": 1634567890, + "publish_id": 231 +} +``` + +## Configuration Requirements + +### Environment Variables +```bash +# OpenSearch Configuration +OPENSEARCH_HOST=localhost:9200 + +# For production: +# OPENSEARCH_HOST=your-opensearch-cluster:9200 +``` + +### Required Files +- **XSLT Stylesheet**: `public/assets2/solr.sef.json` - Compiled Saxon-JS stylesheet for XML transformation + +### Database Relationships +The command expects these model relationships: +```typescript +// Dataset model must have: +@hasOne(() => XmlCache, { foreignKey: 'dataset_id' }) +public xmlCache: HasOne +``` + +## Error Handling + +The command handles various error scenarios gracefully: + +### Common Errors and Solutions + +| Error | Cause | Solution | +|-------|-------|----------| +| `XSLT transformation failed` | Invalid XML or missing stylesheet | Check XML structure and stylesheet path | +| `OpenSearch connection error` | Service unavailable | Verify OpenSearch is running and accessible | +| `JSON parse error` | Malformed transformation result | Check XSLT stylesheet output format | +| `Missing xmlCache relationship` | Data integrity issue | Ensure xmlCache exists for dataset | + +### Error Logging +```bash +# Typical error log entry +An error occurred while indexing dataset with publish_id 231. +Error: XSLT transformation failed: Invalid XML structure at line 15 +``` + +## Performance Considerations + +### Batch Processing +- Processes datasets sequentially to avoid overwhelming OpenSearch +- Each dataset is committed individually for reliability +- Failed indexing of one dataset doesn't stop processing others + +### Resource Usage +- **Memory**: XML/JSON transformations require temporary memory +- **Network**: OpenSearch API calls for each dataset +- **CPU**: XSLT transformations are CPU-intensive + +### Optimization Tips +```bash +# Index only recently modified datasets (run regularly) +node ace index:datasets + +# Index specific datasets when needed +node ace index:datasets --publish_id 231 + +# Consider running during off-peak hours for large batches +``` + +## Integration with Other Systems + +### Search Functionality +The indexed documents power: +- **Dataset Search**: Full-text search across metadata +- **Faceted Browsing**: Filter by authors, keywords, dates +- **Geographic Search**: Spatial query capabilities +- **Auto-complete**: Suggest dataset titles and keywords + +### Related Commands +- [`update:datacite`](update-datacite.md) - Often run after indexing to sync DOI metadata +- **Database migrations** - May require re-indexing after schema changes + +### API Integration +The indexed data is consumed by: +- **Search API**: `/api/search` endpoints +- **Browse API**: `/api/datasets` with filtering +- **Recommendations**: Related dataset suggestions + +## Monitoring and Maintenance + +### Regular Tasks +```bash +# Daily indexing (recommended cron job) +0 2 * * * cd /path/to/project && node ace index:datasets + +# Weekly full re-index (if needed) +0 3 * * 0 cd /path/to/project && node ace index:datasets --force +``` + +### Health Checks +- Monitor OpenSearch cluster health +- Check for failed indexing operations in logs +- Verify search functionality is working +- Compare dataset counts between database and index + +### Troubleshooting +```bash +# Check specific dataset indexing +node ace index:datasets --publish_id 231 + +# Verify OpenSearch connectivity +curl -X GET "localhost:9200/_cluster/health" + +# Check index statistics +curl -X GET "localhost:9200/tethys-records/_stats" +``` + +## Best Practices + +1. **Regular Scheduling**: Run the command regularly (daily) to keep the search index current +2. **Monitor Logs**: Watch for transformation errors or OpenSearch issues +3. **Backup Strategy**: Include OpenSearch indices in backup procedures +4. **Resource Management**: Monitor OpenSearch cluster resources during bulk operations +5. **Testing**: Verify search functionality after major indexing operations +6. **Coordination**: Run indexing before DataCite updates when both are needed \ No newline at end of file diff --git a/docs/commands/update-datacite.md b/docs/commands/update-datacite.md new file mode 100644 index 0000000..06041f0 --- /dev/null +++ b/docs/commands/update-datacite.md @@ -0,0 +1,216 @@ +# DataCite Update Command + +AdonisJS Ace command for updating DataCite DOI records for published datasets. + +## Overview + +The `update:datacite` command synchronizes your local dataset metadata with DataCite DOI records. It intelligently compares modification dates to only update records when necessary, reducing unnecessary API calls and maintaining data consistency. + +## Command Syntax + +```bash +node ace update:datacite [options] +``` + +## Options + +| Flag | Alias | Description | +|------|-------|-------------| +| `--publish_id ` | `-p` | Update a specific dataset by publish_id | +| `--force` | `-f` | Force update all records regardless of modification date | +| `--dry-run` | `-d` | Preview what would be updated without making changes | +| `--stats` | `-s` | Show detailed statistics for datasets that need updating | + +## Usage Examples + +### Basic Operations + +```bash +# Update all datasets that have been modified since their DOI was last updated +node ace update:datacite + +# Update a specific dataset +node ace update:datacite --publish_id 231 +node ace update:datacite -p 231 + +# Force update all datasets with DOIs (ignores modification dates) +node ace update:datacite --force +``` + +### Preview and Analysis + +```bash +# Preview what would be updated (dry run) +node ace update:datacite --dry-run + +# Show detailed statistics for datasets that need updating +node ace update:datacite --stats + +# Show stats for a specific dataset +node ace update:datacite --stats --publish_id 231 +``` + +### Combined Options + +```bash +# Dry run for a specific dataset +node ace update:datacite --dry-run --publish_id 231 + +# Show stats for all datasets (including up-to-date ones) +node ace update:datacite --stats --force +``` + +## Command Modes + +### 1. **Normal Mode** (Default) +Updates DataCite records for datasets that have been modified since their DOI was last updated. + +**Example Output:** +``` +Using DataCite API: https://api.test.datacite.org +Found 50 datasets to process +Dataset 231: Successfully updated DataCite record +Dataset 245: Up to date, skipping +Dataset 267: Successfully updated DataCite record +DataCite update completed. Updated: 15, Skipped: 35, Errors: 0 +``` + +### 2. **Dry Run Mode** (`--dry-run`) +Shows what would be updated without making any changes to DataCite. + +**Use Case:** Preview updates before running the actual command. + +**Example Output:** +``` +Dataset 231: Would update DataCite record (dry run) +Dataset 267: Would update DataCite record (dry run) +Dataset 245: Up to date, skipping +DataCite update completed. Updated: 2, Skipped: 1, Errors: 0 +``` + +### 3. **Stats Mode** (`--stats`) +Shows detailed information for each dataset that needs updating, including why it needs updating. + +**Use Case:** Debug synchronization issues, monitor dataset/DOI status, generate reports. + +**Example Output:** +``` +┌─ Dataset 231 ───────────────────────────────────────────────────────── +│ DOI Value: 10.21388/tethys.231 +│ DOI Status (DB): findable +│ DOI State (DataCite): findable +│ Dataset Modified: 2024-09-15T10:30:00.000Z +│ DOI Modified: 2024-09-10T08:15:00.000Z +│ Needs Update: YES - Dataset newer than DOI +└─────────────────────────────────────────────────────────────────────── + +┌─ Dataset 267 ───────────────────────────────────────────────────────── +│ DOI Value: 10.21388/tethys.267 +│ DOI Status (DB): findable +│ DOI State (DataCite): findable +│ Dataset Modified: 2024-09-18T14:20:00.000Z +│ DOI Modified: 2024-09-16T12:45:00.000Z +│ Needs Update: YES - Dataset newer than DOI +└─────────────────────────────────────────────────────────────────────── + +DataCite Stats Summary: 2 datasets need updating, 48 are up to date +``` + +## Update Logic + +The command uses intelligent update detection: + +1. **Compares modification dates**: Dataset `server_date_modified` vs DOI last modification date from DataCite +2. **Validates data integrity**: Checks for missing or future dates +3. **Handles API failures gracefully**: Updates anyway if DataCite info can't be retrieved +4. **Uses dual API approach**: DataCite REST API (primary) with MDS API fallback + +### When Updates Happen + +| Condition | Action | Reason | +|-----------|--------|--------| +| Dataset modified > DOI modified | ✅ Update | Dataset has newer changes | +| Dataset modified ≤ DOI modified | ❌ Skip | DOI is up to date | +| Dataset date in future | ❌ Skip | Invalid data, needs investigation | +| Dataset date missing | ✅ Update | Can't determine staleness | +| DataCite API error | ✅ Update | Better safe than sorry | +| `--force` flag used | ✅ Update | Override all logic | + +## Environment Configuration + +Required environment variables: + +```bash +# DataCite Credentials +DATACITE_USERNAME=your_username +DATACITE_PASSWORD=your_password + +# API Endpoints (environment-specific) +DATACITE_API_URL=https://api.test.datacite.org # Test environment +DATACITE_SERVICE_URL=https://mds.test.datacite.org # Test MDS + +DATACITE_API_URL=https://api.datacite.org # Production +DATACITE_SERVICE_URL=https://mds.datacite.org # Production MDS + +# Project Configuration +DATACITE_PREFIX=10.21388 # Your DOI prefix +BASE_DOMAIN=tethys.at # Your domain +``` + +## Error Handling + +The command handles various error scenarios: + +- **Invalid modification dates**: Logs errors but continues processing other datasets +- **DataCite API failures**: Falls back to MDS API, then to safe update +- **Missing DOI identifiers**: Skips datasets without DOI identifiers +- **Network issues**: Continues with next dataset after logging error + +## Integration + +The command integrates with: + +- **Dataset Model**: Uses `server_date_modified` for change detection +- **DatasetIdentifier Model**: Reads DOI values and status +- **OpenSearch Index**: Updates search index after DataCite update +- **DoiClient**: Handles all DataCite API interactions + +## Common Workflows + +### Daily Maintenance +```bash +# Update any datasets modified today +node ace update:datacite +``` + +### Pre-Deployment Check +```bash +# Check what would be updated before deployment +node ace update:datacite --dry-run +``` + +### Debugging Sync Issues +```bash +# Investigate why specific dataset isn't syncing +node ace update:datacite --stats --publish_id 231 +``` + +### Full Resync +```bash +# Force update all DOI records (use with caution) +node ace update:datacite --force +``` + +### Monitoring Report +```bash +# Generate sync status report +node ace update:datacite --stats > datacite-sync-report.txt +``` + +## Best Practices + +1. **Regular Updates**: Run daily or after bulk dataset modifications +2. **Test First**: Use `--dry-run` or `--stats` before bulk operations +3. **Monitor Logs**: Check for data integrity warnings +4. **Environment Separation**: Use correct API URLs for test vs production +5. **Rate Limiting**: The command handles DataCite rate limits automatically \ No newline at end of file diff --git a/freshclam.conf b/freshclam.conf index ee82a23..31992be 100644 --- a/freshclam.conf +++ b/freshclam.conf @@ -1,229 +1,47 @@ ## -## Example config file for freshclam -## Please read the freshclam.conf(5) manual before editing this file. +## Container-optimized freshclam configuration ## - -# Comment or remove the line below. - -# Path to the database directory. -# WARNING: It must match clamd.conf's directive! -# Default: hardcoded (depends on installation options) +# Database directory DatabaseDirectory /var/lib/clamav -# Path to the log file (make sure it has proper permissions) -# Default: disabled +# Log to stdout for container logging # UpdateLogFile /dev/stdout -# Maximum size of the log file. -# Value of 0 disables the limit. -# You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes) -# and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). -# in bytes just don't use modifiers. If LogFileMaxSize is enabled, -# log rotation (the LogRotate option) will always be enabled. -# Default: 1M -#LogFileMaxSize 2M - -# Log time with each message. -# Default: no +# Basic logging settings LogTime yes - -# Enable verbose logging. -# Default: no LogVerbose yes - -# Use system logger (can work together with UpdateLogFile). -# Default: no LogSyslog no -# Specify the type of syslog messages - please refer to 'man syslog' -# for facility names. -# Default: LOG_LOCAL6 -#LogFacility LOG_MAIL - -# Enable log rotation. Always enabled when LogFileMaxSize is enabled. -# Default: no -#LogRotate yes - -# This option allows you to save the process identifier of the daemon -# Default: disabled -#PidFile /var/run/freshclam.pid +# PID file location PidFile /var/run/clamav/freshclam.pid -# By default when started freshclam drops privileges and switches to the -# "clamav" user. This directive allows you to change the database owner. -# Default: clamav (may depend on installation options) +# Database owner DatabaseOwner node -# Use DNS to verify virus database version. Freshclam uses DNS TXT records -# to verify database and software versions. With this directive you can change -# the database verification domain. -# WARNING: Do not touch it unless you're configuring freshclam to use your -# own database verification domain. -# Default: current.cvd.clamav.net -#DNSDatabaseInfo current.cvd.clamav.net - -# Uncomment the following line and replace XY with your country -# code. See http://www.iana.org/cctld/cctld-whois.htm for the full list. -# You can use db.XY.ipv6.clamav.net for IPv6 connections. +# Mirror settings for Austria DatabaseMirror db.at.clamav.net - -# database.clamav.net is a round-robin record which points to our most -# reliable mirrors. It's used as a fall back in case db.XY.clamav.net is -# not working. DO NOT TOUCH the following line unless you know what you -# are doing. DatabaseMirror database.clamav.net -# How many attempts to make before giving up. -# Default: 3 (per mirror) -#MaxAttempts 5 - # With this option you can control scripted updates. It's highly recommended # to keep it enabled. # Default: yes -#ScriptedUpdates yes - -# By default freshclam will keep the local databases (.cld) uncompressed to -# make their handling faster. With this option you can enable the compression; -# the change will take effect with the next database update. -# Default: no -#CompressLocalDatabase no - -# With this option you can provide custom sources (http:// or file://) for -# database files. This option can be used multiple times. -# Default: no custom URLs -#DatabaseCustomURL http://myserver.com/mysigs.ndb -#DatabaseCustomURL file:///mnt/nfs/local.hdb - -# This option allows you to easily point freshclam to private mirrors. -# If PrivateMirror is set, freshclam does not attempt to use DNS -# to determine whether its databases are out-of-date, instead it will -# use the If-Modified-Since request or directly check the headers of the -# remote database files. For each database, freshclam first attempts -# to download the CLD file. If that fails, it tries to download the -# CVD file. This option overrides DatabaseMirror, DNSDatabaseInfo -# and ScriptedUpdates. It can be used multiple times to provide -# fall-back mirrors. -# Default: disabled -#PrivateMirror mirror1.mynetwork.com -#PrivateMirror mirror2.mynetwork.com +# Update settings +ScriptedUpdates yes # Number of database checks per day. # Default: 12 (every two hours) -#Checks 24 +Checks 12 -# Proxy settings -# Default: disabled -#HTTPProxyServer myproxy.com -#HTTPProxyPort 1234 -#HTTPProxyUsername myusername -#HTTPProxyPassword mypass - -# If your servers are behind a firewall/proxy which applies User-Agent -# filtering you can use this option to force the use of a different -# User-Agent header. -# Default: clamav/version_number -#HTTPUserAgent SomeUserAgentIdString - -# Use aaa.bbb.ccc.ddd as client address for downloading databases. Useful for -# multi-homed systems. -# Default: Use OS'es default outgoing IP address. -#LocalIPAddress aaa.bbb.ccc.ddd - -# Send the RELOAD command to clamd. -# Default: no -#NotifyClamd /path/to/clamd.conf - -# Run command after successful database update. -# Default: disabled -#OnUpdateExecute command - -# Run command when database update process fails. -# Default: disabled -#OnErrorExecute command - -# Run command when freshclam reports outdated version. -# In the command string %v will be replaced by the new version number. -# Default: disabled -#OnOutdatedExecute command - -# Don't fork into background. -# Default: no +# Don't fork (good for containers) Foreground no -# Enable debug messages in libclamav. -# Default: no -#Debug yes +# Connection timeouts +ConnectTimeout 60 +ReceiveTimeout 60 -# Timeout in seconds when connecting to database server. -# Default: 30 -#ConnectTimeout 60 +# Test databases before using them +TestDatabases yes -# Timeout in seconds when reading from database server. -# Default: 30 -#ReceiveTimeout 60 - -# With this option enabled, freshclam will attempt to load new -# databases into memory to make sure they are properly handled -# by libclamav before replacing the old ones. -# Default: yes -#TestDatabases yes - -# When enabled freshclam will submit statistics to the ClamAV Project about -# the latest virus detections in your environment. The ClamAV maintainers -# will then use this data to determine what types of malware are the most -# detected in the field and in what geographic area they are. -# Freshclam will connect to clamd in order to get recent statistics. -# Default: no -#SubmitDetectionStats /path/to/clamd.conf - -# Country of origin of malware/detection statistics (for statistical -# purposes only). The statistics collector at ClamAV.net will look up -# your IP address to determine the geographical origin of the malware -# reported by your installation. If this installation is mainly used to -# scan data which comes from a different location, please enable this -# option and enter a two-letter code (see http://www.iana.org/domains/root/db/) -# of the country of origin. -# Default: disabled -#DetectionStatsCountry country-code - -# This option enables support for our "Personal Statistics" service. -# When this option is enabled, the information on malware detected by -# your clamd installation is made available to you through our website. -# To get your HostID, log on http://www.stats.clamav.net and add a new -# host to your host list. Once you have the HostID, uncomment this option -# and paste the HostID here. As soon as your freshclam starts submitting -# information to our stats collecting service, you will be able to view -# the statistics of this clamd installation by logging into -# http://www.stats.clamav.net with the same credentials you used to -# generate the HostID. For more information refer to: -# http://www.clamav.net/documentation.html#cctts -# This feature requires SubmitDetectionStats to be enabled. -# Default: disabled -#DetectionStatsHostID unique-id - -# This option enables support for Google Safe Browsing. When activated for -# the first time, freshclam will download a new database file (safebrowsing.cvd) -# which will be automatically loaded by clamd and clamscan during the next -# reload, provided that the heuristic phishing detection is turned on. This -# database includes information about websites that may be phishing sites or -# possible sources of malware. When using this option, it's mandatory to run -# freshclam at least every 30 minutes. -# Freshclam uses the ClamAV's mirror infrastructure to distribute the -# database and its updates but all the contents are provided under Google's -# terms of use. See http://www.google.com/transparencyreport/safebrowsing -# and http://www.clamav.net/documentation.html#safebrowsing -# for more information. -# Default: disabled -#SafeBrowsing yes - -# This option enables downloading of bytecode.cvd, which includes additional -# detection mechanisms and improvements to the ClamAV engine. -# Default: enabled -#Bytecode yes - -# Download an additional 3rd party signature database distributed through -# the ClamAV mirrors. -# This option can be used multiple times. -#ExtraDatabase dbname1 -#ExtraDatabase dbname2 +# Enable bytecode signatures +Bytecode yes \ No newline at end of file diff --git a/index.d.ts b/index.d.ts index 8165192..f6767a1 100644 --- a/index.d.ts +++ b/index.d.ts @@ -183,3 +183,9 @@ declare module 'saxon-js' { export function transform(options: ITransformOptions): Promise | ITransformOutput; } + +declare global { + interface File { + sort_order?: number; + } + } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 609fd32..7cb57a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,30 +8,32 @@ "name": "myapp", "version": "1.0.0", "dependencies": { - "@adonisjs/auth": "^9.1.1", - "@adonisjs/core": "^6.3.1", + "@adonisjs/auth": "^9.2.4", + "@adonisjs/bodyparser": "^10.0.1", + "@adonisjs/core": "6.17.2", "@adonisjs/cors": "^2.2.1", - "@adonisjs/drive": "^2.3.0", - "@adonisjs/encore": "^1.0.0", - "@adonisjs/inertia": "^1.0.0-7", - "@adonisjs/lucid": "^21.1.0", + "@adonisjs/drive": "^3.2.0", + "@adonisjs/inertia": "^2.1.3", + "@adonisjs/lucid": "^21.5.1", "@adonisjs/mail": "^9.2.2", "@adonisjs/redis": "^9.1.0", - "@adonisjs/session": "^7.1.1", + "@adonisjs/session": "^7.5.0", "@adonisjs/shield": "^8.1.1", "@adonisjs/static": "^1.1.1", + "@adonisjs/vite": "^4.0.0", "@eidellev/adonis-stardust": "^3.0.0", "@fontsource/archivo-black": "^5.0.1", "@fontsource/inter": "^5.0.1", "@inertiajs/inertia": "^0.11.1", - "@inertiajs/vue3": "^1.0.0", - "@opensearch-project/opensearch": "^2.4.0", + "@inertiajs/vue3": "^2.0.3", + "@opensearch-project/opensearch": "^3.2.0", "@phc/format": "^1.0.0", - "@vinejs/vine": "^2.0.0", + "@poppinss/manager": "^5.0.2", + "@vinejs/vine": "^3.0.0", + "axios": "^1.7.9", "bcrypt": "^5.1.1", "bcryptjs": "^2.4.3", "clamscan": "^2.1.2", - "crypto": "^1.0.1", "dayjs": "^1.11.7", "deep-email-validator": "^0.1.21", "edge.js": "^6.0.1", @@ -47,7 +49,7 @@ "notiwind": "^2.0.0", "pg": "^8.9.0", "qrcode": "^1.5.3", - "redis": "^4.6.10", + "redis": "^5.0.0", "reflect-metadata": "^0.2.1", "saxon-js": "^2.5.0", "toastify-js": "^1.12.0", @@ -56,51 +58,48 @@ }, "devDependencies": { "@adonisjs/assembler": "^7.1.1", - "@adonisjs/tsconfig": "^1.2.1", - "@babel/core": "^7.20.12", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-decorators": "^7.20.13", - "@babel/plugin-transform-runtime": "^7.19.6", - "@babel/preset-env": "^7.20.2", - "@babel/preset-typescript": "^7.18.6", - "@japa/api-client": "^2.0.3", - "@japa/assert": "^3.0.0", - "@japa/plugin-adonisjs": "^3.0.0", - "@japa/runner": "^3.1.1", + "@adonisjs/tsconfig": "^1.4.0", + "@headlessui/vue": "^1.7.23", + "@japa/assert": "^4.0.1", + "@japa/plugin-adonisjs": "^4.0.0", + "@japa/runner": "^4.2.0", "@mdi/js": "^7.1.96", "@poppinss/utils": "^6.7.2", - "@swc/core": "^1.4.2", - "@symfony/webpack-encore": "^5.0.1", + "@swc/wasm": "^1.10.14", "@tailwindcss/forms": "^0.5.2", "@types/bcryptjs": "^2.4.6", "@types/clamscan": "^2.0.4", "@types/escape-html": "^1.0.4", - "@types/leaflet": "^1.9.3", + "@types/fs-extra": "^11.0.4", + "@types/leaflet": "^1.9.16", "@types/luxon": "^3.4.2", - "@types/node": "^22.5.5", + "@types/node": "^22.10.2", "@types/proxy-addr": "^2.0.0", "@types/qrcode": "^1.5.5", "@types/source-map-support": "^0.5.6", "@types/sprintf-js": "^1.1.4", "@types/supertest": "^6.0.2", + "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.13", "babel-preset-typescript-vue3": "^2.0.17", "chart.js": "^4.2.0", "dotenv-webpack": "^8.0.1", "eslint": "^8.57.1", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.1", "eslint-plugin-adonis": "^2.1.1", "eslint-plugin-prettier": "^5.0.0-alpha.2", + "hot-hook": "^0.4.0", "numeral": "^2.0.6", - "pinia": "^2.0.30", - "pino-pretty": "^11.2.2", + "pinia": "^3.0.2", + "pino-pretty": "^13.0.0", "postcss-loader": "^8.1.1", - "prettier": "^3.0.0", + "prettier": "^3.4.2", "supertest": "^6.3.3", - "tailwindcss": "^3.2.4", + "tailwindcss": "^3.4.17", "ts-loader": "^9.4.2", - "ts-node": "^10.9.2", - "typescript": "^5.1.3", + "ts-node-maintained": "^10.9.5", + "typescript": "~5.7", + "vite": "^6.0.11", "vue": "^3.4.26", "vue-facing-decorator": "^3.0.0", "vue-loader": "^17.0.1", @@ -109,9 +108,9 @@ } }, "node_modules/@adonisjs/ace": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@adonisjs/ace/-/ace-13.3.0.tgz", - "integrity": "sha512-68dveDFd766p69cBvK/MtOrOP0+YKYLeHspa9KLEWcWk9suPf3pbGkHQ2pwDnvLJxBPHk4932KbbSSzzpGNZGw==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@adonisjs/ace/-/ace-13.4.0.tgz", + "integrity": "sha512-7Wq6CpXmQm3m/6fKfzubAadCdiH2kKSni+K8s5KcTIFryKSqW+f06UAPOUwRJWqy80hnVlujAjveIsNJSPeJjA==", "license": "MIT", "dependencies": { "@poppinss/cliui": "^6.4.1", @@ -131,55 +130,23 @@ } }, "node_modules/@adonisjs/application": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-5.3.0.tgz", - "integrity": "sha512-AruZZXMgOdmmRxJEHUbXoqhgRavPfhkeIR2nQtGyxbn0PCNjqlGraq8ypuLINY1J+wNuH2tt0xCS98EDeMdTOQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.4.2.tgz", + "integrity": "sha512-gxyQgl1n7M/hv7ZKQOlTo2adBMehjEO0ssWSG3AGW2RXdCvkHQKlatFXMuXJMmGg2P1AWJX0LEiXey9+qxC9Uw==", "license": "MIT", - "peer": true, "dependencies": { - "@adonisjs/config": "^3.0.9", - "@adonisjs/env": "^3.0.9", - "@adonisjs/fold": "^8.2.0", - "@adonisjs/logger": "^4.1.5", - "@adonisjs/profiler": "^6.0.9", - "@poppinss/utils": "^5.0.0", - "semver": "^7.3.8" - } - }, - "node_modules/@adonisjs/application/node_modules/@poppinss/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-SpJL5p4Nx3bRCpCf62KagZLUHLvJD+VDylGpXAeP2G5qb3s6SSOBlpaFmer4GxdyTqLIUt0PRCzF1TbpNU+qZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/application/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, + "@poppinss/hooks": "^7.2.5", + "@poppinss/macroable": "^1.0.4", + "@poppinss/utils": "^6.9.3", + "glob-parent": "^6.0.2", + "tempura": "^0.4.1" + }, "engines": { - "node": ">=8" + "node": ">=18.16.0" + }, + "peerDependencies": { + "@adonisjs/config": "^5.0.0", + "@adonisjs/fold": "^10.0.0" } }, "node_modules/@adonisjs/assembler": { @@ -213,30 +180,14 @@ "typescript": "^4.0.0 || ^5.0.0" } }, - "node_modules/@adonisjs/assembler/node_modules/@adonisjs/env": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-6.1.0.tgz", - "integrity": "sha512-CzK+njXTH3EK+d/UJPqckyqWocOItmLgHIUbvhpd6WvveBnfv1Dz5j9H3k+ogHqThDSJCXu1RkaRAC+HNym9gA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@poppinss/utils": "^6.7.3", - "@poppinss/validator-lite": "^1.0.3", - "dotenv": "^16.4.5", - "split-lines": "^3.0.0" - }, - "engines": { - "node": ">=18.16.0" - } - }, "node_modules/@adonisjs/auth": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-9.3.0.tgz", - "integrity": "sha512-fJ6QNiCwWuIWONgwruPrzkkMK4EOj8YoCbrdnvHh6HdMXLTyp9xPR3xbbg2BTb1ssKxAnsaaNR+HPYfGLNYacw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-9.4.2.tgz", + "integrity": "sha512-Ifn838j9cQFxxin4bOURAiMrmwtu2g1NC5eYpw0p0QtD6hnnwOBqFiVWYcoYKquddiHKZ3x72mRd+x4MVIYzlQ==", "license": "MIT", "dependencies": { - "@adonisjs/presets": "^2.6.3", - "@poppinss/utils": "^6.8.3", + "@adonisjs/presets": "^2.6.4", + "@poppinss/utils": "^6.10.0", "basic-auth": "^2.0.1" }, "engines": { @@ -246,9 +197,9 @@ "@adonisjs/core": "^6.11.0", "@adonisjs/lucid": "^20.0.0 || ^21.0.1", "@adonisjs/session": "^7.4.1", - "@japa/api-client": "^2.0.3", + "@japa/api-client": "^2.0.3 || ^3.0.0", "@japa/browser-client": "^2.0.3", - "@japa/plugin-adonisjs": "^3.0.1" + "@japa/plugin-adonisjs": "^3.0.1 || ^4.0.0" }, "peerDependenciesMeta": { "@adonisjs/lucid": { @@ -268,80 +219,71 @@ } } }, - "node_modules/@adonisjs/config": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-3.0.9.tgz", - "integrity": "sha512-f+wzrc+0HLvhJyYGEMV2QTHtyJ8sI3PKvH9h/baW/iF8UO3KF+llHH0Cf3/M5dYnpdz9rnmj0VtdTaIDfxrgGg==", + "node_modules/@adonisjs/bodyparser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@adonisjs/bodyparser/-/bodyparser-10.1.0.tgz", + "integrity": "sha512-sQVi1WASKSONr6DDG0YGf4rcd7Hfm9D5fdAqGcH1NWUfVP+2+6ogg0Z++X0a4wRbS7bU3TthTDmMX2n+839Cww==", "license": "MIT", - "peer": true, "dependencies": { - "@poppinss/utils": "^5.0.0" - } - }, - "node_modules/@adonisjs/config/node_modules/@poppinss/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-SpJL5p4Nx3bRCpCf62KagZLUHLvJD+VDylGpXAeP2G5qb3s6SSOBlpaFmer4GxdyTqLIUt0PRCzF1TbpNU+qZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", + "@paralleldrive/cuid2": "^2.2.2", + "@poppinss/macroable": "^1.0.4", + "@poppinss/multiparty": "^2.0.1", + "@poppinss/utils": "^6.9.3", + "@types/qs": "^6.9.18", "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" + "file-type": "^20.5.0", + "inflation": "^2.1.0", + "media-typer": "^1.1.0", + "qs": "^6.14.0", + "raw-body": "^3.0.0" + }, + "engines": { + "node": ">=18.16.0" + }, + "peerDependencies": { + "@adonisjs/http-server": "^7.4.0" } }, - "node_modules/@adonisjs/config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@adonisjs/config": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-5.0.3.tgz", + "integrity": "sha512-dO7gkYxZsrsnR8n7d5KUpyi+Q5c6BnV2rmFDqEmEjz5AkOZLLzJJJbeHgMb+M27le7ifEUoa8MRu6RED8NMsJg==", "license": "MIT", - "peer": true, + "dependencies": { + "@poppinss/utils": "^6.9.4" + }, "engines": { - "node": ">=8" + "node": ">=18.16.0" } }, "node_modules/@adonisjs/core": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-6.17.0.tgz", - "integrity": "sha512-x78xF4VpTBi7bbBUvMXREbUddz2Ts3Ypz+WUp/D1R0YnA4lE8x+lwGox10SZAe+izQ41KkZlGKY24RYImFkLEg==", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-6.17.2.tgz", + "integrity": "sha512-POT5COID8Z3j37+Dd7Y1EfG01Q6+HPY/tGcSb0Y97W2VIPkFjqcW2ooTE4wFT09u7coNohtXJa19a0feMz9ncw==", "license": "MIT", "dependencies": { "@adonisjs/ace": "^13.3.0", "@adonisjs/application": "^8.3.1", - "@adonisjs/bodyparser": "^10.0.2", + "@adonisjs/bodyparser": "^10.0.3", "@adonisjs/config": "^5.0.2", "@adonisjs/encryption": "^6.0.2", - "@adonisjs/env": "^6.1.0", + "@adonisjs/env": "^6.1.1", "@adonisjs/events": "^9.0.2", "@adonisjs/fold": "^10.1.3", "@adonisjs/hash": "^9.0.5", "@adonisjs/health": "^2.0.0", "@adonisjs/http-server": "^7.4.0", "@adonisjs/logger": "^6.0.5", - "@adonisjs/repl": "^4.0.1", - "@antfu/install-pkg": "^0.5.0", + "@adonisjs/repl": "^4.1.0", + "@antfu/install-pkg": "^1.0.0", "@paralleldrive/cuid2": "^2.2.2", - "@poppinss/colors": "^4.1.3", - "@poppinss/dumper": "^0.6.1", - "@poppinss/macroable": "^1.0.3", - "@poppinss/utils": "^6.8.3", + "@poppinss/colors": "^4.1.4", + "@poppinss/dumper": "^0.6.2", + "@poppinss/macroable": "^1.0.4", + "@poppinss/utils": "^6.9.2", "@sindresorhus/is": "^7.0.1", "@types/he": "^1.2.3", - "error-stack-parser-es": "^0.1.5", + "error-stack-parser-es": "^1.0.5", "he": "^1.2.0", "parse-imports": "^2.2.1", "pretty-hrtime": "^1.0.3", @@ -380,64 +322,73 @@ } } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/application": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.3.1.tgz", - "integrity": "sha512-hfZBgZ23BQAXvoSHDkc/I0hTSXyFVxypNqHPQ/WCk4VoWlBVWVgGaGnHLvIGhrZ3RMvyoC5NBgC0PR5G+/fGSw==", + "node_modules/@adonisjs/core/node_modules/@antfu/install-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", "license": "MIT", "dependencies": { - "@poppinss/hooks": "^7.2.3", - "@poppinss/macroable": "^1.0.2", - "@poppinss/utils": "^6.7.3", - "glob-parent": "^6.0.2", - "tempura": "^0.4.0" + "package-manager-detector": "^1.3.0", + "tinyexec": "^1.0.1" }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@adonisjs/core/node_modules/package-manager-detector": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", + "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "license": "MIT" + }, + "node_modules/@adonisjs/core/node_modules/tinyexec": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "license": "MIT" + }, + "node_modules/@adonisjs/cors": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@adonisjs/cors/-/cors-2.2.1.tgz", + "integrity": "sha512-qnrSG8ylpgTeZBOYEN3yXxY0PBUEg1KGDhgn9VKVFGxLKT+o9GGVOSZxUK3wG341B1zB9w5vuZN1z4M0Jitb6g==", + "license": "MIT", "engines": { "node": ">=18.16.0" }, "peerDependencies": { - "@adonisjs/config": "^5.0.0", - "@adonisjs/fold": "^10.0.0" + "@adonisjs/core": "^6.2.0" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/bodyparser": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@adonisjs/bodyparser/-/bodyparser-10.0.2.tgz", - "integrity": "sha512-dkbn+DK5B1dODTwk5367gHPhaD4ZIoGon/jvq47iX2cnHjk3a0SyQrBEjoFhnrNkVOJZ76I3OJ3oixqgMcE+yA==", + "node_modules/@adonisjs/drive": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-3.4.1.tgz", + "integrity": "sha512-oDYY4wJ7wDMlO4E+dZPYBu+T3Av7Mj+JL8+J33qgyxtiJylnZgoZDuRfFjZZix/bFNNuWX2sLwTMnyiDcK+YsA==", "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "@poppinss/macroable": "^1.0.2", - "@poppinss/multiparty": "^2.0.1", - "@poppinss/utils": "^6.7.3", - "@types/qs": "^6.9.15", - "bytes": "^3.1.2", - "file-type": "^19.0.0", - "inflation": "^2.1.0", - "media-typer": "^1.1.0", - "qs": "^6.12.1", - "raw-body": "^2.5.2" + "flydrive": "^1.1.0" }, "engines": { - "node": ">=18.16.0" + "node": ">=20.6.0" }, "peerDependencies": { - "@adonisjs/http-server": "^7.0.2" - } - }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/config": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-5.0.2.tgz", - "integrity": "sha512-NXjFqDHNGRTZ1EnA4zr20GFEt7qw/JvZ4ZV8/PzFyVc7dPoFprpoyE3bw7kmlKHhcQdBbF7YXCGB4q+HQUnqiQ==", - "license": "MIT", - "dependencies": { - "@poppinss/utils": "^6.7.3" + "@adonisjs/core": "^6.2.0", + "@aws-sdk/client-s3": "^3.577.0", + "@aws-sdk/s3-request-presigner": "^3.577.0", + "@google-cloud/storage": "^7.10.2" }, - "engines": { - "node": ">=18.16.0" + "peerDependenciesMeta": { + "@aws-sdk/client-s3": { + "optional": true + }, + "@aws-sdk/s3-request-presigner": { + "optional": true + }, + "@google-cloud/storage": { + "optional": true + } } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/encryption": { + "node_modules/@adonisjs/encryption": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@adonisjs/encryption/-/encryption-6.0.2.tgz", "integrity": "sha512-37XqVPsZi6zXMbC0Me1/qlcTP0uE+KAtYOFx7D7Tvtz377NL/6gqxqgpW/BopgOSD+CVDXjzO/Wx3M2UrbkJRQ==", @@ -449,22 +400,22 @@ "node": ">=18.16.0" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/env": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-6.1.0.tgz", - "integrity": "sha512-CzK+njXTH3EK+d/UJPqckyqWocOItmLgHIUbvhpd6WvveBnfv1Dz5j9H3k+ogHqThDSJCXu1RkaRAC+HNym9gA==", + "node_modules/@adonisjs/env": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-6.2.0.tgz", + "integrity": "sha512-DZ7zQ4sBhzWftjU/SxJ7BstimrEiByCvmtAcMNDpDjOtJnR50172PRz1X7KjM3EqjCVrB19izzRVx/rmpCRPOA==", "license": "MIT", "dependencies": { - "@poppinss/utils": "^6.7.3", - "@poppinss/validator-lite": "^1.0.3", - "dotenv": "^16.4.5", + "@poppinss/utils": "^6.9.2", + "@poppinss/validator-lite": "^2.1.0", + "dotenv": "^16.4.7", "split-lines": "^3.0.0" }, "engines": { "node": ">=18.16.0" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/events": { + "node_modules/@adonisjs/events": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@adonisjs/events/-/events-9.0.2.tgz", "integrity": "sha512-qZn2e9V9C8tF4MNqEWv5JGxMG7gcHSJM8RncGpjuJ4cwFwd2jF4xrN6wkCprTVwoyZSxNS0Cp9NkAonySjG5vg==", @@ -482,7 +433,7 @@ "@adonisjs/fold": "^10.0.1" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/events/node_modules/@sindresorhus/is": { + "node_modules/@adonisjs/events/node_modules/@sindresorhus/is": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.3.1.tgz", "integrity": "sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==", @@ -494,143 +445,38 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/fold": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@adonisjs/fold/-/fold-10.1.3.tgz", - "integrity": "sha512-wzeuWMXx9SoJkNO4ycoyfxzoSyyMy3umVxb9cbzeWR/sYNVgi50l+vgJc634+lxpCE0RFTpxCv1M235EWDF9SQ==", + "node_modules/@adonisjs/fold": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@adonisjs/fold/-/fold-10.2.0.tgz", + "integrity": "sha512-VDBGrVz2viaCsmONLKYpMMeP3ds+fw+7kofeF/z9ic6cB3d7BLEB8VcIdGkfY0FCBbLK2Btee1tNPuUF1uMlmQ==", "license": "MIT", "dependencies": { - "@poppinss/utils": "^6.8.3" + "@poppinss/utils": "^7.0.0-next.1", + "parse-imports": "^2.2.1" }, "engines": { "node": ">=18.16.0" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/http-server": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.4.0.tgz", - "integrity": "sha512-2Me8ytUu0Sm0jYJs2SAiYQX3ECF6clOJwPE04cswsAwEnqSFLZkflD3c6rApjLjZO6P1wFlo090HNaZCFrlcMQ==", + "node_modules/@adonisjs/fold/node_modules/@poppinss/utils": { + "version": "7.0.0-next.3", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-7.0.0-next.3.tgz", + "integrity": "sha512-Z+3kolI/gdjTQRJWRiZTEk6r6QOeGLesfmdc8ISSeHlyUg0mTnVdi08/rwOcRJD6dLdwBGTDUf7lK2K7GpT4ww==", "license": "MIT", "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "@poppinss/macroable": "^1.0.3", - "@poppinss/matchit": "^3.1.2", - "@poppinss/middleware": "^3.2.4", - "@poppinss/utils": "^6.8.3", - "@sindresorhus/is": "^7.0.1", - "accepts": "^1.3.8", - "content-disposition": "^0.5.4", - "cookie": "^1.0.2", - "destroy": "^1.2.0", - "encodeurl": "^2.0.0", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "mime-types": "^2.1.35", - "on-finished": "^2.4.1", - "proxy-addr": "^2.0.7", - "qs": "^6.13.1", - "tmp-cache": "^1.1.0", - "type-is": "^1.6.18", - "vary": "^1.1.2", - "youch": "^3.3.4" - }, - "engines": { - "node": ">=18.16.0" - }, - "peerDependencies": { - "@adonisjs/application": "^8.0.2", - "@adonisjs/encryption": "^6.0.0", - "@adonisjs/events": "^9.0.0", - "@adonisjs/fold": "^10.0.1", - "@adonisjs/logger": "^6.0.1" + "@poppinss/exception": "^1.2.1", + "@poppinss/object-builder": "^1.1.0", + "@poppinss/string": "^1.6.0", + "@poppinss/types": "^1.1.0", + "flattie": "^1.1.1", + "safe-stable-stringify": "^2.5.0", + "secure-json-parse": "^4.0.0" } }, - "node_modules/@adonisjs/core/node_modules/@adonisjs/logger": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-6.0.5.tgz", - "integrity": "sha512-1QmbLPNC636MeJzqflMA64lUnAn5dbb7W0YQ/ea33papnNqGOfvDQuxqqKlzM6ww9jPZlXTIf/3t7KAWlfHCfQ==", - "license": "MIT", - "dependencies": { - "@poppinss/utils": "^6.8.3", - "abstract-logging": "^2.0.1", - "pino": "^9.5.0" - }, - "engines": { - "node": ">=18.16.0" - } - }, - "node_modules/@adonisjs/core/node_modules/@antfu/install-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.5.0.tgz", - "integrity": "sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==", - "license": "MIT", - "dependencies": { - "package-manager-detector": "^0.2.5", - "tinyexec": "^0.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@adonisjs/core/node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@adonisjs/core/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@adonisjs/core/node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@adonisjs/core/node_modules/pino": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz", - "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/@adonisjs/core/node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "license": "MIT" - }, - "node_modules/@adonisjs/core/node_modules/process-warning": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz", - "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==", + "node_modules/@adonisjs/fold/node_modules/secure-json-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", + "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==", "funding": [ { "type": "github", @@ -641,268 +487,23 @@ "url": "https://opencollective.com/fastify" } ], - "license": "MIT" - }, - "node_modules/@adonisjs/core/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/@adonisjs/cors": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@adonisjs/cors/-/cors-2.2.1.tgz", - "integrity": "sha512-qnrSG8ylpgTeZBOYEN3yXxY0PBUEg1KGDhgn9VKVFGxLKT+o9GGVOSZxUK3wG341B1zB9w5vuZN1z4M0Jitb6g==", - "license": "MIT", - "engines": { - "node": ">=18.16.0" - }, - "peerDependencies": { - "@adonisjs/core": "^6.2.0" - } - }, - "node_modules/@adonisjs/drive": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-2.3.0.tgz", - "integrity": "sha512-3V1kBe2qB/860KcS+dDonv8Xya2YDBdR7291pQgObJeTbV50Vy8RhwdOwtU7ybRfN2kh/svdC4238JGpbQOR9w==", - "license": "MIT", - "dependencies": { - "@poppinss/manager": "^5.0.2", - "@poppinss/utils": "^5.0.0", - "@types/fs-extra": "^9.0.13", - "etag": "^1.8.1", - "fs-extra": "^10.1.0", - "memfs": "^3.4.7" - }, - "peerDependencies": { - "@adonisjs/application": "^5.0.0", - "@adonisjs/http-server": "^5.0.0" - } - }, - "node_modules/@adonisjs/drive/node_modules/@poppinss/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-SpJL5p4Nx3bRCpCf62KagZLUHLvJD+VDylGpXAeP2G5qb3s6SSOBlpaFmer4GxdyTqLIUt0PRCzF1TbpNU+qZw==", - "license": "MIT", - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/drive/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@adonisjs/drive/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@adonisjs/encore": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@adonisjs/encore/-/encore-1.0.0.tgz", - "integrity": "sha512-pDl1sE3QguS3q94UklSoA5oCU5PTS1fuI9OEVnjo8B4ruI/wXBwuXDEAofYictiE3sXBM4+6MmxbI25MaL9DEA==", - "license": "MIT", - "dependencies": { - "@poppinss/utils": "^6.7.1", - "edge-error": "^4.0.1", - "stringify-attributes": "^4.0.0" - }, - "peerDependencies": { - "@adonisjs/core": "^6.2.1", - "edge.js": "^6.0.1" - } - }, - "node_modules/@adonisjs/encryption": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@adonisjs/encryption/-/encryption-4.0.8.tgz", - "integrity": "sha512-zMWbIESPHXafsbiLJyON/hlRYwrTIA3PuTil7xC8W4ngC36PgWe86Ra0x0t961u1We/LaSGkT8Vn93DymqB3aA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/utils": "^4.0.3" - }, - "peerDependencies": { - "@adonisjs/application": "^5.0.0" - } - }, - "node_modules/@adonisjs/encryption/node_modules/@poppinss/utils": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-4.0.4.tgz", - "integrity": "sha512-6LS3mofSVB9IQZqofA4rX6KVVcCpdwUQuNe4efHqOTzgD/Q5HTVvDP0vKg1m994QlzJs4aLW1JwXVcNCThEh4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/encryption/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@adonisjs/env": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-3.0.9.tgz", - "integrity": "sha512-9lxGmOQuF4FpUQ6NIwL/YQumaXG+2Wt8jQlQptplSUTasy6DHSEp7/SYvtC2RD9vxwn4gsptNCo+f8YRiqUvwQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/utils": "^4.0.2", - "dotenv": "^16.0.0", - "validator": "^13.7.0" - } - }, - "node_modules/@adonisjs/env/node_modules/@poppinss/utils": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-4.0.4.tgz", - "integrity": "sha512-6LS3mofSVB9IQZqofA4rX6KVVcCpdwUQuNe4efHqOTzgD/Q5HTVvDP0vKg1m994QlzJs4aLW1JwXVcNCThEh4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/env/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@adonisjs/fold": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@adonisjs/fold/-/fold-8.2.0.tgz", - "integrity": "sha512-Uoo2HPp4SShIkGOF3+p3gT09W3j0zpkK+fOpPyYPTqYm7CWAunklTlowqX45b6CAVb5DCcORDUB8ia4D1ijeKg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/utils": "^4.0.4" - } - }, - "node_modules/@adonisjs/fold/node_modules/@poppinss/utils": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-4.0.4.tgz", - "integrity": "sha512-6LS3mofSVB9IQZqofA4rX6KVVcCpdwUQuNe4efHqOTzgD/Q5HTVvDP0vKg1m994QlzJs4aLW1JwXVcNCThEh4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/fold/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } + "license": "BSD-3-Clause" }, "node_modules/@adonisjs/hash": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-9.0.5.tgz", - "integrity": "sha512-oY8PafBrdGsr5UY8cAzzxPCtehZDW7KsPcI47dZpjydOdL/PQrT4liX+cGujL6mSbi3JEgQLBgBs/+SlPFvCrg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-9.1.1.tgz", + "integrity": "sha512-ZkRguwjAp4skKvKDdRAfdJ2oqQ0N7p9l3sioyXO1E8o0WcsyDgEpsTQtuVNoIdMiw4sn4gJlmL3nyF4BcK1ZDQ==", "license": "MIT", "dependencies": { "@phc/format": "^1.0.0", - "@poppinss/utils": "^6.8.3" + "@poppinss/utils": "^6.9.3" }, "engines": { "node": ">=20.6.0" }, "peerDependencies": { - "argon2": "^0.31.2 || ^0.41.0", - "bcrypt": "^5.1.1" + "argon2": "^0.31.2 || ^0.41.0 || ^0.43.0", + "bcrypt": "^5.1.1 || ^6.0.0" }, "peerDependenciesMeta": { "argon2": { @@ -927,88 +528,57 @@ } }, "node_modules/@adonisjs/http-server": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-5.12.0.tgz", - "integrity": "sha512-+9cw/DRlLO2NSoHsccmMe3pFf6c0/8INds2yf73ZAZOmzUROb9DQaXHocJ/iwHX9EVxtDuKWDc5z0jI1SYdqEA==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.7.0.tgz", + "integrity": "sha512-qW1wsp7f1BqRO2qmJ8laUaq8vnLjEvhgkMusLEa2ju6RBMMsph5w3cEDTXAwQO8fSSqNXmRTzPRQ1lUm/FXq0A==", "license": "MIT", - "peer": true, "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", + "@poppinss/macroable": "^1.0.4", "@poppinss/matchit": "^3.1.2", - "@poppinss/utils": "^5.0.0", + "@poppinss/middleware": "^3.2.5", + "@poppinss/utils": "^6.10.0", + "@sindresorhus/is": "^7.0.2", "accepts": "^1.3.8", - "co-compose": "^7.0.2", "content-disposition": "^0.5.4", - "cookie": "^0.5.0", + "cookie": "^1.0.2", "destroy": "^1.2.0", - "encodeurl": "^1.0.2", + "encodeurl": "^2.0.0", "etag": "^1.8.1", "fresh": "^0.5.2", - "haye": "^3.0.0", - "macroable": "^7.0.2", - "mime-types": "^2.1.35", - "ms": "^2.1.3", + "mime-types": "^3.0.1", "on-finished": "^2.4.1", - "pluralize": "^8.0.0", "proxy-addr": "^2.0.7", - "qs": "^6.11.0", + "qs": "^6.14.0", "tmp-cache": "^1.1.0", - "type-is": "^1.6.18", - "vary": "^1.1.2" + "type-is": "^2.0.1", + "vary": "^1.1.2", + "youch": "^3.3.4" + }, + "engines": { + "node": ">=18.16.0" }, "peerDependencies": { - "@adonisjs/application": "^5.0.0", - "@adonisjs/encryption": "^4.0.0" - } - }, - "node_modules/@adonisjs/http-server/node_modules/@poppinss/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-SpJL5p4Nx3bRCpCf62KagZLUHLvJD+VDylGpXAeP2G5qb3s6SSOBlpaFmer4GxdyTqLIUt0PRCzF1TbpNU+qZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/http-server/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "@adonisjs/application": "^8.0.2", + "@adonisjs/encryption": "^6.0.0", + "@adonisjs/events": "^9.0.0", + "@adonisjs/fold": "^10.0.1", + "@adonisjs/logger": "^6.0.1" } }, "node_modules/@adonisjs/inertia": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@adonisjs/inertia/-/inertia-1.2.4.tgz", - "integrity": "sha512-brYEkXn7ZNv394Bvqewlh9anoxLnW8yQ8beyJz14I4ylZmEyyOcxis3JpobpUzlpWHGLAU/zssEqpJL5AXFcmg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@adonisjs/inertia/-/inertia-2.1.3.tgz", + "integrity": "sha512-ah05RXq5xb5FhqvLYQd1CU0UCrhaxC2U+xAftw1qPMXzx0jzX7DBjEK6kr5CEfM8PLOdt8gnOVmbDBsVyNSzbg==", "license": "MIT", "dependencies": { "@poppinss/utils": "^6.8.3", - "@tuyau/utils": "^0.0.4", + "@tuyau/utils": "^0.0.6", "crc-32": "^1.2.2", "edge-error": "^4.0.1", "html-entities": "^2.5.2", "locate-path": "^7.2.0", - "qs": "^6.13.0" + "qs": "^6.13.1" }, "engines": { "node": ">=20.6.0" @@ -1016,7 +586,7 @@ "peerDependencies": { "@adonisjs/core": "^6.9.1", "@adonisjs/session": "^7.4.0", - "@adonisjs/vite": "^3.0.0", + "@adonisjs/vite": "^4.0.0", "@japa/api-client": "^2.0.0", "edge.js": "^6.0.0" }, @@ -1027,72 +597,37 @@ } }, "node_modules/@adonisjs/logger": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-4.1.6.tgz", - "integrity": "sha512-lmnx/wGvxnlHLuUEWQ+VpUQuKBEKumdutNWZPythGP/VpBRzunypntDb7O9XfauPva6B6Z9WVjr2+v3ElTcKPQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-6.0.6.tgz", + "integrity": "sha512-r5mLmmklSezzu3cu9QaXle2/gPNrgKpiIo+utYlwV3ITsW5JeIX/xcwwMTNM/9f1zU+SwOj5NccPTEFD3feRaw==", "license": "MIT", - "peer": true, "dependencies": { - "@poppinss/utils": "^5.0.0", - "@types/pino": "^6.3.12", + "@poppinss/utils": "^6.9.2", "abstract-logging": "^2.0.1", - "pino": "^6.14.0" - } - }, - "node_modules/@adonisjs/logger/node_modules/@poppinss/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-SpJL5p4Nx3bRCpCf62KagZLUHLvJD+VDylGpXAeP2G5qb3s6SSOBlpaFmer4GxdyTqLIUt0PRCzF1TbpNU+qZw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/logger/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, + "pino": "^9.6.0" + }, "engines": { - "node": ">=8" + "node": ">=18.16.0" } }, "node_modules/@adonisjs/lucid": { - "version": "21.6.0", - "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-21.6.0.tgz", - "integrity": "sha512-wEocH/PsAT4VVTS5qz65VvxDJqEJCZPzTMmVldddNhM9Yiwc5mr5Nu+UQp9Pfnx2Jp3o+nicnF0IM6thJyb6lg==", + "version": "21.8.0", + "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-21.8.0.tgz", + "integrity": "sha512-AgS3l/J70q0K1ZTAbNVQTZuQWvCDwnj6a2rXCFu/aYRtIdbnGPLV0kIQ76WbdtlstUnKj8GFY/JNwok1TuTVVg==", "license": "MIT", "dependencies": { - "@adonisjs/presets": "^2.6.3", - "@faker-js/faker": "^9.3.0", - "@poppinss/hooks": "^7.2.4", - "@poppinss/macroable": "^1.0.3", - "@poppinss/utils": "^6.8.3", + "@adonisjs/presets": "^2.6.4", + "@faker-js/faker": "^9.9.0", + "@poppinss/hooks": "^7.2.6", + "@poppinss/macroable": "^1.0.5", + "@poppinss/utils": "^6.10.0", "fast-deep-equal": "^3.1.3", "igniculus": "^1.5.0", "kleur": "^4.1.5", "knex": "^3.1.0", "knex-dynamic-connection": "^3.2.0", "pretty-hrtime": "^1.0.3", - "qs": "^6.13.1", + "qs": "^6.14.0", "slash": "^5.1.0", "tarn": "^3.0.2" }, @@ -1165,94 +700,44 @@ } } }, - "node_modules/@adonisjs/profiler": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@adonisjs/profiler/-/profiler-6.0.9.tgz", - "integrity": "sha512-V1bJPPDTn05NzAKUEICnYtWi9fC8NownUToaqxVkWOUovYBO6ubt06qtH1Uv9zvUjB2PKHUn+ieDAOgyHle09A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/utils": "^4.0.3", - "jest-worker": "^27.5.1" - }, - "peerDependencies": { - "@adonisjs/logger": "^4.0.0" - } - }, - "node_modules/@adonisjs/profiler/node_modules/@poppinss/utils": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-4.0.4.tgz", - "integrity": "sha512-6LS3mofSVB9IQZqofA4rX6KVVcCpdwUQuNe4efHqOTzgD/Q5HTVvDP0vKg1m994QlzJs4aLW1JwXVcNCThEh4g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@poppinss/file-generator": "^1.0.2", - "@types/bytes": "^3.1.1", - "@types/he": "^1.1.2", - "bytes": "^3.1.2", - "change-case": "^4.1.2", - "cuid": "^2.1.8", - "flattie": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "he": "^1.2.0", - "kind-of": "^6.0.3", - "lodash": "^4.17.21", - "ms": "^2.1.3", - "pluralize": "^8.0.0", - "require-all": "^3.0.0", - "resolve-from": "^5.0.0", - "slugify": "^1.6.5", - "truncatise": "0.0.8" - } - }, - "node_modules/@adonisjs/profiler/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@adonisjs/redis": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@adonisjs/redis/-/redis-9.1.0.tgz", - "integrity": "sha512-cesml/1Libmwm2yjmbbp2xtyGp+LBNkqCe9ehSmPFM+5puRRbJkqNf6ZaHFQfKdjQU1Y7qR9xtyf5uHLU/K0uw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@adonisjs/redis/-/redis-9.2.0.tgz", + "integrity": "sha512-DUI9NrHDLZ2ISNjMlqWbKJT99ZYj1ZmvhNFTfhVs9lc7K2KJmNKZfK8Y85a8eN7q+ZYMBYSu1uRemxGs6xRaYw==", "license": "MIT", "dependencies": { - "@poppinss/utils": "^6.7.3", - "emittery": "^1.0.3", - "ioredis": "^5.4.1" + "@poppinss/utils": "^6.9.2", + "emittery": "^1.1.0", + "ioredis": "^5.4.2" }, "engines": { - "node": ">=18.16.0" + "node": ">=20.6.0" }, "peerDependencies": { "@adonisjs/core": "^6.2.0" } }, "node_modules/@adonisjs/repl": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-4.0.1.tgz", - "integrity": "sha512-fgDRC5I8RBKHzsJPM4rRQF/OWI0K9cNihCIf4yHdqQt3mhFqWSOUjSi4sXWykdICLiddmyBO86au7i0d0dj5vQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-4.1.2.tgz", + "integrity": "sha512-NnczRJusl0082GOjEFYwObW/yBGJtpfJFnkFCQdQ6eykgBHVNYaY6qstfob+l1bedetRj0hrDY6YfsWMkA0MCg==", "license": "MIT", "dependencies": { - "@poppinss/colors": "^4.1.2", - "string-width": "^7.1.0" + "@poppinss/colors": "^4.1.5", + "string-width": "^7.2.0" }, "engines": { "node": ">=18.16.0" } }, "node_modules/@adonisjs/session": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@adonisjs/session/-/session-7.5.0.tgz", - "integrity": "sha512-H5fFrkE/yFSWP/XD8eyWLyUVbtIqTcw9QBP1me4d9vnl4mao4jHrmnNA8rwtzsEFdXu/UgWdH4kljh1G9PDzWw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@adonisjs/session/-/session-7.5.1.tgz", + "integrity": "sha512-b1E0W/1nnJfAq3Gv8yPywgsxJ7uzzOBJxxulonXI4t1eSdvJzZGNrFScfVLOcjTwlxwrEFA847tULIQxgR4Spw==", "license": "MIT", "dependencies": { - "@poppinss/macroable": "^1.0.3", - "@poppinss/utils": "^6.8.3" + "@poppinss/macroable": "^1.0.4", + "@poppinss/utils": "^6.9.2" }, "engines": { "node": ">=18.16.0" @@ -1262,7 +747,7 @@ "@adonisjs/redis": "^8.0.1 || ^9.0.0", "@aws-sdk/client-dynamodb": "^3.658.0", "@aws-sdk/util-dynamodb": "^3.658.0", - "@japa/api-client": "^2.0.3", + "@japa/api-client": "^2.0.3 || ^3.0.0", "@japa/browser-client": "^2.0.3", "edge.js": "^6.0.2" }, @@ -1288,12 +773,12 @@ } }, "node_modules/@adonisjs/shield": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@adonisjs/shield/-/shield-8.1.1.tgz", - "integrity": "sha512-b/rIypxfG8HKPRvWYJo7qhvAlvYCFXn7/A7eb/QI/PQV4fMmW4iF9tAykxl5peu4WJCHCwXwR3Y6/j0VerQcmQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@adonisjs/shield/-/shield-8.2.0.tgz", + "integrity": "sha512-RddRbs92y87GGFUgDSWD/Pg7qYHh8+MctUphFZwtbTblvDckrjZxuYyp+vmVATPuvDvK7sOlatuZHT4HQSz9zQ==", "license": "MIT", "dependencies": { - "@poppinss/utils": "^6.7.1", + "@poppinss/utils": "^6.9.2", "csrf": "^3.1.0", "helmet-csp": "^3.4.0" }, @@ -1304,7 +789,7 @@ "@adonisjs/core": "^6.2.0", "@adonisjs/i18n": "^2.0.0", "@adonisjs/session": "^7.0.0", - "@japa/api-client": "^2.0.2", + "@japa/api-client": "^2.0.2 || ^3.0.0", "edge.js": "^6.0.1" }, "peerDependenciesMeta": { @@ -1335,23 +820,22 @@ } }, "node_modules/@adonisjs/tsconfig": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@adonisjs/tsconfig/-/tsconfig-1.4.0.tgz", - "integrity": "sha512-go5KlxE8jJaeoIRzm51PcF2YJSK5i022douVk9OjAqvDiU1t2UepcDoEsSiEOgogUDojp9kbRQmFyf0y0YqvOg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@adonisjs/tsconfig/-/tsconfig-1.4.1.tgz", + "integrity": "sha512-b7bHdnTaDRGfec4XVtpwsSEukZ549MgqOShScCd1b4xkMK8z1q/jb0Xs4iUL86oIDhty2y7k5vvA6aoQKPAvXQ==", "dev": true, "license": "MIT" }, "node_modules/@adonisjs/vite": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@adonisjs/vite/-/vite-3.0.0.tgz", - "integrity": "sha512-E09M0zjGwu5GgMYFTGcA00f0y3DblvqekXgtxccjpOE/zLf5ggOxTwI5iZXgD4lVETYirQ0QdS3azznCW2TYkQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@adonisjs/vite/-/vite-4.0.0.tgz", + "integrity": "sha512-5kdE0qLIm2dj+XO0HiCohmh3tfZ+X468wkNXErQ15VS0fkDjZWns2VuiYpoToTKd4tdX/oGlpnpd8aIwAGB4ow==", "license": "MIT", - "peer": true, "dependencies": { - "@poppinss/utils": "^6.7.3", - "@vavite/multibuild": "^4.1.1", + "@poppinss/utils": "^6.8.3", + "@vavite/multibuild": "^5.1.0", "edge-error": "^4.0.1", - "vite-plugin-restart": "^0.4.0" + "vite-plugin-restart": "^0.4.2" }, "engines": { "node": ">=20.6.0" @@ -1360,7 +844,7 @@ "@adonisjs/core": "^6.3.0", "@adonisjs/shield": "^8.0.0", "edge.js": "^6.0.1", - "vite": "^5.1.4" + "vite": "^6.0.0" }, "peerDependenciesMeta": { "@adonisjs/shield": { @@ -1384,20 +868,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@antfu/install-pkg": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", @@ -1412,56 +882,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", - "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@apidevtools/openapi-schemas": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", - "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@apidevtools/swagger-methods": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", - "dev": true, - "license": "MIT" - }, "node_modules/@arr/every": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", @@ -1471,48 +891,685 @@ "node": ">=4" } }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ses": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.891.0.tgz", + "integrity": "sha512-X5cejGUQjUPnkD5d/SXsh6NAPRvc8JtuF+iEclbFe5OOhxJZG9YemT0V7wqC+taFe0279c89+1qJT19UjXZEeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.890.0", + "@aws-sdk/credential-provider-node": "3.891.0", + "@aws-sdk/middleware-host-header": "3.891.0", + "@aws-sdk/middleware-logger": "3.891.0", + "@aws-sdk/middleware-recursion-detection": "3.891.0", + "@aws-sdk/middleware-user-agent": "3.891.0", + "@aws-sdk/region-config-resolver": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@aws-sdk/util-endpoints": "3.891.0", + "@aws-sdk/util-user-agent-browser": "3.887.0", + "@aws-sdk/util-user-agent-node": "3.891.0", + "@smithy/config-resolver": "^4.2.2", + "@smithy/core": "^3.11.0", + "@smithy/fetch-http-handler": "^5.2.1", + "@smithy/hash-node": "^4.1.1", + "@smithy/invalid-dependency": "^4.1.1", + "@smithy/middleware-content-length": "^4.1.1", + "@smithy/middleware-endpoint": "^4.2.2", + "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-serde": "^4.1.1", + "@smithy/middleware-stack": "^4.1.1", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/node-http-handler": "^4.2.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/smithy-client": "^4.6.2", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-body-length-browser": "^4.1.0", + "@smithy/util-body-length-node": "^4.1.0", + "@smithy/util-defaults-mode-browser": "^4.1.2", + "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-endpoints": "^3.1.2", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-retry": "^4.1.2", + "@smithy/util-utf8": "^4.1.0", + "@smithy/util-waiter": "^4.1.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.891.0.tgz", + "integrity": "sha512-QMDaD9GhJe7l0KQp3Tt7dzqFCz/H2XuyNjQgvi10nM1MfI1RagmLtmEhZveQxMPhZ/AtohLSK0Tisp/I5tR8RQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.890.0", + "@aws-sdk/middleware-host-header": "3.891.0", + "@aws-sdk/middleware-logger": "3.891.0", + "@aws-sdk/middleware-recursion-detection": "3.891.0", + "@aws-sdk/middleware-user-agent": "3.891.0", + "@aws-sdk/region-config-resolver": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@aws-sdk/util-endpoints": "3.891.0", + "@aws-sdk/util-user-agent-browser": "3.887.0", + "@aws-sdk/util-user-agent-node": "3.891.0", + "@smithy/config-resolver": "^4.2.2", + "@smithy/core": "^3.11.0", + "@smithy/fetch-http-handler": "^5.2.1", + "@smithy/hash-node": "^4.1.1", + "@smithy/invalid-dependency": "^4.1.1", + "@smithy/middleware-content-length": "^4.1.1", + "@smithy/middleware-endpoint": "^4.2.2", + "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-serde": "^4.1.1", + "@smithy/middleware-stack": "^4.1.1", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/node-http-handler": "^4.2.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/smithy-client": "^4.6.2", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-body-length-browser": "^4.1.0", + "@smithy/util-body-length-node": "^4.1.0", + "@smithy/util-defaults-mode-browser": "^4.1.2", + "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-endpoints": "^3.1.2", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-retry": "^4.1.2", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.890.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.890.0.tgz", + "integrity": "sha512-CT+yjhytHdyKvV3Nh/fqBjnZ8+UiQZVz4NMm4LrPATgVSOdfygXHqrWxrPTVgiBtuJWkotg06DF7+pTd5ekLBw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@aws-sdk/xml-builder": "3.887.0", + "@smithy/core": "^3.11.0", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/property-provider": "^4.1.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/signature-v4": "^5.2.1", + "@smithy/smithy-client": "^4.6.2", + "@smithy/types": "^4.5.0", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-body-length-browser": "^4.1.0", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-utf8": "^4.1.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.890.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.890.0.tgz", + "integrity": "sha512-BtsUa2y0Rs8phmB2ScZ5RuPqZVmxJJXjGfeiXctmLFTxTwoayIK1DdNzOWx6SRMPVc3s2RBGN4vO7T1TwN+ajA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@smithy/property-provider": "^4.1.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.890.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.890.0.tgz", + "integrity": "sha512-0sru3LVwsuGYyzbD90EC/d5HnCZ9PL4O9BA2LYT6b9XceC005Oj86uzE47LXb+mDhTAt3T6ZO0+ZcVQe0DDi8w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@smithy/fetch-http-handler": "^5.2.1", + "@smithy/node-http-handler": "^4.2.1", + "@smithy/property-provider": "^4.1.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/smithy-client": "^4.6.2", + "@smithy/types": "^4.5.0", + "@smithy/util-stream": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.891.0.tgz", + "integrity": "sha512-9LOfm97oy2d2frwCQjl53XLkoEYG6/rsNM3Y6n8UtRU3bzGAEjixdIuv3b6Z/Mk/QLeikcQEJ9FMC02DuQh2Yw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/credential-provider-env": "3.890.0", + "@aws-sdk/credential-provider-http": "3.890.0", + "@aws-sdk/credential-provider-process": "3.890.0", + "@aws-sdk/credential-provider-sso": "3.891.0", + "@aws-sdk/credential-provider-web-identity": "3.891.0", + "@aws-sdk/nested-clients": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/credential-provider-imds": "^4.1.2", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.891.0.tgz", + "integrity": "sha512-IjGvQJhpCN512xlT1DFGaPeE1q0YEm/X62w7wHsRpBindW//M+heSulJzP4KPkoJvmJNVu1NxN26/p4uH+M8TQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.890.0", + "@aws-sdk/credential-provider-http": "3.890.0", + "@aws-sdk/credential-provider-ini": "3.891.0", + "@aws-sdk/credential-provider-process": "3.890.0", + "@aws-sdk/credential-provider-sso": "3.891.0", + "@aws-sdk/credential-provider-web-identity": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/credential-provider-imds": "^4.1.2", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.890.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.890.0.tgz", + "integrity": "sha512-dWZ54TI1Q+UerF5YOqGiCzY+x2YfHsSQvkyM3T4QDNTJpb/zjiVv327VbSOULOlI7gHKWY/G3tMz0D9nWI7YbA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.891.0.tgz", + "integrity": "sha512-RtF9BwUIZqc/7sFbK6n6qhe0tNaWJQwin89nSeZ1HOsA0Z7TfTOelX8Otd0L5wfeVBMVcgiN3ofqrcZgjFjQjA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.891.0", + "@aws-sdk/core": "3.890.0", + "@aws-sdk/token-providers": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.891.0.tgz", + "integrity": "sha512-yq7kzm1sHZ0GZrtS+qpjMUp4ES66UoT1+H2xxrOuAZkvUnkpQq1iSjOgBgJJ9FW1EsDUEmlgn94i4hJTNvm7fg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/nested-clients": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.891.0.tgz", + "integrity": "sha512-OYaxbqNDeo/noE7MfYWWQDu86cF/R/bMXdZ2QZwpWpX2yjy8xMwxSg7c/4tEK/OtiDZTKRXXrvPxRxG2+1bnJw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.891.0.tgz", + "integrity": "sha512-azL4mg1H1FLpOAECiFtU+r+9VDhpeF6Vh9pzD4m51BWPJ60CVnyHayeI/0gqPsL60+5l90/b9VWonoA8DvAvpg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.891.0.tgz", + "integrity": "sha512-n++KwAEnNlvx5NZdIQZnvl2GjSH/YE3xGSqW2GmPB5780tFY5lOYSb1uA+EUzJSVX4oAKAkSPdR2AOW09kzoew==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@aws/lambda-invoke-store": "^0.0.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.891.0.tgz", + "integrity": "sha512-xyxIZtR7FunCWymPAxEm61VUq9lruXxWIYU5AIh5rt0av7nXa2ayAAlscQ7ch9jUlw+lbC2PVbw0K/OYrMovuA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@aws-sdk/util-endpoints": "3.891.0", + "@smithy/core": "^3.11.0", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.891.0.tgz", + "integrity": "sha512-cpol+Yk4T3GXPXbRfUyN2u6tpMEHUxAiesZgrfMm11QGHV+pmzyejJV/QZ0pdJKj5sXKaCr4DCntoJ5iBx++Cw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.890.0", + "@aws-sdk/middleware-host-header": "3.891.0", + "@aws-sdk/middleware-logger": "3.891.0", + "@aws-sdk/middleware-recursion-detection": "3.891.0", + "@aws-sdk/middleware-user-agent": "3.891.0", + "@aws-sdk/region-config-resolver": "3.890.0", + "@aws-sdk/types": "3.887.0", + "@aws-sdk/util-endpoints": "3.891.0", + "@aws-sdk/util-user-agent-browser": "3.887.0", + "@aws-sdk/util-user-agent-node": "3.891.0", + "@smithy/config-resolver": "^4.2.2", + "@smithy/core": "^3.11.0", + "@smithy/fetch-http-handler": "^5.2.1", + "@smithy/hash-node": "^4.1.1", + "@smithy/invalid-dependency": "^4.1.1", + "@smithy/middleware-content-length": "^4.1.1", + "@smithy/middleware-endpoint": "^4.2.2", + "@smithy/middleware-retry": "^4.2.3", + "@smithy/middleware-serde": "^4.1.1", + "@smithy/middleware-stack": "^4.1.1", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/node-http-handler": "^4.2.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/smithy-client": "^4.6.2", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-body-length-browser": "^4.1.0", + "@smithy/util-body-length-node": "^4.1.0", + "@smithy/util-defaults-mode-browser": "^4.1.2", + "@smithy/util-defaults-mode-node": "^4.1.2", + "@smithy/util-endpoints": "^3.1.2", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-retry": "^4.1.2", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.890.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.890.0.tgz", + "integrity": "sha512-VfdT+tkF9groRYNzKvQCsCGDbOQdeBdzyB1d6hWiq22u13UafMIoskJ1ec0i0H1X29oT6mjTitfnvPq1UiKwzQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/types": "^4.5.0", + "@smithy/util-config-provider": "^4.1.0", + "@smithy/util-middleware": "^4.1.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.891.0.tgz", + "integrity": "sha512-n31JDMWhj/53QX33C97+1W63JGtgO8pg1/Tfmv4f9TR2VSGf1rFwYH7cPZ7dVIMmcUBeI2VCVhwUIabGNHw86Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.890.0", + "@aws-sdk/nested-clients": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.887.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.887.0.tgz", + "integrity": "sha512-fmTEJpUhsPsovQ12vZSpVTEP/IaRoJAMBGQXlQNjtCpkBp6Iq3KQDa/HDaPINE+3xxo6XvTdtibsNOd5zJLV9A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.891.0.tgz", + "integrity": "sha512-MgxvmHIQJbUK+YquX4bdjDw1MjdBqTRJGHs6iU2KM8nN1ut0bPwvavkq7NrY/wB3ZKKECqmv6J/nw+hYKKUIHA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "@smithy/util-endpoints": "^3.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.873.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz", + "integrity": "sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.887.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.887.0.tgz", + "integrity": "sha512-X71UmVsYc6ZTH4KU6hA5urOzYowSXc3qvroagJNLJYU1ilgZ529lP4J9XOYfEvTXkLR1hPFSRxa43SrwgelMjA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.887.0", + "@smithy/types": "^4.5.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.891.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.891.0.tgz", + "integrity": "sha512-/mmvVL2PJE2NMTWj9JSY98OISx7yov0mi72eOViWCHQMRYJCN12DY54i1rc4Q/oPwJwTwIrx69MLjVhQ1OZsgw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.891.0", + "@aws-sdk/types": "3.887.0", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.887.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.887.0.tgz", + "integrity": "sha512-lMwgWK1kNgUhHGfBvO/5uLe7TKhycwOn3eRCqsKPT9aPCx/HWuTlpcQp8oW2pCRGLS7qzcxqpQulcD+bbUL7XQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz", + "integrity": "sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", - "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1527,27 +1584,17 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -1555,27 +1602,28 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -1584,29 +1632,19 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, "license": "MIT", "dependencies": { - "@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/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -1616,99 +1654,54 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1718,56 +1711,38 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1777,83 +1752,69 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", - "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.3" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -1862,195 +1823,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", - "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-decorators": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", - "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2060,416 +1840,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@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/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2479,412 +1856,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2894,17 +1873,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", - "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", + "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2913,194 +1892,18 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@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/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -3109,66 +1912,63 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", - "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.3", - "@babel/parser": "^7.26.3", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@borewit/text-codec": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -3203,17 +2003,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@eidellev/adonis-stardust": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@eidellev/adonis-stardust/-/adonis-stardust-3.0.0.tgz", @@ -3227,9 +2016,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz", + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", "cpu": [ "ppc64" ], @@ -3238,15 +2027,14 @@ "os": [ "aix" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz", + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", "cpu": [ "arm" ], @@ -3255,15 +2043,14 @@ "os": [ "android" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz", + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", "cpu": [ "arm64" ], @@ -3272,15 +2059,14 @@ "os": [ "android" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz", + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", "cpu": [ "x64" ], @@ -3289,15 +2075,14 @@ "os": [ "android" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz", + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", "cpu": [ "arm64" ], @@ -3306,15 +2091,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz", + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", "cpu": [ "x64" ], @@ -3323,15 +2107,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz", + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", "cpu": [ "arm64" ], @@ -3340,15 +2123,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz", + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", "cpu": [ "x64" ], @@ -3357,15 +2139,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz", + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", "cpu": [ "arm" ], @@ -3374,15 +2155,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz", + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", "cpu": [ "arm64" ], @@ -3391,15 +2171,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz", + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", "cpu": [ "ia32" ], @@ -3408,15 +2187,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz", + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", "cpu": [ "loong64" ], @@ -3425,15 +2203,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz", + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", "cpu": [ "mips64el" ], @@ -3442,15 +2219,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz", + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", "cpu": [ "ppc64" ], @@ -3459,15 +2235,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz", + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", "cpu": [ "riscv64" ], @@ -3476,15 +2251,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz", + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", "cpu": [ "s390x" ], @@ -3493,15 +2267,14 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz", + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", "cpu": [ "x64" ], @@ -3510,15 +2283,30 @@ "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz", + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz", + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", "cpu": [ "x64" ], @@ -3527,15 +2315,30 @@ "os": [ "netbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz", + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz", + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", "cpu": [ "x64" ], @@ -3544,15 +2347,30 @@ "os": [ "openbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz", + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz", + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", "cpu": [ "x64" ], @@ -3561,15 +2379,14 @@ "os": [ "sunos" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz", + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", "cpu": [ "arm64" ], @@ -3578,15 +2395,14 @@ "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz", + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", "cpu": [ "ia32" ], @@ -3595,15 +2411,14 @@ "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz", + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", "cpu": [ "x64" ], @@ -3612,15 +2427,14 @@ "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3670,55 +2484,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/js": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", @@ -3730,9 +2495,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.3.0.tgz", - "integrity": "sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.9.0.tgz", + "integrity": "sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==", "funding": [ { "type": "opencollective", @@ -3746,16 +2511,38 @@ } }, "node_modules/@fontsource/archivo-black": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@fontsource/archivo-black/-/archivo-black-5.1.1.tgz", - "integrity": "sha512-3hmXvgYkXDsQ7msb+YrwU+6B5j4q7LBfVev1G4T8I5yRcRTo6H8OEA8tf0vULvcAGfOOhl38aRK/2I2+RLE/rQ==", - "license": "OFL-1.1" + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/archivo-black/-/archivo-black-5.2.8.tgz", + "integrity": "sha512-3zNj/o9LzWyDl/UEpY5IOHpAQyUtFr3hQaFS7NSKwCLLkXOfH/CMCt1L2b2Z+OF25OURtOYenCadgAebALz7/A==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } }, "node_modules/@fontsource/inter": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.1.1.tgz", - "integrity": "sha512-weN3E+rq0Xb3Z93VHJ+Rc7WOQX9ETJPTAJ+gDcaMHtjft67L58sfS65rAjC5tZUXQ2FdZ/V1/sSzCwZ6v05kJw==", - "license": "OFL-1.1" + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@headlessui/vue": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", + "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/vue-virtual": "^3.0.0-beta.60" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", @@ -3795,27 +2582,29 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@inertiajs/core": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.3.0.tgz", - "integrity": "sha512-TJ8R1eUYY473m9DaKlCPRdHTdznFWTDuy5VvEzXg3t/hohbDQedLj46yn/uAqziJPEUZJrSftZzPI2NMzL9tQA==", - "license": "MIT", - "dependencies": { - "axios": "^1.6.0", - "deepmerge": "^4.0.0", - "nprogress": "^0.2.0", - "qs": "^6.9.0" + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@inertiajs/core/node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "node_modules/@inertiajs/core": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.1.7.tgz", + "integrity": "sha512-ahBSdNj4d7oqEBr5KcGPVuoyI3JWYKwwLjqhy2O4Jp/UKX1C6W0U/WkpL6NzCapNaNDACBVSc3rqZ/6lY0VbWA==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@types/lodash-es": "^4.17.12", + "axios": "^1.12.0", + "lodash-es": "^4.17.21", + "qs": "^6.9.0" } }, "node_modules/@inertiajs/inertia": { @@ -3829,24 +2618,33 @@ "qs": "^6.9.0" } }, - "node_modules/@inertiajs/vue3": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.3.0.tgz", - "integrity": "sha512-GizqdCM3u4JWunit3uUbW4fEmTLKQTi1W7VvPRdrNy8XDt4Qy2cCmfFjq+aH5tHBSS3fI/ngYuhN7XvwqNaKvw==", + "node_modules/@inertiajs/inertia/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "license": "MIT", "dependencies": { - "@inertiajs/core": "1.3.0", - "lodash.clonedeep": "^4.5.0", - "lodash.isequal": "^4.5.0" + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@inertiajs/vue3": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.1.7.tgz", + "integrity": "sha512-Y6sL2lBJ/uJNVRL4FnYKAp7xdoWwgpc4HvlP8RZhm6roHUBcQNZWxxrPqhtBSx5v9vcTeIvu4+TsoFetPSYgdw==", + "license": "MIT", + "dependencies": { + "@inertiajs/core": "2.1.7", + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" }, "peerDependencies": { "vue": "^3.0.0" } }, "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.4.0.tgz", + "integrity": "sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==", "license": "MIT" }, "node_modules/@isaacs/cliui": { @@ -3868,9 +2666,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { @@ -3881,9 +2679,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -3919,9 +2717,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { @@ -3952,75 +2750,38 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@japa/api-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@japa/api-client/-/api-client-2.0.4.tgz", - "integrity": "sha512-hD0UbbyjrDG+hyzI1HXVvqYdwAxltX/lK7znVon5el1hu6FpYSbvboVwxRjW40ttRsy0l45EQDIlFBA+lW352A==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@poppinss/hooks": "^7.2.4", - "@poppinss/macroable": "^1.0.3", - "@types/superagent": "^8.1.9", - "cookie": "^1.0.1", - "set-cookie-parser": "^2.7.1", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">=18.16.0" - }, - "peerDependencies": { - "@japa/assert": "^2.0.0 || ^3.0.0", - "@japa/runner": "^3.1.2" - }, - "peerDependenciesMeta": { - "@japa/assert": { - "optional": true - } - } - }, - "node_modules/@japa/api-client/node_modules/cookie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", - "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@japa/assert": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@japa/assert/-/assert-3.0.0.tgz", - "integrity": "sha512-4Uvixj78PBpRGeNTqO1GN/qYyl4EeWmIwt/cKiQSLLsoZQpQfe8tvF4PO2Z+zteUi3Zv7WR6pluKYbLQrn3vjg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@japa/assert/-/assert-4.1.1.tgz", + "integrity": "sha512-Hhv8A/gkd1b4Xa2Jti4XJ3FsP/pJ8ZXAWwvgYVKZQNcl79lqIHsMjMrL3e475pbf8lybB++FvXi4ruoz2SsiBA==", "dev": true, "license": "MIT", "dependencies": { - "@poppinss/macroable": "^1.0.2", - "@types/chai": "^4.3.14", - "api-contract-validator": "^2.2.8", - "chai": "^5.1.0" + "@poppinss/macroable": "^1.0.5", + "@types/chai": "^5.2.2", + "assertion-error": "^2.0.1", + "chai": "^5.2.1" }, "engines": { "node": ">=18.16.0" }, "peerDependencies": { - "@japa/runner": "^3.1.2" + "@japa/runner": "^3.1.2 || ^4.0.0" } }, "node_modules/@japa/core": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@japa/core/-/core-9.0.1.tgz", - "integrity": "sha512-snngJNbvYC92nn+dB69DT2iyosWZLXPRnOp8NJnVEeotkkKAWSmcDqBKw9qq2+MVdshwClvKFVXTxko4MtmlEQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@japa/core/-/core-10.3.0.tgz", + "integrity": "sha512-+vaqMiPnVaxlKH1sAwRQ80AwzlPysPKivhB8q1I2+BGe35lNrfiHKGMC52fuGAZBNuH5W2nInSCxr4cN/BTEIQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@poppinss/cliui": "^6.4.1", - "@poppinss/hooks": "^7.2.3", - "@poppinss/macroable": "^1.0.2", + "@poppinss/hooks": "^7.2.5", + "@poppinss/macroable": "^1.0.4", + "@poppinss/string": "^1.2.0", "async-retry": "^1.3.3", "emittery": "^1.0.3", - "string-width": "^7.1.0", + "string-width": "^7.2.0", "time-span": "^5.1.0" }, "engines": { @@ -4028,36 +2789,49 @@ } }, "node_modules/@japa/errors-printer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@japa/errors-printer/-/errors-printer-3.0.4.tgz", - "integrity": "sha512-gqBWkc8X6n5y91HH7H8fXyfe3rKV1+YeMNgE/+CY6hXf0/BS7J55s/QldosKEV2ZiWj/WmE6UPZiFH8W873fGw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@japa/errors-printer/-/errors-printer-4.1.3.tgz", + "integrity": "sha512-67JV/W+GIaXfL2s5P7jd8u+FqhfeeK3iIAgcchX25WEOMN9LCsn3s0xgrfjM3XJh0q4TGtVwz9ClbC0/oocMwA==", "devOptional": true, "license": "MIT", "dependencies": { - "@poppinss/colors": "^4.1.3", - "jest-diff": "^29.7.0", - "supports-color": "^9.4.0", - "youch": "^3.3.3", - "youch-terminal": "^2.2.3" + "@poppinss/colors": "^4.1.5", + "jest-diff": "^30.0.4", + "supports-color": "^10.0.0", + "youch": "^4.1.0-beta.5" }, "engines": { "node": ">=18.16.0" } }, + "node_modules/@japa/errors-printer/node_modules/youch": { + "version": "4.1.0-beta.11", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.11.tgz", + "integrity": "sha512-sQi6PERyO/mT8w564ojOVeAlYTtVQmC2GaktQAf+IdI75/GKIggosBuvyVXvEV+FATAT6RbLdIjFoiIId4ozoQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@poppinss/dumper": "^0.6.4", + "@speed-highlight/core": "^1.2.7", + "cookie": "^1.0.2", + "youch-core": "^0.3.3" + } + }, "node_modules/@japa/plugin-adonisjs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@japa/plugin-adonisjs/-/plugin-adonisjs-3.0.1.tgz", - "integrity": "sha512-xUZOzfBXSz2sWRoQT+qs+6LZBtWWE+cCBZ3j9ckz6+nPw3VI0nV6yLaX+oud3AY8Zb+BH+pErABBhaovZYv9dA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@japa/plugin-adonisjs/-/plugin-adonisjs-4.0.0.tgz", + "integrity": "sha512-M2LUtHhKr4KgBfX73tDHNCD1IOmcXp9dvC+AinmRxsggIFnarsClcfjT/sXc3uNzjZW7Lk31LvcH76AxJHBmJQ==", "devOptional": true, "license": "MIT", "engines": { "node": ">=18.16.0" }, "peerDependencies": { - "@adonisjs/core": "^6.5.0", - "@japa/api-client": "^2.0.3", + "@adonisjs/core": "^6.17.0", + "@japa/api-client": "^2.0.3 || ^3.0.0", "@japa/browser-client": "^2.0.3", - "@japa/runner": "^3.1.2", + "@japa/runner": "^3.1.2 || ^4.0.0", "playwright": "^1.42.1" }, "peerDependenciesMeta": { @@ -4073,133 +2847,84 @@ } }, "node_modules/@japa/runner": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@japa/runner/-/runner-3.1.4.tgz", - "integrity": "sha512-ShaVZLdYq3GbFwyNiqQMCfdEoNq9vgYC0P6Z9gflqPcSUfOmN5jeJTLrLpChCBM5Sx9kYuAm5Bh6cqv1ZrArkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@japa/runner/-/runner-4.4.0.tgz", + "integrity": "sha512-8kw12t5lTMe3n+dy5MPBLsAG1HPZrMCkexGD1mCEU9bXpAQJo55Ij89dLFwF9DDVkkHGkmfaYmi2DhZBjXp5ZA==", "devOptional": true, "license": "MIT", "dependencies": { - "@japa/core": "^9.0.1", - "@japa/errors-printer": "^3.0.4", - "@poppinss/colors": "^4.1.3", - "@poppinss/hooks": "^7.2.3", - "fast-glob": "^3.3.2", - "find-cache-dir": "^5.0.0", + "@japa/core": "^10.3.0", + "@japa/errors-printer": "^4.1.3", + "@poppinss/colors": "^4.1.5", + "@poppinss/hooks": "^7.2.6", + "@poppinss/string": "^1.7.0", + "error-stack-parser-es": "^1.0.5", + "fast-glob": "^3.3.3", + "find-cache-directory": "^6.0.0", "getopts": "^2.3.0", "ms": "^2.1.3", - "serialize-error": "^11.0.3", + "serialize-error": "^12.0.0", "slash": "^5.1.0", - "supports-color": "^9.4.0" + "supports-color": "^10.1.0" }, "engines": { "node": ">=18.16.0" } }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "devOptional": true, "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "devOptional": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -4212,37 +2937,28 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4250,13 +2966,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true, - "license": "MIT" - }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", @@ -4274,17 +2983,75 @@ "tslib": "2" } }, + "node_modules/@jsonjoy.com/buffers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", + "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz", - "integrity": "sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.14.0.tgz", + "integrity": "sha512-LpWbYgVnKzphN5S6uss4M25jJ/9+m6q6UJoeN6zTkK4xAGhKsiBRPVeF7OYMWonn5repMQbE5vieRXcMUrKDKw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.1", + "@jsonjoy.com/util": "^1.9.0", "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" }, "engines": { "node": ">=10.0" @@ -4298,11 +3065,15 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", - "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, "engines": { "node": ">=10.0" }, @@ -4357,6 +3128,18 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@mdi/js": { "version": "7.4.47", "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", @@ -4365,9 +3148,9 @@ "license": "Apache-2.0" }, "node_modules/@noble/hashes": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", - "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -4414,58 +3197,6 @@ "node": ">= 8" } }, - "node_modules/@nuxt/friendly-errors-webpack-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@nuxt/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-2.6.0.tgz", - "integrity": "sha512-3IZj6MXbzlvUxDncAxgBMLQwGPY/JlNhy2i+AGyOHCAReR5HcBxYjVRBvyaKM9R3s5k4OODYKeHAbrToZH/47w==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2", - "consola": "^3.2.3", - "error-stack-parser": "^2.1.4", - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=5.0.0" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nuxt/friendly-errors-webpack-plugin/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@oozcitak/dom": { "version": "1.15.10", "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", @@ -4515,9 +3246,9 @@ } }, "node_modules/@opensearch-project/opensearch": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-2.13.0.tgz", - "integrity": "sha512-Bu3jJ7pKzumbMMeefu7/npAWAvFu5W9SlbBow1ulhluqUpqc7QoXe0KidDrMy7Dy3BQrkI6llR3cWL4lQTZOFw==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-3.5.1.tgz", + "integrity": "sha512-6bf+HcuERzAtHZxrm6phjref54ABse39BpkDie/YO3AUFMCBrb3SK5okKSdT5n3+nDRuEEQLhQCl0RQV3s1qpA==", "license": "Apache-2.0", "dependencies": { "aws4": "^1.11.0", @@ -4528,7 +3259,7 @@ "secure-json-parse": "^2.4.0" }, "engines": { - "node": ">=10", + "node": ">=14", "yarn": "^1.22.10" } }, @@ -4562,28 +3293,28 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/pkgr" } }, "node_modules/@poppinss/chokidar-ts": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@poppinss/chokidar-ts/-/chokidar-ts-4.1.5.tgz", - "integrity": "sha512-V8QtYZZMTbpv9aMX/agZSssIVfig7HK2s9grUqs6x221PEB/YirYtasj6g0Jx1o+yg7D38Y9kKPmL7d9MgeXBw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@poppinss/chokidar-ts/-/chokidar-ts-4.1.9.tgz", + "integrity": "sha512-Nl4JAb5dvwmZhXElSuiuHy4YkB7YFql/AE2tTu9TyJCfPnUrcwm2iMTUZVa+aGz+bolRPuPNKsuypxN59gBvQQ==", "devOptional": true, "license": "MIT", "dependencies": { "chokidar": "^4.0.3", - "emittery": "^1.0.3", - "memoize": "^10.0.0", + "emittery": "^1.1.0", + "memoize": "^10.1.0", "picomatch": "^4.0.2", "slash": "^5.1.0" }, @@ -4591,16 +3322,16 @@ "node": ">=18.16.0" }, "peerDependencies": { - "typescript": "^4.0.0 || ^5.0.0" + "typescript": "^5.0.0" } }, "node_modules/@poppinss/cliui": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@poppinss/cliui/-/cliui-6.4.2.tgz", - "integrity": "sha512-+zx32scWjFUReNAzi75/QBwTiQrQ70a3khF5TNnyJVA8V2I9wTRPBLPdLWt83E5m1nTufoilF2MI7UBALkFH1Q==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@poppinss/cliui/-/cliui-6.4.4.tgz", + "integrity": "sha512-yJfm+3yglxdeH85C+YebxZ1zsTB4pBh+QwCuxJcxV/pVbxagn63uYyxqnQif2sKWi+nkNZxuyemON3WrtGMBCQ==", "license": "MIT", "dependencies": { - "@poppinss/colors": "^4.1.4", + "@poppinss/colors": "^4.1.5", "cli-boxes": "^4.0.1", "cli-table3": "^0.6.5", "cli-truncate": "^4.0.0", @@ -4610,84 +3341,39 @@ "supports-color": "^10.0.0", "terminal-size": "^4.0.0", "wordwrap": "^1.0.0" - }, - "engines": { - "node": ">=18.16.0" - } - }, - "node_modules/@poppinss/cliui/node_modules/supports-color": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", - "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/@poppinss/colors": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.4.tgz", - "integrity": "sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.5.tgz", + "integrity": "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==", "license": "MIT", "dependencies": { "kleur": "^4.1.5" - }, - "engines": { - "node": ">=18.16.0" } }, "node_modules/@poppinss/dumper": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.2.tgz", - "integrity": "sha512-FhE9rY15aZ6Qp6ltQ0NZjseVRhwgWZ7+sg16343FqnjdUQvvBBi5eSeH/aZA4LF1ZOV5779DYrJXTHT42JlHNg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.4.tgz", + "integrity": "sha512-iG0TIdqv8xJ3Lt9O8DrPRxw1MRLjNpoqiSGU03P/wNLP/s0ra0udPJ1J2Tx5M0J3H/cVyEgpbn8xUKRY9j59kQ==", "license": "MIT", "dependencies": { - "@poppinss/colors": "^4.1.4", - "@sindresorhus/is": "^7.0.1", + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, - "node_modules/@poppinss/dumper/node_modules/supports-color": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", - "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/@poppinss/exception": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.0.tgz", - "integrity": "sha512-WLneXKQYNClhaMXccO111VQmZahSrcSRDaHRbV6KL5R4pTvK87fMn/MXLUcvOjk0X5dTHDPKF61tM7j826wrjQ==", - "license": "MIT", - "engines": { - "node": ">=20.6.0" - } - }, - "node_modules/@poppinss/file-generator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@poppinss/file-generator/-/file-generator-1.0.2.tgz", - "integrity": "sha512-rRob//4jLbUVbDSsNRihloKGgpyVsWdFQWUmONxX/gyv4koT1OlVoc3ccWgk7Y/sEa2cFxj3zrFs+wdT09iXWw==", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2" - } + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.2.tgz", + "integrity": "sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==", + "license": "MIT" }, "node_modules/@poppinss/hooks": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@poppinss/hooks/-/hooks-7.2.5.tgz", - "integrity": "sha512-mxORKQ5CFzQNi6yK3zwCGWfGS507w23IhV3kFq42QzWlv/vpvf4aMJDbtfMCR5p52ghVoe0d1wmgp77ak2ORhQ==", - "license": "MIT", - "engines": { - "node": ">=18.16.0" - } + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/@poppinss/hooks/-/hooks-7.2.6.tgz", + "integrity": "sha512-+bZhb1CrIvhgnypjE0W/NZVkRnRDZL37HDDI6zvIo8h3PVs1lKj5Dyl54V/EpU6SFSZAS5dilgZ0V7zhjyJMgA==", + "license": "MIT" }, "node_modules/@poppinss/inspect": { "version": "1.0.1", @@ -4699,13 +3385,10 @@ } }, "node_modules/@poppinss/macroable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.0.4.tgz", - "integrity": "sha512-ct43jurbe7lsUX5eIrj4ijO3j/6zIPp7CDnFWXDs7UPAbw1Pu1iH3oAmFdP4jcskKJBURH5M9oTtyeiUXyHX8Q==", - "license": "MIT", - "engines": { - "node": ">=18.16.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.0.tgz", + "integrity": "sha512-y/YKzZDuG8XrpXpM7Z1RdQpiIc0MAKyva24Ux1PB4aI7RiSI/79K8JVDcdyubriTm7vJ1LhFs8CrZpmPnx/8Pw==", + "license": "MIT" }, "node_modules/@poppinss/manager": { "version": "5.0.2", @@ -4714,22 +3397,19 @@ "license": "MIT" }, "node_modules/@poppinss/matchit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@poppinss/matchit/-/matchit-3.1.2.tgz", - "integrity": "sha512-Bx+jY+vmdQFmwYiHliiPjr+oVBaGnh79B1h1FSAm3jME1QylLFt8PPYC0ymO8Q5PzJj/KuE3jeTnZhRHOWqq8g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@poppinss/matchit/-/matchit-3.2.0.tgz", + "integrity": "sha512-9SoMICN+LMO7ZtMj2ja8N7RHlC4mmuv5WwIBXWjabMd2SyXE1dIydh29exlgm+dGMP84PjwvfJH1TmWL4qz1og==", "license": "MIT", "dependencies": { "@arr/every": "^1.0.0" } }, "node_modules/@poppinss/middleware": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@poppinss/middleware/-/middleware-3.2.5.tgz", - "integrity": "sha512-+P9yY4KYYZFTbOoIvVK/R4PfPcPyxt4E23Dx4l7V8Z/8+DOzAL01eWZs9mMgHOYTbAokKVLQ+JIsyDmrTA0Uyg==", - "license": "MIT", - "engines": { - "node": ">=18.16.0" - } + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@poppinss/middleware/-/middleware-3.2.6.tgz", + "integrity": "sha512-KcZeLlJ0EV+PLTlGGq3+5IqwpGOUTuR3ucfwyPOXeQegQKtyIF9i2HryKklY1qhfLhhTwFC9M6v1nTfdHQM6tA==", + "license": "MIT" }, "node_modules/@poppinss/multiparty": { "version": "2.0.1", @@ -4742,26 +3422,6 @@ "uid-safe": "2.1.5" } }, - "node_modules/@poppinss/multiparty/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/@poppinss/object-builder": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@poppinss/object-builder/-/object-builder-1.1.0.tgz", @@ -4772,60 +3432,60 @@ } }, "node_modules/@poppinss/prompts": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@poppinss/prompts/-/prompts-3.1.4.tgz", - "integrity": "sha512-3xbwolmX8/G2jZZTRcymc1KysJ6b7vyonauKwyQtt3WOaUTHMFcxTJ/Sdp75ehHFJI1BOVzd4v6BS9pmqTcHlw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@poppinss/prompts/-/prompts-3.1.5.tgz", + "integrity": "sha512-q94apkzTzp8iV30VxmaRUU6RmRTnJRBXpgV3PtIAZUYoPglJEeYwNLWPnKUrhXmvrH0vjl3TqMINO0A4GUZn3Q==", "license": "MIT", "dependencies": { - "@poppinss/colors": "^4.1.4", - "@poppinss/exception": "^1.1.0", + "@poppinss/colors": "^4.1.5", + "@poppinss/exception": "^1.2.1", "@poppinss/object-builder": "^1.1.0", "enquirer": "^2.4.1" - }, - "engines": { - "node": ">=18.16.0" } }, "node_modules/@poppinss/string": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.2.0.tgz", - "integrity": "sha512-1z78zjqhfjqsvWr+pQzCpRNcZpIM+5vNY5SFOvz28GrL/LRanwtmOku5tBX7jE8/ng3oXaOVrB59lnnXFtvkug==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.7.0.tgz", + "integrity": "sha512-IuCtWaUwmJeAdby0n1a5cTYsBLe7fPymdc4oNTTl1b6l+Ok+14XpSX0ILOEU6UtZ9D2XI3f4TVUh4Titkk1xgw==", "license": "MIT", "dependencies": { "@lukeed/ms": "^2.0.2", "@types/bytes": "^3.1.5", "@types/pluralize": "^0.0.33", "bytes": "^3.1.2", - "case-anything": "^3.1.0", + "case-anything": "^3.1.2", "pluralize": "^8.0.0", "slugify": "^1.6.6", "truncatise": "^0.0.8" - }, - "engines": { - "node": ">=20.6.0" } }, + "node_modules/@poppinss/types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@poppinss/types/-/types-1.2.0.tgz", + "integrity": "sha512-kHwS1lDC/IQeqaBEbuJuWNVt46OGdQQN6+wvyq+GFa2YWV33TAGDku7dkeXDSxddt6UX+URWCLsJ+JRJWCCZLQ==", + "license": "MIT" + }, "node_modules/@poppinss/utils": { - "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.9.2.tgz", - "integrity": "sha512-ypVszZxhwiehhklM5so2BI+nClQJwp7mBUSJh/R1GepeUH1vvD5GtxMz8Lp9dO9oAbKyDmq1jc4g/4E0dv8r2g==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.10.1.tgz", + "integrity": "sha512-da+MMyeXhBaKtxQiWPfy7+056wk3lVIhioJnXHXkJ2/OHDaZfFcyKHNl1R06sdYO8lIRXcXdoZ6LO2ARmkAREA==", "license": "MIT", "dependencies": { - "@poppinss/exception": "^1.2.0", + "@poppinss/exception": "^1.2.1", "@poppinss/object-builder": "^1.1.0", - "@poppinss/string": "^1.1.0", + "@poppinss/string": "^1.3.0", "flattie": "^1.1.1", "safe-stable-stringify": "^2.5.0", - "secure-json-parse": "^3.0.1" + "secure-json-parse": "^4.0.0" }, "engines": { "node": ">=18.16.0" } }, "node_modules/@poppinss/utils/node_modules/secure-json-parse": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.2.tgz", - "integrity": "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", + "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==", "funding": [ { "type": "github", @@ -4839,83 +3499,75 @@ "license": "BSD-3-Clause" }, "node_modules/@poppinss/validator-lite": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@poppinss/validator-lite/-/validator-lite-1.0.3.tgz", - "integrity": "sha512-u4dmT7PDHwNtxY3q1jHVp/u+hMEEcBlkzd37QwwM4tVt/0mLlEDttSfPQ+TT7sqPG4VEtWKwVSlMInwPUYyJpA==", - "license": "MIT", - "dependencies": { - "validator": "^13.9.0" - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@poppinss/validator-lite/-/validator-lite-2.1.2.tgz", + "integrity": "sha512-UhSG1ouT6r67VbEFHK/8ax3EMZYHioew9PqGmEZjV41G15aPZi6cyhXtBVvF9xqkHMflA5V680k7bQzV0kfD5w==", + "license": "MIT" }, "node_modules/@redis/bloom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", - "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.8.2.tgz", + "integrity": "sha512-855DR0ChetZLarblio5eM0yLwxA9Dqq50t8StXKp5bAtLT0G+rZ+eRzzqxl37sPqQKjUudSYypz55o6nNhbz0A==", "license": "MIT", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@redis/client": "^5.8.2" } }, "node_modules/@redis/client": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz", - "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.2.tgz", + "integrity": "sha512-WtMScno3+eBpTac1Uav2zugXEoXqaU23YznwvFgkPwBQVwEHTDgOG7uEAObtZ/Nyn8SmAMbqkEubJaMOvnqdsQ==", "license": "MIT", "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" + "cluster-key-slot": "1.1.2" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", - "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node": ">= 18" } }, "node_modules/@redis/json": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz", - "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.8.2.tgz", + "integrity": "sha512-uxpVfas3I0LccBX9rIfDgJ0dBrUa3+0Gc8sEwmQQH0vHi7C1Rx1Qn8Nv1QWz5bohoeIXMICFZRcyDONvum2l/w==", "license": "MIT", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@redis/client": "^5.8.2" } }, "node_modules/@redis/search": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz", - "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.8.2.tgz", + "integrity": "sha512-cNv7HlgayavCBXqPXgaS97DRPVWFznuzsAmmuemi2TMCx5scwLiP50TeZvUS06h/MG96YNPe6A0Zt57yayfxwA==", "license": "MIT", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@redis/client": "^5.8.2" } }, "node_modules/@redis/time-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz", - "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.8.2.tgz", + "integrity": "sha512-g2NlHM07fK8H4k+613NBsk3y70R2JIM2dPMSkhIjl2Z17SYvaYKdusz85d7VYOrZBWtDrHV/WD2E3vGu+zni8A==", "license": "MIT", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "@redis/client": "^1.0.0" + "@redis/client": "^5.8.2" } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", - "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.51.0.tgz", + "integrity": "sha512-VyfldO8T/C5vAXBGIobrAnUE+VJNVLw5z9h4NgSDq/AJZWt/fXqdW+0PJbk+M74xz7yMDRiHtlsuDV7ew6K20w==", "cpu": [ "arm" ], @@ -4923,13 +3575,12 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", - "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.51.0.tgz", + "integrity": "sha512-Z3ujzDZgsEVSokgIhmOAReh9SGT2qloJJX2Xo1Q3nPU1EhCXrV0PbpR3r7DWRgozqnjrPZQkLe5cgBPIYp70Vg==", "cpu": [ "arm64" ], @@ -4937,13 +3588,12 @@ "optional": true, "os": [ "android" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", - "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.51.0.tgz", + "integrity": "sha512-T3gskHgArUdR6TCN69li5VELVAZK+iQ4iwMoSMNYixoj+56EC9lTj35rcxhXzIJt40YfBkvDy3GS+t5zh7zM6g==", "cpu": [ "arm64" ], @@ -4951,13 +3601,12 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", - "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.51.0.tgz", + "integrity": "sha512-Hh7n/fh0g5UjH6ATDF56Qdf5bzdLZKIbhp5KftjMYG546Ocjeyg15dxphCpH1FFY2PJ2G6MiOVL4jMq5VLTyrQ==", "cpu": [ "x64" ], @@ -4965,13 +3614,12 @@ "optional": true, "os": [ "darwin" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", - "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.51.0.tgz", + "integrity": "sha512-0EddADb6FBvfqYoxwVom3hAbAvpSVUbZqmR1wmjk0MSZ06hn/UxxGHKRqEQDMkts7XiZjejVB+TLF28cDTU+gA==", "cpu": [ "arm64" ], @@ -4979,13 +3627,12 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", - "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.51.0.tgz", + "integrity": "sha512-MpqaEDLo3JuVPF+wWV4mK7V8akL76WCz8ndfz1aVB7RhvXFO3k7yT7eu8OEuog4VTSyNu5ibvN9n6lgjq/qLEQ==", "cpu": [ "x64" ], @@ -4993,13 +3640,12 @@ "optional": true, "os": [ "freebsd" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", - "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.51.0.tgz", + "integrity": "sha512-WEWAGFNFFpvSWAIT3MYvxTkYHv/cJl9yWKpjhheg7ONfB0hetZt/uwBnM3GZqSHrk5bXCDYTFXg3jQyk/j7eXQ==", "cpu": [ "arm" ], @@ -5007,13 +3653,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", - "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.51.0.tgz", + "integrity": "sha512-9bxtxj8QoAp++LOq5PGDGkEEOpCDk9rOEHUcXadnijedDH8IXrBt6PnBa4Y6NblvGWdoxvXZYghZLaliTCmAng==", "cpu": [ "arm" ], @@ -5021,13 +3666,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", - "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.51.0.tgz", + "integrity": "sha512-DdqA+fARqIsfqDYkKo2nrWMp0kvu/wPJ2G8lZ4DjYhn+8QhrjVuzmsh7tTkhULwjvHTN59nWVzAixmOi6rqjNA==", "cpu": [ "arm64" ], @@ -5035,13 +3679,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", - "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.51.0.tgz", + "integrity": "sha512-2XVRNzcUJE1UJua8P4a1GXS5jafFWE+pQ6zhUbZzptOu/70p1F6+0FTi6aGPd6jNtnJqGMjtBCXancC2dhYlWw==", "cpu": [ "arm64" ], @@ -5049,13 +3692,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", - "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.51.0.tgz", + "integrity": "sha512-R8QhY0kLIPCAVXWi2yftDSpn7Jtejey/WhMoBESSfwGec5SKdFVupjxFlKoQ7clVRuaDpiQf7wNx3EBZf4Ey6g==", "cpu": [ "loong64" ], @@ -5063,13 +3705,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", - "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.51.0.tgz", + "integrity": "sha512-I498RPfxx9cMv1KTHQ9tg2Ku1utuQm+T5B+Xro+WNu3FzAFSKp4awKfgMoZwjoPgNbaFGINaOM25cQW6WuBhiQ==", "cpu": [ "ppc64" ], @@ -5077,13 +3718,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", - "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.51.0.tgz", + "integrity": "sha512-o8COudsb8lvtdm9ixg9aKjfX5aeoc2x9KGE7WjtrmQFquoCRZ9jtzGlonujE4WhvXFepTraWzT4RcwyDDeHXjA==", "cpu": [ "riscv64" ], @@ -5091,13 +3731,25 @@ "optional": true, "os": [ "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.51.0.tgz", + "integrity": "sha512-0shJPgSXMdYzOQzpM5BJN2euXY1f8uV8mS6AnrbMcH2KrkNsbpMxWB1wp8UEdiJ1NtyBkCk3U/HfX5mEONBq6w==", + "cpu": [ + "riscv64" ], - "peer": true + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", - "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.51.0.tgz", + "integrity": "sha512-L7pV+ny7865jamSCQwyozBYjFRUKaTsPqDz7ClOtJCDu4paf2uAa0mrcHwSt4XxZP2ogFZS9uuitH3NXdeBEJA==", "cpu": [ "s390x" ], @@ -5105,13 +3757,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", - "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.51.0.tgz", + "integrity": "sha512-4YHhP+Rv3T3+H3TPbUvWOw5tuSwhrVhkHHZhk4hC9VXeAOKR26/IsUAT4FsB4mT+kfIdxxb1BezQDEg/voPO8A==", "cpu": [ "x64" ], @@ -5119,13 +3770,12 @@ "optional": true, "os": [ "linux" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", - "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.51.0.tgz", + "integrity": "sha512-P7U7U03+E5w7WgJtvSseNLOX1UhknVPmEaqgUENFWfNxNBa1OhExT6qYGmyF8gepcxWSaSfJsAV5UwhWrYefdQ==", "cpu": [ "x64" ], @@ -5133,13 +3783,25 @@ "optional": true, "os": [ "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.51.0.tgz", + "integrity": "sha512-FuD8g3u9W6RPwdO1R45hZFORwa1g9YXEMesAKP/sOi7mDqxjbni8S3zAXJiDcRfGfGBqpRYVuH54Gu3FTuSoEw==", + "cpu": [ + "arm64" ], - "peer": true + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", - "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.51.0.tgz", + "integrity": "sha512-zST+FdMCX3QAYfmZX3dp/Fy8qLUetfE17QN5ZmmFGPrhl86qvRr+E9u2bk7fzkIXsfQR30Z7ZRS7WMryPPn4rQ==", "cpu": [ "arm64" ], @@ -5147,13 +3809,12 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", - "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.51.0.tgz", + "integrity": "sha512-U+qhoCVAZmTHCmUKxdQxw1jwAFNFXmOpMME7Npt5GTb1W/7itfgAgNluVOvyeuSeqW+dEQLFuNZF3YZPO8XkMg==", "cpu": [ "ia32" ], @@ -5161,13 +3822,12 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", - "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.51.0.tgz", + "integrity": "sha512-z6UpFzMhXSD8NNUfCi2HO+pbpSzSWIIPgb1TZsEZjmZYtk6RUIC63JYjlFBwbBZS3jt3f1q6IGfkj3g+GnBt2Q==", "cpu": [ "x64" ], @@ -5175,8 +3835,7 @@ "optional": true, "os": [ "win32" - ], - "peer": true + ] }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", @@ -5185,16 +3844,16 @@ "license": "MIT" }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "devOptional": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", - "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.0.tgz", + "integrity": "sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==", "license": "MIT", "engines": { "node": ">=18" @@ -5216,381 +3875,604 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@swc/core": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.6.tgz", - "integrity": "sha512-zgXXsI6SAVwr6XsXyMnqlyLoa1lT+r09bAWI1xT3679ejWqI1Vnl14eJG0GjWYXCEMKHCNytfMq3OOQ62C39QQ==", - "dev": true, - "hasInstallScript": true, + "node_modules/@smithy/abort-controller": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.1.1.tgz", + "integrity": "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==", "license": "Apache-2.0", "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.17" + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.10.6", - "@swc/core-darwin-x64": "1.10.6", - "@swc/core-linux-arm-gnueabihf": "1.10.6", - "@swc/core-linux-arm64-gnu": "1.10.6", - "@swc/core-linux-arm64-musl": "1.10.6", - "@swc/core-linux-x64-gnu": "1.10.6", - "@swc/core-linux-x64-musl": "1.10.6", - "@swc/core-win32-arm64-msvc": "1.10.6", - "@swc/core-win32-ia32-msvc": "1.10.6", - "@swc/core-win32-x64-msvc": "1.10.6" - }, - "peerDependencies": { - "@swc/helpers": "*" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } + "node": ">=18.0.0" } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.6.tgz", - "integrity": "sha512-USbMvT8Rw5PvIfF6HyTm+yW84J9c45emzmHBDIWY76vZHkFsS5MepNi+JLQyBzBBgE7ScwBRBNhRx6VNhkSoww==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.6.tgz", - "integrity": "sha512-7t2IozcZN4r1p27ei+Kb8IjN4aLoBDn107fPi+aPLcVp2uFgJEUzhCDuZXBNW2057Mx1OHcjzrkaleRpECz3Xg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.6.tgz", - "integrity": "sha512-CPgWT+D0bDp/qhXsLkIJ54LmKU1/zvyGaf/yz8A4iR+YoF6R5CSXENXhNJY8cIrb6+uNWJZzHJ+gefB5V51bpA==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@smithy/config-resolver": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.2.2.tgz", + "integrity": "sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==", "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@smithy/node-config-provider": "^4.2.2", + "@smithy/types": "^4.5.0", + "@smithy/util-config-provider": "^4.1.0", + "@smithy/util-middleware": "^4.1.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.6.tgz", - "integrity": "sha512-5qZ6hVnqO/ShETXdGSzvdGUVx372qydlj1YWSYiaxQzTAepEBc8TC1NVUgYtOHOKVRkky1d7p6GQ9lymsd4bHw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@smithy/core": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.11.1.tgz", + "integrity": "sha512-REH7crwORgdjSpYs15JBiIWOYjj0hJNC3aCecpJvAlMMaaqL5i2CLb1i6Hc4yevToTKSqslLMI9FKjhugEwALA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.1.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-body-length-browser": "^4.1.0", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-stream": "^4.3.2", + "@smithy/util-utf8": "^4.1.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.6.tgz", - "integrity": "sha512-hB2xZFmXCKf2iJF5y2z01PSuLqEoUP3jIX/XlIHN+/AIP7PkSKsValE63LnjlnWPnSEI0IxUyRE3T3FzWE/fQQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@smithy/credential-provider-imds": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz", + "integrity": "sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.2.2", + "@smithy/property-provider": "^4.1.1", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.6.tgz", - "integrity": "sha512-PRGPp0I22+oJ8RMGg8M4hXYxEffH3ayu0WoSDPOjfol1F51Wj1tfTWN4wVa2RibzJjkBwMOT0KGLGb/hSEDDXQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@smithy/fetch-http-handler": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz", + "integrity": "sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.2.1", + "@smithy/querystring-builder": "^4.1.1", + "@smithy/types": "^4.5.0", + "@smithy/util-base64": "^4.1.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.6.tgz", - "integrity": "sha512-SoNBxlA86lnoV9vIz/TCyakLkdRhFSHx6tFMKNH8wAhz1kKYbZfDmpYoIzeQqdTh0tpx8e/Zu1zdK4smovsZqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], + "node_modules/@smithy/hash-node": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.1.1.tgz", + "integrity": "sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "@smithy/util-buffer-from": "^4.1.0", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.6.tgz", - "integrity": "sha512-6L5Y2E+FVvM+BtoA+mJFjf/SjpFr73w2kHBxINxwH8/PkjAjkePDr5m0ibQhPXV61bTwX49+1otzTY85EsUW9Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@smithy/invalid-dependency": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz", + "integrity": "sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.6.tgz", - "integrity": "sha512-kxK3tW8DJwEkAkwy0vhwoBAShRebH1QTe0mvH9tlBQ21rToVZQn+GCV/I44dind80hYPw0Tw2JKFVfoEJyBszg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@smithy/is-array-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz", + "integrity": "sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.6.tgz", - "integrity": "sha512-4pJka/+t8XcHee12G/R5VWcilkp5poT2EJhrybpuREkpQ7iC/4WOlOVrohbWQ4AhDQmojYQI/iS+gdF2JFLzTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@smithy/middleware-content-length": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz", + "integrity": "sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "node_modules/@smithy/middleware-endpoint": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.3.tgz", + "integrity": "sha512-+1H5A28DeffRVrqmVmtqtRraEjoaC6JVap3xEQdVoBh2EagCVY7noPmcBcG4y7mnr9AJitR1ZAse2l+tEtK5vg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.11.1", + "@smithy/middleware-serde": "^4.1.1", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "@smithy/url-parser": "^4.1.1", + "@smithy/util-middleware": "^4.1.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.2.4.tgz", + "integrity": "sha512-amyqYQFewnAviX3yy/rI/n1HqAgfvUdkEhc04kDjxsngAUREKuOI24iwqQUirrj6GtodWmR4iO5Zeyl3/3BwWg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.2.2", + "@smithy/protocol-http": "^5.2.1", + "@smithy/service-error-classification": "^4.1.2", + "@smithy/smithy-client": "^4.6.3", + "@smithy/types": "^4.5.0", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-retry": "^4.1.2", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz", + "integrity": "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz", + "integrity": "sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz", + "integrity": "sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.1.1", + "@smithy/shared-ini-file-loader": "^4.2.0", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz", + "integrity": "sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.1.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/querystring-builder": "^4.1.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.1.1.tgz", + "integrity": "sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.2.1.tgz", + "integrity": "sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz", + "integrity": "sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "@smithy/util-uri-escape": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz", + "integrity": "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz", + "integrity": "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz", + "integrity": "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.2.1.tgz", + "integrity": "sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.1.0", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "@smithy/util-hex-encoding": "^4.1.0", + "@smithy/util-middleware": "^4.1.1", + "@smithy/util-uri-escape": "^4.1.0", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.6.3.tgz", + "integrity": "sha512-K27LqywsaqKz4jusdUQYJh/YP2VbnbdskZ42zG8xfV+eovbTtMc2/ZatLWCfSkW0PDsTUXlpvlaMyu8925HsOw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.11.1", + "@smithy/middleware-endpoint": "^4.2.3", + "@smithy/middleware-stack": "^4.1.1", + "@smithy/protocol-http": "^5.2.1", + "@smithy/types": "^4.5.0", + "@smithy/util-stream": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.5.0.tgz", + "integrity": "sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.1.1.tgz", + "integrity": "sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.1.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.1.0.tgz", + "integrity": "sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.1.0", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz", + "integrity": "sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz", + "integrity": "sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz", + "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz", + "integrity": "sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.3.tgz", + "integrity": "sha512-5fm3i2laE95uhY6n6O6uGFxI5SVbqo3/RWEuS3YsT0LVmSZk+0eUqPhKd4qk0KxBRPaT5VNT/WEBUqdMyYoRgg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.1.1", + "@smithy/smithy-client": "^4.6.3", + "@smithy/types": "^4.5.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.3.tgz", + "integrity": "sha512-lwnMzlMslZ9GJNt+/wVjz6+fe9Wp5tqR1xAyQn+iywmP+Ymj0F6NhU/KfHM5jhGPQchRSCcau5weKhFdLIM4cA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.2.2", + "@smithy/credential-provider-imds": "^4.1.2", + "@smithy/node-config-provider": "^4.2.2", + "@smithy/property-provider": "^4.1.1", + "@smithy/smithy-client": "^4.6.3", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz", + "integrity": "sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.2.2", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz", + "integrity": "sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.1.1.tgz", + "integrity": "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.1.2.tgz", + "integrity": "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.1.2", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.3.2.tgz", + "integrity": "sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.2.1", + "@smithy/node-http-handler": "^4.2.1", + "@smithy/types": "^4.5.0", + "@smithy/util-base64": "^4.1.0", + "@smithy/util-buffer-from": "^4.1.0", + "@smithy/util-hex-encoding": "^4.1.0", + "@smithy/util-utf8": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz", + "integrity": "sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.1.0.tgz", + "integrity": "sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.1.1.tgz", + "integrity": "sha512-PJBmyayrlfxM7nbqjomF4YcT1sApQwZio0NHSsT0EzhJqljRmvhzqZua43TyEs80nJk2Cn2FGPg/N8phH6KeCQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.1.1", + "@smithy/types": "^4.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.7.tgz", + "integrity": "sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==", + "devOptional": true, + "license": "CC0-1.0" + }, + "node_modules/@swc/wasm": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.13.5.tgz", + "integrity": "sha512-ZBZcxieydxNwgEU9eFAXGMaDb1Xoh+ZkZcUQ27LNJzc2lPSByoL6CSVqnYiaVo+n9JgqbYyHlMq+i7z0wRNTfA==", "dev": true, "license": "Apache-2.0" }, - "node_modules/@swc/types": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", - "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3" - } - }, - "node_modules/@symfony/webpack-encore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-5.0.1.tgz", - "integrity": "sha512-2l9ssZCJDMKOXi1iggjn7HEaErdYvITvuheLvtXHAgR2mauV2FiE/pNFS+Bqz2sbj1g4pPcqJIl5AwFE9etOgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nuxt/friendly-errors-webpack-plugin": "^2.5.1", - "babel-loader": "^9.1.3", - "css-loader": "^7.1.0", - "css-minimizer-webpack-plugin": "^7.0.0", - "fastest-levenshtein": "^1.0.16", - "mini-css-extract-plugin": "^2.6.0", - "picocolors": "^1.1.0", - "pretty-error": "^4.0.0", - "resolve-url-loader": "^5.0.0", - "semver": "^7.3.2", - "style-loader": "^3.3.0", - "tapable": "^2.2.1", - "terser-webpack-plugin": "^5.3.0", - "tmp": "^0.2.1", - "yargs-parser": "^21.0.0" - }, - "bin": { - "encore": "bin/encore.js" - }, - "engines": { - "node": "^18.12.0 || ^20.0.0 || >=22.0" - }, - "peerDependencies": { - "@babel/core": "^7.17.0", - "@babel/plugin-transform-react-jsx": "^7.12.11", - "@babel/preset-env": "^7.16.0", - "@babel/preset-react": "^7.9.0", - "@babel/preset-typescript": "^7.0.0", - "@symfony/stimulus-bridge": "^3.0.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0", - "@vue/babel-plugin-jsx": "^1.0.0", - "@vue/babel-preset-jsx": "^1.0.0", - "@vue/compiler-sfc": "^2.6 || ^3.0.2", - "file-loader": "^6.0.0", - "fork-ts-checker-webpack-plugin": "^7.0.0 || ^8.0.0 || ^9.0.0", - "handlebars": "^4.7.7", - "handlebars-loader": "^1.7.0", - "less": "^4.0.0", - "less-loader": "^11.0.0 || ^12.2.0", - "postcss": "^8.3.0", - "postcss-loader": "^7.0.0 || ^8.1.0", - "sass": "^1.17.0", - "sass-loader": "^16.0.1", - "stylus-loader": "^7.0.0 || ^8.1.0", - "ts-loader": "^9.0.0", - "typescript": "^5.0.0", - "vue": "^3.2.14", - "vue-loader": "^17.0.0", - "webpack": "^5.72", - "webpack-cli": "^5.1.4", - "webpack-notifier": "^1.15.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": false - }, - "@babel/plugin-transform-react-jsx": { - "optional": true - }, - "@babel/preset-env": { - "optional": false - }, - "@babel/preset-react": { - "optional": true - }, - "@babel/preset-typescript": { - "optional": true - }, - "@symfony/stimulus-bridge": { - "optional": true - }, - "@vue/babel-helper-vue-jsx-merge-props": { - "optional": true - }, - "@vue/babel-plugin-jsx": { - "optional": true - }, - "@vue/babel-preset-jsx": { - "optional": true - }, - "@vue/compiler-sfc": { - "optional": true - }, - "file-loader": { - "optional": true - }, - "fork-ts-checker-webpack-plugin": { - "optional": true - }, - "handlebars": { - "optional": true - }, - "handlebars-loader": { - "optional": true - }, - "less": { - "optional": true - }, - "less-loader": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-loader": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-loader": { - "optional": true - }, - "stylus-loader": { - "optional": true - }, - "ts-loader": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vue": { - "optional": true - }, - "vue-loader": { - "optional": true - }, - "webpack": { - "optional": false - }, - "webpack-cli": { - "optional": false - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-notifier": { - "optional": true - } - } - }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -5616,22 +4498,58 @@ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz", + "integrity": "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@ts-morph/common": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.24.0.tgz", @@ -5646,9 +4564,9 @@ } }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -5716,9 +4634,9 @@ "license": "MIT" }, "node_modules/@tuyau/utils": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@tuyau/utils/-/utils-0.0.4.tgz", - "integrity": "sha512-ex6CAJNLiTuOvx7nUrgs8FwNG/t88Mi8QTLSO3muHbB6vBSpYimZ6iSUkk4cjEFd4XDy0y+24GDgXKoBfGf4ag==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@tuyau/utils/-/utils-0.0.6.tgz", + "integrity": "sha512-X6teHJyGGyjkSHRvBf9tX13K54O6yxaDcNI/NbgXYb/yBdm4Esr4yRBYjOKEvaQYkAChQh/CXyEeGYNPdj+2Zg==", "license": "ISC" }, "node_modules/@types/bcryptjs": { @@ -5729,9 +4647,9 @@ "license": "MIT" }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, "license": "MIT", "dependencies": { @@ -5756,16 +4674,19 @@ "license": "MIT" }, "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } }, "node_modules/@types/clamscan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/clamscan/-/clamscan-2.4.0.tgz", - "integrity": "sha512-wqYy+klgBWqCFAMNZsJrb5Q4d0VIjMPk2lfGsq5jHMPyq8E61YLOV+3VNrvoJdbNmzVIXGIc9npb0Tjw+MXEfw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/clamscan/-/clamscan-2.4.1.tgz", + "integrity": "sha512-KhBHhXsMGDoEkk87VRtHtDsjoqXD3epu+a09c1sjW7xqpvoihScxhZNdNIPegVCLDvPOp4khiIpy02XabseztQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5797,7 +4718,14 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "devOptional": true, + "dev": true, + "license": "MIT" + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, "license": "MIT" }, "node_modules/@types/disposable-email-domains": { @@ -5838,16 +4766,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "license": "MIT", - "peer": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5858,19 +4785,6 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.4.tgz", - "integrity": "sha512-5kz9ScmzBdzTgB/3susoCgfqNDzBjvLL4taparufgSvlwjdLy6UyUy9T/tCpYd2GIdIilCatC4iSQS0QSYHt0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.19.6", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", @@ -5884,18 +4798,20 @@ } }, "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, "license": "MIT", "dependencies": { + "@types/jsonfile": "*", "@types/node": "*" } }, "node_modules/@types/geojson": { - "version": "7946.0.15", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.15.tgz", - "integrity": "sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==", + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", "dev": true, "license": "MIT" }, @@ -5912,50 +4828,22 @@ "license": "MIT" }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "dev": true, "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -5963,20 +4851,45 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/leaflet": { - "version": "1.9.16", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.16.tgz", - "integrity": "sha512-wzZoyySUxkgMZ0ihJ7IaUIblG8Rdc8AbbZKLneyn+QjYsj5q1QU7TEKYqwTr10BGSzY5LI7tJk9Ifo+mEjdFRw==", + "version": "1.9.20", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.20.tgz", + "integrity": "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw==", "dev": true, "license": "MIT", "dependencies": { "@types/geojson": "*" } }, + "node_modules/@types/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/luxon": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", - "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", + "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", "devOptional": true, "license": "MIT" }, @@ -5984,7 +4897,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/@types/mime": { @@ -5995,18 +4908,18 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz", - "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==", + "version": "22.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", + "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dev": true, "license": "MIT", "dependencies": { @@ -6014,14 +4927,22 @@ } }, "node_modules/@types/nodemailer": { - "version": "6.4.17", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.17.tgz", - "integrity": "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww==", + "version": "6.4.19", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.19.tgz", + "integrity": "sha512-Fi8DwmuAduTk1/1MpkR9EwS0SsDvYXx5RxivAVII1InDCIxmhj/iQm3W8S3EVb/0arnblr6PK0FK4wYa7bwdLg==", "license": "MIT", "dependencies": { + "@aws-sdk/client-ses": "^3.731.1", "@types/node": "*" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/notp": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@types/notp/-/notp-2.0.5.tgz", @@ -6031,40 +4952,6 @@ "@types/node": "*" } }, - "node_modules/@types/pino": { - "version": "6.3.12", - "resolved": "https://registry.npmjs.org/@types/pino/-/pino-6.3.12.tgz", - "integrity": "sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/pino-pretty": "*", - "@types/pino-std-serializers": "*", - "sonic-boom": "^2.1.0" - } - }, - "node_modules/@types/pino-pretty": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-4.7.5.tgz", - "integrity": "sha512-rfHe6VIknk14DymxGqc9maGsRe8/HQSvM2u46EAz2XrS92qsAJnW16dpdFejBuZKD8cRJX6Aw6uVZqIQctMpAg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/pino": "6.3" - } - }, - "node_modules/@types/pino-std-serializers": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz", - "integrity": "sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/pluralize": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.33.tgz", @@ -6092,9 +4979,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -6112,16 +4999,16 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dev": true, "license": "MIT", "dependencies": { @@ -6140,9 +5027,9 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -6182,7 +5069,7 @@ "version": "8.1.9", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "@types/cookiejar": "^2.1.5", @@ -6192,9 +5079,9 @@ } }, "node_modules/@types/supertest": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", - "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", "dev": true, "license": "MIT", "dependencies": { @@ -6202,39 +5089,28 @@ "@types/superagent": "^8.1.0" } }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "license": "MIT" + }, "node_modules/@types/validator": { - "version": "13.12.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz", - "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==", + "version": "13.15.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.3.tgz", + "integrity": "sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==", "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", @@ -6270,6 +5146,19 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", @@ -6407,6 +5296,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6468,6 +5370,19 @@ "node": ">=4.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", @@ -6487,33 +5402,31 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", - "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, "node_modules/@vavite/multibuild": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@vavite/multibuild/-/multibuild-4.1.3.tgz", - "integrity": "sha512-V+6mskWf4GMQVb53w2fdJ5aR+zVkzpuCE9q3lDDo0v8AHjQApOeXydj/5rTERIFkO46yNHmr3insg2I/tC0TtA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@vavite/multibuild/-/multibuild-5.1.0.tgz", + "integrity": "sha512-xhJS6oAhQqDCRFFmpZWNCcAJw7145pvlfKX/IOCQX7oqulbw9amH9rdrNXmwz79UeYgOwxXpWfEavyYTPLY1KQ==", "license": "MIT", - "peer": true, "dependencies": { - "@types/node": "^18.19.50", + "@types/node": "^18.19.67", "cac": "^6.7.14", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "peerDependencies": { - "vite": "^2.8.1 || 3 || 4 || 5" + "vite": "^2.8.1 || 3 || 4 || 5 || 6" } }, "node_modules/@vavite/multibuild/node_modules/@types/node": { - "version": "18.19.70", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.70.tgz", - "integrity": "sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==", + "version": "18.19.127", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.127.tgz", + "integrity": "sha512-gSjxjrnKXML/yo0BO099uPixMqfpJU0TKYjpfLU7TrtA2WWDki412Np/RSTPRil1saKBhvVVKzVx/p/6p94nVA==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~5.26.4" } @@ -6522,142 +5435,184 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@vinejs/compiler": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-2.5.1.tgz", - "integrity": "sha512-efiO/SCQSMCqz6LDZTI4R3Ceq1ik3K2IqefEbbch+ko4dZncaYmQWJpX/fXVwgmO78jTZuerzD4I2WphPJUCwg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-3.0.0.tgz", + "integrity": "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==", "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/@vinejs/vine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-2.1.0.tgz", - "integrity": "sha512-09aJ2OauxpblqiNqd8qC9RAzzm5SV6fTqZhE4e25j4cM7fmNoXRTjM7Oo8llFADMO4eSA44HqYEO3mkRRYdbYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz", + "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==", "license": "MIT", "dependencies": { - "@poppinss/macroable": "^1.0.2", - "@types/validator": "^13.11.9", - "@vinejs/compiler": "^2.5.0", + "@poppinss/macroable": "^1.0.4", + "@types/validator": "^13.12.2", + "@vinejs/compiler": "^3.0.0", "camelcase": "^8.0.0", - "dayjs": "^1.11.11", + "dayjs": "^1.11.13", "dlv": "^1.1.3", "normalize-url": "^8.0.1", - "validator": "^13.11.0" + "validator": "^13.12.0" }, "engines": { "node": ">=18.16.0" } }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.21.tgz", + "integrity": "sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.28.3", + "@vue/shared": "3.5.21", "entities": "^4.5.0", "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" + "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz", + "integrity": "sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==", "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-core": "3.5.21", + "@vue/shared": "3.5.21" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz", + "integrity": "sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", + "@babel/parser": "^7.28.3", + "@vue/compiler-core": "3.5.21", + "@vue/compiler-dom": "3.5.21", + "@vue/compiler-ssr": "3.5.21", + "@vue/shared": "3.5.21", "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" + "magic-string": "^0.30.18", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz", + "integrity": "sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-dom": "3.5.21", + "@vue/shared": "3.5.21" } }, "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", "dev": true, - "license": "MIT" - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", "license": "MIT", "dependencies": { - "@vue/shared": "3.5.13" + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.21.tgz", + "integrity": "sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.21" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.21.tgz", + "integrity": "sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/reactivity": "3.5.21", + "@vue/shared": "3.5.21" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz", + "integrity": "sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==", "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", + "@vue/reactivity": "3.5.21", + "@vue/runtime-core": "3.5.21", + "@vue/shared": "3.5.21", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.21.tgz", + "integrity": "sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==", "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-ssr": "3.5.21", + "@vue/shared": "3.5.21" }, "peerDependencies": { - "vue": "3.5.13" + "vue": "3.5.21" } }, "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.21.tgz", + "integrity": "sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==", "license": "MIT" }, "node_modules/@webassemblyjs/ast": { @@ -6836,56 +5791,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -6908,19 +5813,6 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "license": "ISC" }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/abstract-logging": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", @@ -6940,10 +5832,31 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6952,6 +5865,20 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6975,20 +5902,6 @@ "node": ">=0.4.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -7060,17 +5973,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -7081,9 +5983,9 @@ } }, "node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.0.tgz", + "integrity": "sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==", "license": "MIT", "dependencies": { "environment": "^1.0.0" @@ -7118,16 +6020,18 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/any-promise": { @@ -7164,173 +6068,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/api-contract-validator": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/api-contract-validator/-/api-contract-validator-2.2.8.tgz", - "integrity": "sha512-YM3rMcrIp8Thf/WWbVBXBGX793Mm3Phw2pn3VbJpiZkpeTCTtF10huKPrzQ2gSIaK5GjAhTRJMAOyf+rsS7MAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "api-schema-builder": "^2.0.10", - "chalk": "^3.0.0", - "columnify": "^1.5.4", - "jest-diff": "^25.5.0", - "jest-matcher-utils": "^25.5.0", - "lodash.flatten": "^4.4.0", - "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "uri-js": "^4.4.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/api-contract-validator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/api-contract-validator/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/api-contract-validator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/api-contract-validator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/api-contract-validator/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/api-contract-validator/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/api-contract-validator/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/api-contract-validator/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/api-contract-validator/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/api-contract-validator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/api-schema-builder": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/api-schema-builder/-/api-schema-builder-2.0.11.tgz", - "integrity": "sha512-85zbwf8MtPWodhfnmQRW5YD/fuGR12FP+8TbcYai5wbRnoUmPYLftLSbp7NB6zQMPb61Gjz+ApPUSyTdcCos7g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ajv": "^6.12.6", - "clone-deep": "^4.0.1", - "decimal.js": "^10.3.1", - "js-yaml": "^3.14.1", - "json-schema-deref-sync": "^0.14.0", - "lodash.get": "^4.4.2", - "openapi-schema-validator": "^3.0.3", - "swagger-parser": "^10.0.3" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", "license": "ISC" }, "node_modules/are-we-there-yet": { @@ -7354,32 +6095,30 @@ "dev": true, "license": "MIT" }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/argon2": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.41.1.tgz", + "integrity": "sha512-dqCW8kJXke8Ik+McUcMDltrbuAWETPyU6iq+4AhxqKphWi7pChB/Zgd/Tp/o8xRLbg8ksMj46F/vph9wnxpTzQ==", + "hasInstallScript": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" + "@phc/format": "^1.0.0", + "node-addon-api": "^8.1.0", + "node-gyp-build": "^4.8.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.17.0" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -7397,28 +6136,6 @@ "node": ">=8" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/as-table": { "version": "1.0.55", "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", @@ -7432,7 +6149,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/assertion-error": { @@ -7480,9 +6197,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "funding": [ { @@ -7500,11 +6217,11 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -7517,22 +6234,6 @@ "postcss": "^8.1.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/aws4": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", @@ -7540,112 +6241,27 @@ "license": "MIT" }, "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-preset-typescript-vue3": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/babel-preset-typescript-vue3/-/babel-preset-typescript-vue3-2.0.17.tgz", - "integrity": "sha512-6AdNf72Jd9OTap9ws12bAehn/GuuBSqUPN+nuOY7XCMckRcvPbO1G+yFvF+ahQsiMCk+gUZwTie1eoQMzeesog==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-typescript-vue3/-/babel-preset-typescript-vue3-2.1.1.tgz", + "integrity": "sha512-1AjtHb2eJzRErgtn7AnHUk1DyKtd5x8t0hntdZIsKvXf9W4fR43+/ZYEawWeiOrAEqWf7BnFMnNVkvbPu7erHg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.3.2", - "@babel/preset-typescript": "^7.3.3", - "@vue/compiler-sfc": "^3.0.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1", + "@babel/preset-typescript": "^7.27.1", + "@vue/compiler-sfc": "^3.5.13" }, "engines": { "node": ">=8.0.0" @@ -7660,26 +6276,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/baseline-browser-mapping": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.6.tgz", + "integrity": "sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } }, "node_modules/basic-auth": { "version": "2.0.1", @@ -7693,6 +6298,12 @@ "node": ">= 0.8" } }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -7714,22 +6325,18 @@ "node": ">= 10.0.0" } }, + "node_modules/bcrypt/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", "license": "MIT" }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -7743,6 +6350,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/birpc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", + "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -7778,6 +6395,52 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7801,6 +6464,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -7812,17 +6505,16 @@ "multicast-dns": "^7.2.5" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" + "node_modules/bowser": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", + "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -7842,9 +6534,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", - "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", "dev": true, "funding": [ { @@ -7862,10 +6554,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -7874,37 +6567,13 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/bundle-name": { "version": "4.1.0", @@ -7936,7 +6605,6 @@ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -7968,29 +6636,10 @@ "node": ">=18" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -8001,13 +6650,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -8016,13 +6665,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/call-me-maybe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true, - "license": "MIT" - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8033,16 +6675,6 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", @@ -8065,23 +6697,10 @@ "node": ">= 6" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001690", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", - "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", "dev": true, "funding": [ { @@ -8099,21 +6718,10 @@ ], "license": "CC-BY-4.0" }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/case-anything": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-3.1.0.tgz", - "integrity": "sha512-rRYnn5Elur8RuNHKoJ2b0tgn+pjYxL7BzWom+JZ7NKKn1lt/yGV/tUNwOovxYa9l9VL5hnXQdMc+mENbhJzosQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-3.1.2.tgz", + "integrity": "sha512-wljhAjDDIv/hM2FzgJnYQg90AWmZMNtESCjTeLH680qTzdo0nErlCxOmgzgX4ZsZAtIvqHyD87ES8QyriXB+BQ==", "license": "MIT", "engines": { "node": ">=18" @@ -8123,9 +6731,9 @@ } }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -8136,81 +6744,43 @@ "pathval": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "devOptional": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" + "node": ">=8" } }, "node_modules/chart.js": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz", - "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz", + "integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8275,22 +6845,6 @@ "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/clamscan": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/clamscan/-/clamscan-2.4.0.tgz", @@ -8404,39 +6958,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -8480,31 +7001,6 @@ "node": ">=8" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -8514,13 +7010,6 @@ "node": ">=0.10.0" } }, - "node_modules/co-compose": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/co-compose/-/co-compose-7.0.3.tgz", - "integrity": "sha512-ZHLSLzeBXe5yaEyIHo9T92uVrbsBRLMXlG0G4/pSm9f6148l4mJTr1cii8Jl9ce+mbLmW5XqHURPC7gZFJNeZA==", - "license": "MIT", - "peer": true - }, "node_modules/code-block-writer": { "version": "13.0.3", "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz", @@ -8529,20 +7018,21 @@ "license": "MIT" }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-support": { @@ -8554,33 +7044,12 @@ "color-support": "bin.js" } }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "license": "MIT" }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -8613,7 +7082,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "devOptional": true, + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8633,9 +7102,9 @@ } }, "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", "dev": true, "license": "MIT", "dependencies": { @@ -8643,7 +7112,7 @@ "compressible": "~2.0.18", "debug": "2.6.9", "negotiator": "~0.6.4", - "on-headers": "~1.0.2", + "on-headers": "~1.1.0", "safe-buffer": "5.2.1", "vary": "~1.1.2" }, @@ -8678,27 +7147,6 @@ "node": ">= 0.6" } }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -8715,33 +7163,12 @@ "node": ">=0.8" } }, - "node_modules/consola": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.3.3.tgz", - "integrity": "sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -8754,31 +7181,10 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -8802,16 +7208,16 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", "license": "MIT", - "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=18" } }, "node_modules/cookie-signature": { @@ -8825,13 +7231,29 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "devOptional": true, + "dev": true, "license": "MIT" }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/copy-file": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz", - "integrity": "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.1.0.tgz", + "integrity": "sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -8845,20 +7267,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-js-compat": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", - "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -8893,26 +7301,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/cpy": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/cpy/-/cpy-11.1.0.tgz", @@ -8968,23 +7356,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/crypto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", - "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.", - "license": "ISC" - }, "node_modules/csrf": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", @@ -8999,176 +7370,6 @@ "node": ">= 0.8" } }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-7.0.0.tgz", - "integrity": "sha512-niy66jxsQHqO+EYbhPuIhqRQ1mNcNVUHrMnkzzir9kFOERJUaQDDRhh7dKDz33kBpkWMF9M8Vx0QlDbc5AHOsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "cssnano": "^7.0.1", - "jest-worker": "^29.7.0", - "postcss": "^8.4.38", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -9182,201 +7383,18 @@ "node": ">=4" } }, - "node_modules/cssnano": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^7.0.6", - "lilconfig": "^3.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.2", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.4", - "postcss-discard-comments": "^7.0.3", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.4", - "postcss-merge-rules": "^7.0.4", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.4", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.3" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/cuid": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", - "integrity": "sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==", - "deprecated": "Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead.", - "license": "MIT" - }, - "node_modules/dag-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", - "integrity": "sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==", - "dev": true, - "license": "MIT" - }, "node_modules/data-uri-to-buffer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", "license": "MIT" }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/dateformat": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", @@ -9388,15 +7406,15 @@ } }, "node_modules/dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", "license": "MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -9419,13 +7437,6 @@ "node": ">=0.10.0" } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true, - "license": "MIT" - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -9454,9 +7465,9 @@ } }, "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", "devOptional": true, "license": "MIT", "peerDependencies": { @@ -9545,29 +7556,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -9577,24 +7565,6 @@ "node": ">=10" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -9608,24 +7578,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9670,9 +7622,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -9689,7 +7641,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "asap": "^2.0.0", @@ -9713,16 +7665,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", @@ -9790,99 +7732,10 @@ "node": ">=6.0.0" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -9912,9 +7765,9 @@ } }, "node_modules/dotenv-webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.0.tgz", - "integrity": "sha512-owK1JcsPkIobeqjVrk6h7jPED/W6ZpdFsMPR+5ursB7/SdgDyO+VzAU+szK8C8u3qUhtENyYnj8eyXMR5kkGag==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-8.1.1.tgz", + "integrity": "sha512-+TY/AJ2k9bU2EML3mxgLmaAvEcqs1Wbv6deCIUSI3eW3Xeo8LBQumYib6puyaSwbjC9JCzg/y5Pwjd/lePX04w==", "dev": true, "license": "MIT", "dependencies": { @@ -9949,36 +7802,36 @@ "license": "MIT" }, "node_modules/edge-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/edge-error/-/edge-error-4.0.1.tgz", - "integrity": "sha512-z5mNO97k8hRVpJ6Ew1qbkMTfQ44CwuWnl+ShMCrEFgD+b324CnjBS6HbiR+Wh6Wcmw9C+/XsFBHzZ+376PpD/w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/edge-error/-/edge-error-4.0.2.tgz", + "integrity": "sha512-jB76VYn8wapDHKHSOmP3vbKLoa77RJYsTLNmfl8+cuCD69uxZtP3h+kqV+Prw/YkYmN7yHyp4IApE15pDByk0A==", "license": "MIT", "engines": { "node": ">=18.16.0" } }, "node_modules/edge-lexer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/edge-lexer/-/edge-lexer-6.0.2.tgz", - "integrity": "sha512-C30wqcw66JwpepLnsTqTp0P4JqKa2xEbAfNj3dPOvBYq4zybiYuhlpSzExvNUeoAAnbjgozgVTVAQ38HctyV4g==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/edge-lexer/-/edge-lexer-6.0.3.tgz", + "integrity": "sha512-/s15CNnfhZv97bsW+ZgV5rtONULYjhCDYu+usbVLqZ8UQ6b/hQUNvQSIQBXA6Gql9dm72TMBB9sb/eWM2esufg==", "license": "MIT", "dependencies": { - "edge-error": "^4.0.1" + "edge-error": "^4.0.2" }, "engines": { "node": ">=18.16.0" } }, "node_modules/edge-parser": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/edge-parser/-/edge-parser-9.0.3.tgz", - "integrity": "sha512-E9W+9wV8QVGLZCtrgKp6k9kIncsUxmrpa/yG+vwVGPpCMBZZZZaShJXwVDHThyL2mkHkWyYvhBpPhuucgW8kiA==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/edge-parser/-/edge-parser-9.0.4.tgz", + "integrity": "sha512-vnjzfpqpjM4Mjt9typc1zLoFpC1F6kAObfcdyA6rSy+izIPji2RaQz5jWx5s5iG9hNcuyjtNyGRCLFVfoYhWcA==", "license": "MIT", "dependencies": { - "acorn": "^8.12.1", + "acorn": "^8.14.0", "astring": "^1.9.0", - "edge-error": "^4.0.1", - "edge-lexer": "^6.0.2", + "edge-error": "^4.0.2", + "edge-lexer": "^6.0.3", "js-stringify": "^1.0.2" }, "engines": { @@ -9986,18 +7839,18 @@ } }, "node_modules/edge.js": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-6.2.0.tgz", - "integrity": "sha512-xw82TzdPngccJiFqK6FE/79vO6mUvWVvKe6OEu/VHDOf199SIOW1q022d3UIaKGXcwf60lIXZYPIRqooQuzigA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-6.3.0.tgz", + "integrity": "sha512-Xm7XW6J2+6cvfRK6AJEKV5hBF230iCvwQRg5wattg+RAzQ6tRwWSe4gqCsvvCaHt4xp10xkm8+ZdhApF1FVCzA==", "license": "MIT", "dependencies": { "@poppinss/inspect": "^1.0.1", - "@poppinss/macroable": "^1.0.3", - "@poppinss/utils": "^6.8.1", + "@poppinss/macroable": "^1.0.4", + "@poppinss/utils": "^6.9.2", "classnames": "^2.5.1", - "edge-error": "^4.0.1", - "edge-lexer": "^6.0.2", - "edge-parser": "^9.0.3", + "edge-error": "^4.0.2", + "edge-lexer": "^6.0.3", + "edge-parser": "^9.0.4", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "js-stringify": "^1.0.2", @@ -10015,16 +7868,16 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.79", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.79.tgz", - "integrity": "sha512-nYOxJNxQ9Om4EC88BE4pPoNI8xwSFf8pU/BAeOl4Hh/b/i6V4biTAzwV7pXi3ARKeoYO5JZKMIXTryXSVer5RA==", + "version": "1.5.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.222.tgz", + "integrity": "sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==", "dev": true, "license": "ISC" }, "node_modules/emittery": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.3.tgz", - "integrity": "sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.2.0.tgz", + "integrity": "sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==", "license": "MIT", "engines": { "node": ">=14.16" @@ -10034,34 +7887,24 @@ } }, "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.5.0.tgz", + "integrity": "sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==", "license": "MIT" }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10069,9 +7912,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", - "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -10117,20 +7960,6 @@ "node": ">=6" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/environment": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", @@ -10144,100 +7973,24 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, "node_modules/error-stack-parser-es": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", - "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -10257,15 +8010,15 @@ } }, "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -10278,7 +8031,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10290,61 +8042,45 @@ "node": ">= 0.4" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.10", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.10", + "@esbuild/android-arm": "0.25.10", + "@esbuild/android-arm64": "0.25.10", + "@esbuild/android-x64": "0.25.10", + "@esbuild/darwin-arm64": "0.25.10", + "@esbuild/darwin-x64": "0.25.10", + "@esbuild/freebsd-arm64": "0.25.10", + "@esbuild/freebsd-x64": "0.25.10", + "@esbuild/linux-arm": "0.25.10", + "@esbuild/linux-arm64": "0.25.10", + "@esbuild/linux-ia32": "0.25.10", + "@esbuild/linux-loong64": "0.25.10", + "@esbuild/linux-mips64el": "0.25.10", + "@esbuild/linux-ppc64": "0.25.10", + "@esbuild/linux-riscv64": "0.25.10", + "@esbuild/linux-s390x": "0.25.10", + "@esbuild/linux-x64": "0.25.10", + "@esbuild/netbsd-arm64": "0.25.10", + "@esbuild/netbsd-x64": "0.25.10", + "@esbuild/openbsd-arm64": "0.25.10", + "@esbuild/openbsd-x64": "0.25.10", + "@esbuild/openharmony-arm64": "0.25.10", + "@esbuild/sunos-x64": "0.25.10", + "@esbuild/win32-arm64": "0.25.10", + "@esbuild/win32-ia32": "0.25.10", + "@esbuild/win32-x64": "0.25.10" } }, "node_modules/escalade": { @@ -10375,13 +8111,16 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { @@ -10442,14 +8181,17 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -10472,14 +8214,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -10490,7 +8232,7 @@ "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", - "eslint-config-prettier": "*", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { @@ -10532,134 +8274,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", @@ -10761,16 +8375,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -10784,29 +8388,30 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz", - "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", "devOptional": true, "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.6", "figures": "^6.1.0", "get-stream": "^9.0.0", - "human-signals": "^8.0.0", + "human-signals": "^8.0.1", "is-plain-obj": "^4.1.0", "is-stream": "^4.0.1", "npm-run-path": "^6.0.0", - "pretty-ms": "^9.0.0", + "pretty-ms": "^9.2.0", "signal-exit": "^4.1.0", "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" + "yoctocolors": "^2.1.1" }, "engines": { "node": "^18.19.0 || >=20.5.0" @@ -10882,14 +8487,37 @@ "ms": "2.0.0" } }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/express/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/express/node_modules/ms": { @@ -10915,26 +8543,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/express/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } }, "node_modules/fast-copy": { "version": "3.0.2", @@ -11013,12 +8634,13 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", - "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -11032,6 +8654,24 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -11042,9 +8682,9 @@ } }, "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -11063,6 +8703,29 @@ "node": ">=0.8.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, "node_modules/figures": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", @@ -11093,15 +8756,15 @@ } }, "node_modules/file-type": { - "version": "19.6.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-19.6.0.tgz", - "integrity": "sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.5.0.tgz", + "integrity": "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==", "license": "MIT", "dependencies": { - "get-stream": "^9.0.1", - "strtok3": "^9.0.1", + "@tokenizer/inflate": "^0.2.6", + "strtok3": "^10.2.0", "token-types": "^6.0.0", - "uint8array-extras": "^1.3.0" + "uint8array-extras": "^1.4.0" }, "engines": { "node": ">=18" @@ -11151,16 +8814,6 @@ "ms": "2.0.0" } }, - "node_modules/finalhandler/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -11168,18 +8821,18 @@ "dev": true, "license": "MIT" }, - "node_modules/find-cache-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-5.0.0.tgz", - "integrity": "sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==", + "node_modules/find-cache-directory": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz", + "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==", "devOptional": true, "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" + "pkg-dir": "^8.0.0" }, "engines": { - "node": ">=16" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11202,6 +8855,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-up/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -11263,17 +8929,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "bin": { - "flat": "cli.js" - } - }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -11289,17 +8944,10 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", - "license": "MIT", - "peer": true - }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, @@ -11312,19 +8960,50 @@ "node": ">=8" } }, + "node_modules/flydrive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flydrive/-/flydrive-1.3.0.tgz", + "integrity": "sha512-B0wsqrZR76d+J2ce6AxNcA1JDo4pViluaaFp5Fjso52zGY+s19uF8rKsQS8TJJsiyySKPI1b8K1w2j3RAUxd1Q==", + "license": "MIT", + "dependencies": { + "@humanwhocodes/retry": "^0.4.3", + "@poppinss/utils": "^6.10.0", + "etag": "^1.8.1", + "mime-types": "^3.0.1" + }, + "engines": { + "node": ">=20.6.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.577.0", + "@aws-sdk/s3-request-presigner": "^3.577.0", + "@google-cloud/storage": "^7.10.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-s3": { + "optional": true + }, + "@aws-sdk/s3-request-presigner": { + "optional": true + }, + "@google-cloud/storage": { + "optional": true + } + } + }, "node_modules/focus-trap": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.2.tgz", - "integrity": "sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", + "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", "license": "MIT", "dependencies": { "tabbable": "^6.2.0" } }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -11341,24 +9020,14 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -11369,13 +9038,15 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -11383,14 +9054,35 @@ } }, "node_modules/form-data-encoder": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", - "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", + "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", "license": "MIT", "engines": { "node": ">= 18" } }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/formdata-node": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz", @@ -11401,14 +9093,14 @@ } }, "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "devOptional": true, + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", + "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==", + "dev": true, "license": "MIT", "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", "once": "^1.4.0", "qs": "^6.11.0" }, @@ -11449,9 +9141,9 @@ } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -11492,12 +9184,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "license": "Unlicense" - }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -11533,37 +9219,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -11620,21 +9275,13 @@ "node": ">=8" } }, - "node_modules/generic-pool": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", - "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } @@ -11649,9 +9296,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", "license": "MIT", "engines": { "node": ">=18" @@ -11661,17 +9308,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -11745,24 +9392,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/getopts": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.3.0.tgz", @@ -11802,6 +9431,23 @@ "node": ">=10.13.0" } }, + "node_modules/glob-to-regex.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", + "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -11810,45 +9456,34 @@ "license": "BSD-2-Clause" }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "devOptional": true, "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" + "unicorn-magic": "^0.3.0" }, "engines": { "node": ">=18" @@ -11870,6 +9505,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -11883,9 +9528,9 @@ } }, "node_modules/got": { - "version": "14.4.5", - "resolved": "https://registry.npmjs.org/got/-/got-14.4.5.tgz", - "integrity": "sha512-sq+uET8TnNKRNnjEOPJzMcxeI0irT8BBNmf+GtZcJpmhYsQM1DSKmCROUjPWKsXZ5HzwD5Cf5/RV+QD9BSTxJg==", + "version": "14.4.9", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.9.tgz", + "integrity": "sha512-Dbu075Jwm3QwNCIoCenqkqY8l2gd7e/TanuhMbzZIEsb1mpAneImSusKhZ+XdqqC3S91SDV/1SdWpGXKAlm8tA==", "license": "MIT", "dependencies": { "@sindresorhus/is": "^7.0.1", @@ -11907,6 +9552,18 @@ "url": "https://github.com/sindresorhus/got?sponsor=1" } }, + "node_modules/got/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -11927,57 +9584,16 @@ "dev": true, "license": "MIT" }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -11994,7 +9610,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -12031,13 +9646,6 @@ "node": ">= 0.4" } }, - "node_modules/haye": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/haye/-/haye-3.0.0.tgz", - "integrity": "sha512-yWxbPdeex78IR3x3X/DdqkZbVG4rP4UaRdUGmpClfnUh1C61mASt7Iav8vk2tXcTMSygBHDDfgoVqk68NJqzhQ==", - "license": "MIT", - "peer": true - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -12047,16 +9655,6 @@ "he": "bin/he" } }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/helmet-csp": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-3.4.0.tgz", @@ -12073,14 +9671,45 @@ "dev": true, "license": "MIT" }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "devOptional": true, - "license": "MIT", + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hot-hook": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/hot-hook/-/hot-hook-0.4.0.tgz", + "integrity": "sha512-D36jqIojBHqxfkel6r7QGfmal7HO3cFTnPKeZIpPsBtFdV3QPV7m42JTBDX3B/Ovi53RXbOix7t/uIeV2bfeRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.1", + "fast-glob": "^3.3.2", + "parse-imports": "^2.2.1", + "picomatch": "^4.0.2", + "read-package-up": "^11.0.0" } }, "node_modules/hpack.js": { @@ -12096,13 +9725,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -12119,6 +9741,13 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -12139,9 +9768,9 @@ } }, "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "funding": [ { "type": "github", @@ -12154,40 +9783,10 @@ ], "license": "MIT" }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { @@ -12214,9 +9813,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "dev": true, "license": "MIT" }, @@ -12236,9 +9835,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12306,9 +9905,9 @@ } }, "node_modules/human-signals": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz", - "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "devOptional": true, "license": "Apache-2.0", "engines": { @@ -12377,28 +9976,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ieee754": { @@ -12434,16 +10024,16 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12457,101 +10047,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -12562,6 +10057,19 @@ "node": ">=0.8.19" } }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflation": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", @@ -12588,21 +10096,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -12613,12 +10106,12 @@ } }, "node_modules/ioredis": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.2.tgz", - "integrity": "sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.7.0.tgz", + "integrity": "sha512-NUcA93i1lukyXU+riqEyPtSEkyFq8tX90uL659J+qpCZ3rEdViB/APC58oAhIh3+bJln2hzdlZbBZsGNrlsR8g==", "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", + "@ioredis/commands": "^1.3.0", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", @@ -12645,24 +10138,6 @@ "node": ">= 0.10" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12670,41 +10145,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-async-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", - "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -12718,43 +10158,6 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -12770,41 +10173,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -12830,22 +10198,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -12858,25 +10210,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -12908,59 +10241,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-invalid-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz", - "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-invalid-path/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-network-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", - "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", "dev": true, "license": "MIT", "engines": { @@ -12979,23 +10263,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -13019,67 +10286,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", @@ -13092,57 +10298,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-unicode-supported": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", @@ -13156,63 +10311,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-valid-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz", - "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-invalid-path": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12.13" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/mesqueeb" } }, "node_modules/is-wsl": { @@ -13232,9 +10341,9 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, @@ -13245,16 +10354,6 @@ "devOptional": true, "license": "ISC" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -13272,375 +10371,28 @@ } }, "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "version": "30.1.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.1.2.tgz", + "integrity": "sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ==", "devOptional": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.0.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz", - "integrity": "sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "jest-diff": "^25.5.0", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/diff-sequences": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-25.2.6.tgz", - "integrity": "sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/jest-diff": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-25.5.0.tgz", - "integrity": "sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "diff-sequences": "^25.2.6", - "jest-get-type": "^25.2.6", - "pretty-format": "^25.5.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/jest-get-type": { - "version": "25.2.6", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", - "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/jest-util/node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -13654,7 +10406,9 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -13666,13 +10420,13 @@ } }, "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "devOptional": true, "license": "MIT", "bin": { - "jiti": "bin/jiti.js" + "jiti": "lib/jiti-cli.mjs" } }, "node_modules/joycon": { @@ -13699,13 +10453,13 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" @@ -13737,26 +10491,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema-deref-sync": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/json-schema-deref-sync/-/json-schema-deref-sync-0.14.0.tgz", - "integrity": "sha512-yGR1xmhdiD6R0MSrwWcFxQzAj5b3i5Gb/mt5tvQKgFMMeNe0KZYNEN/jWr7G+xn39Azqgcvk4ZKMs8dQl8e4wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "dag-map": "~1.0.0", - "is-valid-path": "^0.1.1", - "lodash": "^4.17.13", - "md5": "~2.2.0", - "memory-cache": "~0.2.0", - "traverse": "~0.6.6", - "valid-url": "~1.0.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -13772,9 +10506,9 @@ "license": "MIT" }, "node_modules/json11": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json11/-/json11-2.0.0.tgz", - "integrity": "sha512-VuKJKUSPEJape+daTm70Nx7vdcdorf4S6LCyN2z0jUVH4UrQ4ftXo2kC0bnHpCREmxHuHqCNVPA75BjI3CB6Ag==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/json11/-/json11-2.0.2.tgz", + "integrity": "sha512-HIrd50UPYmP6sqLuLbFVm75g16o0oZrVfxrsY0EEys22klz8mRoWlX9KAEDOSOR9Q34rcxsyC8oDveGrCz5uLQ==", "license": "MIT", "bin": { "json11": "dist/cli.mjs" @@ -13786,6 +10520,7 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "json5": "lib/cli.js" }, @@ -13794,9 +10529,9 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -13836,15 +10571,6 @@ "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -13951,14 +10677,14 @@ } }, "node_modules/launch-editor": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", + "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", "dev": true, "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/leaflet": { @@ -14012,21 +10738,6 @@ "node": ">=6.11.5" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -14048,17 +10759,10 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, "node_modules/lodash.defaults": { @@ -14067,39 +10771,12 @@ "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "license": "MIT" }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -14107,20 +10784,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-update": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", @@ -14141,9 +10804,9 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -14153,9 +10816,9 @@ } }, "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { "node": ">=12" @@ -14165,12 +10828,12 @@ } }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" @@ -14180,9 +10843,9 @@ } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -14196,9 +10859,9 @@ } }, "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -14211,21 +10874,12 @@ } }, "node_modules/loupe": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", - "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -14244,33 +10898,27 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "yallist": "^3.0.2" } }, "node_modules/luxon": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", - "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "license": "MIT", "engines": { "node": ">=12" } }, - "node_modules/macroable": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/macroable/-/macroable-7.0.2.tgz", - "integrity": "sha512-QS9p+Q20YBxpE0dJBnF6CPURP7p1GUsxnhTxTWH5nG3A1F5w8Rg3T4Xyh5UlrFSbHp88oOciVP/0agsNLhkHdQ==", - "license": "MIT", - "peer": true - }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/mailcheck": { @@ -14293,15 +10941,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -14318,54 +10957,45 @@ "node": ">= 0.4" } }, - "node_modules/md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.42.0.tgz", + "integrity": "sha512-RG+4HMGyIVp6UWDWbFmZ38yKrSzblPnfJu0PyPt0hw52KW4PPlPp+HdV4qZBG0hLDuYVnf8wfQT4NymKXnlQjA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, "engines": { "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/memoize": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.0.0.tgz", - "integrity": "sha512-H6cBLgsi6vMWOcCpvVCdFFnl3kerEXbrYh9q+lY6VXvQSmM6CkmV08VOwT+WE2tzIEqRPFfAq3fm4v/UIW6mSA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/memoize/-/memoize-10.1.0.tgz", + "integrity": "sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==", "devOptional": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "mimic-function": "^5.0.1" }, "engines": { "node": ">=18" @@ -14374,13 +11004,6 @@ "url": "https://github.com/sindresorhus/memoize?sponsor=1" } }, - "node_modules/memory-cache": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-cache/-/memory-cache-0.2.0.tgz", - "integrity": "sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -14395,7 +11018,9 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/merge2": { "version": "1.4.1", @@ -14411,7 +11036,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -14443,9 +11068,9 @@ } }, "node_modules/mime": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz", - "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "funding": [ "https://github.com/sponsors/broofa" ], @@ -14458,21 +11083,21 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" @@ -14502,27 +11127,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", @@ -14662,9 +11266,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -14710,16 +11314,6 @@ "license": "MIT", "peer": true }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-2fa": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/node-2fa/-/node-2fa-2.0.3.tgz", @@ -14733,10 +11327,15 @@ } }, "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "license": "MIT" + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } }, "node_modules/node-exceptions": { "version": "4.0.1", @@ -14774,17 +11373,30 @@ "node": ">= 6.13.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", "dev": true, "license": "MIT" }, "node_modules/nodemailer": { - "version": "6.9.16", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.16.tgz", - "integrity": "sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -14805,6 +11417,34 @@ "node": ">=6" } }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14826,9 +11466,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -14887,19 +11527,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -14913,25 +11540,6 @@ "set-blocking": "^2.0.0" } }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/numeral": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", @@ -14962,9 +11570,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -14973,37 +11581,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -15033,9 +11610,9 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, "license": "MIT", "engines": { @@ -15067,16 +11644,16 @@ } }, "node_modules/open": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dev": true, "license": "MIT", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" + "wsl-utils": "^0.1.0" }, "engines": { "node": ">=18" @@ -15085,26 +11662,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/openapi-schema-validator": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/openapi-schema-validator/-/openapi-schema-validator-3.0.3.tgz", - "integrity": "sha512-KKpeNEvAmpy6B2JCfyrM4yWjL6vggDCVbBoR8Yfkj0Jltc6PCW+dBbcg+1yrTCuDv80qBQJ6w0ejA71DlOFegA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.5.2", - "lodash.merge": "^4.6.1", - "openapi-types": "1.3.4", - "swagger-schema-official": "2.0.0-bab6bed" - } - }, - "node_modules/openapi-types": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.4.tgz", - "integrity": "sha512-h8rADpW3k/wepLdERKF0VKMAPdoFYNQCLGPmc/f8sgQ2dxUy+7sY4WAX2XDUDjhKTjbJVbxxofLkzy7f1/tE4g==", - "dev": true, - "license": "MIT" - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -15123,24 +11680,6 @@ "node": ">= 0.8.0" } }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/p-cancelable": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", @@ -15273,19 +11812,13 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.8.tgz", - "integrity": "sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==", - "license": "MIT" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "devOptional": true, "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "quansync": "^0.2.7" } }, "node_modules/parent-module": { @@ -15355,16 +11888,6 @@ "node": ">= 0.8" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -15372,16 +11895,6 @@ "devOptional": true, "license": "MIT" }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -15448,58 +11961,52 @@ "license": "MIT" }, "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "devOptional": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { "node": ">= 14.16" } }, - "node_modules/peek-readable": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.3.1.tgz", - "integrity": "sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true, + "license": "MIT" }, "node_modules/pg": { - "version": "8.13.1", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", - "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.0", - "pg-protocol": "^1.7.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.1.1" + "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -15511,9 +12018,9 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", - "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", "license": "MIT", "optional": true }, @@ -15533,18 +12040,18 @@ } }, "node_modules/pg-pool": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", - "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", - "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", "license": "MIT" }, "node_modules/pg-types": { @@ -15564,9 +12071,9 @@ } }, "node_modules/pg/node_modules/pg-connection-string": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", - "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", "license": "MIT" }, "node_modules/pgpass": { @@ -15585,10 +12092,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "devOptional": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -15608,14 +12114,13 @@ } }, "node_modules/pinia": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz", - "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" + "@vue/devtools-api": "^7.7.2" }, "funding": { "url": "https://github.com/sponsors/posva" @@ -15631,19 +12136,22 @@ } }, "node_modules/pino": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", - "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.10.0.tgz", + "integrity": "sha512-VOFxoNnxICtxaN8S3E73pR66c5MTFC+rwRcNRyHV/bV/c90dXvJqMfjkeRFsGBDXmlUN3LccJQPqGIufnaJePA==", "license": "MIT", - "peer": true, "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "process-warning": "^1.0.0", + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" @@ -15659,9 +12167,9 @@ } }, "node_modules/pino-pretty": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.3.0.tgz", - "integrity": "sha512-oXwn7ICywaZPHmu3epHGU2oJX4nPmKvHvB/bwrJHlGcbEWaVcotkpyVHMKLKmiVryWYByNp0jpgAcXpFJDXJzA==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.1.tgz", + "integrity": "sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==", "dev": true, "license": "MIT", "dependencies": { @@ -15675,79 +12183,37 @@ "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", - "readable-stream": "^4.0.0", - "secure-json-parse": "^2.4.0", + "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", - "strip-json-comments": "^3.1.1" + "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, - "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "node_modules/pino-pretty/node_modules/secure-json-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", + "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", "dev": true, "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/pino-pretty/node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "dev": true, - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", - "license": "MIT", - "peer": true - }, - "node_modules/pino/node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "license": "MIT", - "peer": true, - "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, "engines": { "node": ">=14.16" }, @@ -15755,33 +12221,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", + "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", "devOptional": true, "license": "MIT", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "find-up-simple": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -15800,20 +12271,10 @@ "node": ">=10.13.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -15830,7 +12291,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15838,128 +12299,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-calc": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.0.tgz", - "integrity": "sha512-uQ/LDGsf3mgsSUEXmAt3VsCSHR3aKqtEIkmB+4PhzYwRYOW5MZs/GhCCFpsOtJJkP6EC6uGipbrnaTjqaJZcJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12 || ^20.9 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.38" - } - }, - "node_modules/postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-import": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", @@ -15979,10 +12318,20 @@ } }, "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -15990,10 +12339,6 @@ "engines": { "node": "^12 || ^14 || >= 16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.4.21" } @@ -16035,15 +12380,15 @@ } }, "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", + "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", "dev": true, "license": "MIT", "dependencies": { "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" + "jiti": "^2.5.1", + "semver": "^7.6.2" }, "engines": { "node": ">= 18.12.0" @@ -16066,200 +12411,17 @@ } } }, - "node_modules/postcss-merge-longhand": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.4" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=10" } }, "node_modules/postcss-nested": { @@ -16288,260 +12450,7 @@ "postcss": "^8.2.14" } }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-ordered-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, "node_modules/postcss-selector-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", - "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", @@ -16612,9 +12521,9 @@ } }, "node_modules/prettier": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", - "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -16640,30 +12549,19 @@ "node": ">=6.0.0" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz", + "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==", "devOptional": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -16689,9 +12587,9 @@ } }, "node_modules/pretty-ms": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", - "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -16710,16 +12608,6 @@ "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", "license": "Unlicense" }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -16728,11 +12616,20 @@ "license": "MIT" }, "node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", - "license": "MIT", - "peer": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/property-information": { "version": "6.5.0", @@ -16764,9 +12661,9 @@ "license": "MIT" }, "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, "license": "MIT", "dependencies": { @@ -16802,12 +12699,12 @@ } }, "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -16816,6 +12713,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16870,6 +12784,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } @@ -16884,18 +12799,18 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.7.0", "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, "node_modules/react-is": { @@ -16915,6 +12830,101 @@ "pify": "^2.3.0" } }, + "node_modules/read-package-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-package-up/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -16930,13 +12940,13 @@ } }, "node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "devOptional": true, "license": "MIT", "engines": { - "node": ">= 14.16.0" + "node": ">= 14.18.0" }, "funding": { "type": "individual", @@ -16965,20 +12975,19 @@ } }, "node_modules/redis": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.0.tgz", - "integrity": "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/redis/-/redis-5.8.2.tgz", + "integrity": "sha512-31vunZj07++Y1vcFGcnNWEf5jPoTkGARgfWI4+Tk55vdwHxhAvug8VEtW7Cx+/h47NuJTEg/JL77zAwC6E0OeA==", "license": "MIT", - "workspaces": [ - "./packages/*" - ], "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.6.0", - "@redis/graph": "1.1.1", - "@redis/json": "1.0.7", - "@redis/search": "1.2.0", - "@redis/time-series": "1.1.0" + "@redis/bloom": "5.8.2", + "@redis/client": "5.8.2", + "@redis/json": "5.8.2", + "@redis/search": "5.8.2", + "@redis/time-series": "5.8.2" + }, + "engines": { + "node": ">= 18" } }, "node_modules/redis-errors": { @@ -17008,168 +13017,6 @@ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-all": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/require-all/-/require-all-3.0.0.tgz", - "integrity": "sha512-jPGN876lc5exWYrMcgZSd7U42P0PmVQzxnQB13fCSzmyGnqQWW4WUz5DosZ/qe24hz+5o9lSvW2epBNZ1xa6Fw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -17228,31 +13075,6 @@ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "license": "MIT" }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -17263,30 +13085,6 @@ "node": ">=4" } }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", @@ -17329,15 +13127,22 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -17361,13 +13166,12 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", - "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", + "version": "4.51.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.51.0.tgz", + "integrity": "sha512-7cR0XWrdp/UAj2HMY/Y4QQEUjidn3l2AY1wSeZoFjMbD8aOMPoV9wgTFYbrJpPzzvejDEini1h3CiUP8wLzxQA==", "license": "MIT", - "peer": true, "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -17377,32 +13181,34 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.30.1", - "@rollup/rollup-android-arm64": "4.30.1", - "@rollup/rollup-darwin-arm64": "4.30.1", - "@rollup/rollup-darwin-x64": "4.30.1", - "@rollup/rollup-freebsd-arm64": "4.30.1", - "@rollup/rollup-freebsd-x64": "4.30.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", - "@rollup/rollup-linux-arm-musleabihf": "4.30.1", - "@rollup/rollup-linux-arm64-gnu": "4.30.1", - "@rollup/rollup-linux-arm64-musl": "4.30.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", - "@rollup/rollup-linux-riscv64-gnu": "4.30.1", - "@rollup/rollup-linux-s390x-gnu": "4.30.1", - "@rollup/rollup-linux-x64-gnu": "4.30.1", - "@rollup/rollup-linux-x64-musl": "4.30.1", - "@rollup/rollup-win32-arm64-msvc": "4.30.1", - "@rollup/rollup-win32-ia32-msvc": "4.30.1", - "@rollup/rollup-win32-x64-msvc": "4.30.1", + "@rollup/rollup-android-arm-eabi": "4.51.0", + "@rollup/rollup-android-arm64": "4.51.0", + "@rollup/rollup-darwin-arm64": "4.51.0", + "@rollup/rollup-darwin-x64": "4.51.0", + "@rollup/rollup-freebsd-arm64": "4.51.0", + "@rollup/rollup-freebsd-x64": "4.51.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.51.0", + "@rollup/rollup-linux-arm-musleabihf": "4.51.0", + "@rollup/rollup-linux-arm64-gnu": "4.51.0", + "@rollup/rollup-linux-arm64-musl": "4.51.0", + "@rollup/rollup-linux-loong64-gnu": "4.51.0", + "@rollup/rollup-linux-ppc64-gnu": "4.51.0", + "@rollup/rollup-linux-riscv64-gnu": "4.51.0", + "@rollup/rollup-linux-riscv64-musl": "4.51.0", + "@rollup/rollup-linux-s390x-gnu": "4.51.0", + "@rollup/rollup-linux-x64-gnu": "4.51.0", + "@rollup/rollup-linux-x64-musl": "4.51.0", + "@rollup/rollup-openharmony-arm64": "4.51.0", + "@rollup/rollup-win32-arm64-msvc": "4.51.0", + "@rollup/rollup-win32-ia32-msvc": "4.51.0", + "@rollup/rollup-win32-x64-msvc": "4.51.0", "fsevents": "~2.3.2" } }, "node_modules/run-applescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "dev": true, "license": "MIT", "engines": { @@ -17436,67 +13242,26 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -17521,21 +13286,10 @@ "axios": "^1.5.1" } }, - "node_modules/saxon-js/node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17617,15 +13371,12 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/send": { @@ -17667,6 +13418,15 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -17679,41 +13439,30 @@ "node": ">=4" } }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, "node_modules/serialize-error": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", - "integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-12.0.0.tgz", + "integrity": "sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==", "devOptional": true, "license": "MIT", "dependencies": { - "type-fest": "^2.12.2" + "type-fest": "^4.31.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/serialize-error/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12.20" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -17725,6 +13474,7 @@ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -17791,6 +13541,29 @@ "dev": true, "license": "ISC" }, + "node_modules/serve-index/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -17830,96 +13603,18 @@ "node": ">= 0.8.0" } }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, - "node_modules/set-cookie-parser": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", - "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -17944,9 +13639,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", "engines": { @@ -18075,9 +13770,9 @@ } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { "node": ">=12" @@ -18095,16 +13790,6 @@ "node": ">=8.0.0" } }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -18117,12 +13802,21 @@ "websocket-driver": "^0.7.4" } }, - "node_modules/sonic-boom": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", - "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "license": "MIT", - "peer": true, "dependencies": { "atomic-sleep": "^1.0.0" } @@ -18157,11 +13851,48 @@ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -18194,6 +13925,16 @@ "wbuf": "^1.7.3" } }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split-lines": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz", @@ -18221,13 +13962,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true, - "license": "MIT" - }, "node_modules/stacktracey": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", @@ -18262,26 +13996,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -18333,9 +14047,9 @@ } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -18345,9 +14059,9 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -18359,65 +14073,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/stringify-attributes": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/stringify-attributes/-/stringify-attributes-4.0.0.tgz", @@ -18485,71 +14140,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/strtok3": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-9.1.1.tgz", - "integrity": "sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "license": "MIT", "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.3.1" + "@tokenizer/token": "^0.3.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "funding": { "type": "github", "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -18574,9 +14192,9 @@ } }, "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18644,8 +14262,8 @@ "version": "8.1.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "deprecated": "Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net", - "devOptional": true, + "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "dev": true, "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", @@ -18667,7 +14285,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "devOptional": true, + "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -18676,10 +14294,37 @@ "node": ">=4.0.0" } }, + "node_modules/superagent/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/supertest": { "version": "6.3.4", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net", "dev": true, "license": "MIT", "dependencies": { @@ -18691,13 +14336,12 @@ } }, "node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "devOptional": true, + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" @@ -18715,166 +14359,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/swagger-parser": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", - "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@apidevtools/swagger-parser": "10.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swagger-parser/node_modules/@apidevtools/swagger-parser": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz", - "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@apidevtools/json-schema-ref-parser": "^9.0.6", - "@apidevtools/openapi-schemas": "^2.0.4", - "@apidevtools/swagger-methods": "^3.0.2", - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "z-schema": "^5.0.1" - }, - "peerDependencies": { - "openapi-types": ">=7" - } - }, - "node_modules/swagger-parser/node_modules/openapi-types": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/swagger-schema-official": { - "version": "2.0.0-bab6bed", - "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", - "integrity": "sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==", - "dev": true, - "license": "ISC" - }, "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" } }, "node_modules/tabbable": { @@ -18959,6 +14457,16 @@ "node": ">= 6" } }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/tailwindcss/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -18972,20 +14480,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/tailwindcss/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -19000,13 +14494,17 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", "dev": true, "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { @@ -19063,14 +14561,15 @@ } }, "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "devOptional": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -19082,11 +14581,12 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -19121,7 +14621,8 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "devOptional": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/text-table": { "version": "0.2.0", @@ -19154,14 +14655,18 @@ } }, "node_modules/thingies": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", - "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", "dev": true, - "license": "Unlicense", + "license": "MIT", "engines": { "node": ">=10.18" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, "peerDependencies": { "tslib": "^2" } @@ -19219,16 +14724,23 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "devOptional": true, "license": "MIT" }, - "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=14.14" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/tmp-cache": { @@ -19268,11 +14780,12 @@ } }, "node_modules/token-types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.0.0.tgz", - "integrity": "sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", "license": "MIT", "dependencies": { + "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -19290,28 +14803,10 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, - "node_modules/traverse": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.10.tgz", - "integrity": "sha512-hN4uFRxbK+PX56DxYiGHsTn2dME3TVr9vbNqlQGcGcPhJAn+tdP126iA+TArMpI4YSgnTkMWyoLl5bf81Hi5TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "gopd": "^1.0.1", - "typedarray.prototype.slice": "^1.0.3", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/tree-dump": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", - "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -19339,9 +14834,9 @@ "license": "Apache-2.0" }, "node_modules/ts-loader": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", - "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -19359,80 +14854,27 @@ "webpack": "^5.0.0" } }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ts-loader/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", "engines": { - "node": ">= 8" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">= 12" } }, "node_modules/ts-morph": { @@ -19446,10 +14888,10 @@ "code-block-writer": "^13.0.1" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "node_modules/ts-node-maintained": { + "version": "10.9.6", + "resolved": "https://registry.npmjs.org/ts-node-maintained/-/ts-node-maintained-10.9.6.tgz", + "integrity": "sha512-m/1ZCksNnIofWjmY5/K+6y8oia05Y/5+vMWTvuFzrr6UGRV7ImrLMyYAB06cHlwBW5/NuYeZoh44mAOGNRNxZA==", "dev": true, "license": "MIT", "dependencies": { @@ -19490,7 +14932,7 @@ } } }, - "node_modules/ts-node/node_modules/arg": { + "node_modules/ts-node-maintained/node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", @@ -19549,135 +14991,36 @@ } }, "node_modules/type-fest": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", - "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray.prototype.slice": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.5.tgz", - "integrity": "sha512-q7QNVDGTdl702bVFiI5eY4l/HkgCM6at9KhcFbgUAzezHFbOVy4+0O/lCjsABEQwbZPravVfBIiBVGo89yzHFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "math-intrinsics": "^1.1.0", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-offset": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -19701,9 +15044,9 @@ } }, "node_modules/uint8array-extras": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.0.tgz", - "integrity": "sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", "license": "MIT", "engines": { "node": ">=18" @@ -19712,79 +15055,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "devOptional": true, "license": "MIT", "engines": { @@ -19813,9 +15093,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -19834,7 +15114,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -19843,24 +15123,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -19877,13 +15139,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true, - "license": "MIT" - }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -19895,10 +15150,13 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -19917,16 +15175,21 @@ "dev": true, "license": "MIT" }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==", - "dev": true + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } }, "node_modules/validator": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", - "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -19942,21 +15205,23 @@ } }, "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", "license": "MIT", - "peer": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -19965,19 +15230,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -19998,6 +15269,12 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, @@ -20006,7 +15283,6 @@ "resolved": "https://registry.npmjs.org/vite-plugin-restart/-/vite-plugin-restart-0.4.2.tgz", "integrity": "sha512-9aWN2ScJ8hbT7aC8SDeZnsbWapnslz1vhNq6Vgf2GU9WdN4NExlrWhtnu7pmtOUG3Guj8y6lPcUZ+ls7SVP33w==", "license": "MIT", - "peer": true, "dependencies": { "micromatch": "^4.0.8" }, @@ -20018,16 +15294,16 @@ } }, "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.21.tgz", + "integrity": "sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==", "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" + "@vue/compiler-dom": "3.5.21", + "@vue/compiler-sfc": "3.5.21", + "@vue/runtime-dom": "3.5.21", + "@vue/server-renderer": "3.5.21", + "@vue/shared": "3.5.21" }, "peerDependencies": { "typescript": "*" @@ -20038,33 +15314,6 @@ } } }, - "node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/vue-facing-decorator": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/vue-facing-decorator/-/vue-facing-decorator-3.0.4.tgz", @@ -20098,72 +15347,6 @@ } } }, - "node_modules/vue-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vue-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vue-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", @@ -20177,9 +15360,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -20200,16 +15383,6 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -20217,22 +15390,24 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "version": "5.101.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", + "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -20242,11 +15417,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -20264,74 +15439,16 @@ } } }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", - "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.3.tgz", + "integrity": "sha512-5kA/PzpZzDz5mNOkcNLmU1UdjGeSSxd7rt1akWpI70jMNHLASiBPRaQZn0hgyhvhawfIwSnnLfDABIxL3ueyFg==", "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", - "mime-types": "^2.1.31", + "mime-types": "^3.0.1", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -20352,36 +15469,17 @@ } } }, - "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.15.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.15.3.tgz", - "integrity": "sha512-vR/g1SgqvKJgAyYla+06G4p/EOcEmwhYuVb1yc1ixcKf8o/sh7Zngv63957ZSNd1xrZJoinmNyDf2LzuP8WJXw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, "node_modules/webpack-dev-server": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", - "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", @@ -20394,7 +15492,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -20503,26 +15601,10 @@ "node": ">=8.10.0" } }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "peer": true, @@ -20556,24 +15638,29 @@ "node": ">=4.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 0.6" } }, "node_modules/websocket-driver": { @@ -20627,100 +15714,12 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -20759,14 +15758,6 @@ "node": ">=8" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -20784,9 +15775,9 @@ "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -20819,42 +15810,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -20888,9 +15843,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -20900,9 +15855,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "license": "MIT", "engines": { "node": ">=12" @@ -20912,9 +15867,9 @@ } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -20933,9 +15888,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "dev": true, "license": "MIT", "engines": { @@ -20954,6 +15909,22 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xmlbuilder2": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", @@ -20969,6 +15940,28 @@ "node": ">=12.0" } }, + "node_modules/xmlbuilder2/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/xmlbuilder2/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/xslt3": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/xslt3/-/xslt3-2.7.0.tgz", @@ -20983,18 +15976,6 @@ "xslt3": "xslt3.js" } }, - "node_modules/xslt3/node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -21015,19 +15996,20 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "devOptional": true, "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { @@ -21175,9 +16157,9 @@ } }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "license": "MIT", "engines": { "node": ">=12.20" @@ -21187,9 +16169,9 @@ } }, "node_modules/yoctocolors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", - "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "devOptional": true, "license": "MIT", "engines": { @@ -21210,6 +16192,17 @@ "stacktracey": "^2.1.8" } }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, "node_modules/youch-terminal": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/youch-terminal/-/youch-terminal-2.2.3.tgz", @@ -21258,38 +16251,6 @@ "engines": { "node": ">= 0.6" } - }, - "node_modules/z-schema": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", - "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.get": "^4.4.2", - "lodash.isequal": "^4.5.0", - "validator": "^13.7.0" - }, - "bin": { - "z-schema": "bin/z-schema" - }, - "engines": { - "node": ">=8.0.0" - }, - "optionalDependencies": { - "commander": "^9.4.1" - } - }, - "node_modules/z-schema/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "^12.20.0 || >=14" - } } } } diff --git a/package.json b/package.json index 9f4fb23..7ae829f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "private": true, "scripts": { "type-check": "tsc --noEmit", - "dev": "node ace serve --watch", + "dev": "node ace serve", + "devInspect": "node ace serve --watch --node-args='--inspect'", "compress:xslt": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/datasetxml2oai-pmh.xslt -export:public/assets2/datasetxml2oai.sef.json -t -nogo '-ns:##html5'", "compress:solr": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/solr.xslt -export:public/assets2/solr.sef.json -t -nogo '-ns:##html5'", "compress:doi": "./node_modules/xslt3/xslt3.js -xsl:public/assets2/doi_datacite.xslt -export:public/assets2/doi_datacite.sef.json -t -nogo '-ns:##html5'", @@ -15,59 +16,58 @@ "format-check": "prettier --check ./**/*.{ts,js}", "test": "node ace test" }, - "eslintIgnore": [ - "build" - ], + "eslintConfig": { + "ignorePatterns": [ + "build" + ] + }, "alias": { "vue": "./node_modules/vue/dist/vue.esm-bundler.js" }, "devDependencies": { "@adonisjs/assembler": "^7.1.1", - "@adonisjs/tsconfig": "^1.2.1", - "@babel/core": "^7.20.12", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-decorators": "^7.20.13", - "@babel/plugin-transform-runtime": "^7.19.6", - "@babel/preset-env": "^7.20.2", - "@babel/preset-typescript": "^7.18.6", - "@japa/api-client": "^2.0.3", - "@japa/assert": "^3.0.0", - "@japa/plugin-adonisjs": "^3.0.0", - "@japa/runner": "^3.1.1", + "@adonisjs/tsconfig": "^1.4.0", + "@headlessui/vue": "^1.7.23", + "@japa/assert": "^4.0.1", + "@japa/plugin-adonisjs": "^4.0.0", + "@japa/runner": "^4.2.0", "@mdi/js": "^7.1.96", "@poppinss/utils": "^6.7.2", - "@swc/core": "^1.4.2", - "@symfony/webpack-encore": "^5.0.1", + "@swc/wasm": "^1.10.14", "@tailwindcss/forms": "^0.5.2", "@types/bcryptjs": "^2.4.6", "@types/clamscan": "^2.0.4", "@types/escape-html": "^1.0.4", - "@types/leaflet": "^1.9.3", + "@types/fs-extra": "^11.0.4", + "@types/leaflet": "^1.9.16", "@types/luxon": "^3.4.2", - "@types/node": "^22.5.5", + "@types/node": "^22.10.2", "@types/proxy-addr": "^2.0.0", "@types/qrcode": "^1.5.5", "@types/source-map-support": "^0.5.6", "@types/sprintf-js": "^1.1.4", "@types/supertest": "^6.0.2", + "@vitejs/plugin-vue": "^5.2.1", "autoprefixer": "^10.4.13", "babel-preset-typescript-vue3": "^2.0.17", "chart.js": "^4.2.0", "dotenv-webpack": "^8.0.1", "eslint": "^8.57.1", - "eslint-config-prettier": "^9.0.0", + "eslint-config-prettier": "^10.0.1", "eslint-plugin-adonis": "^2.1.1", "eslint-plugin-prettier": "^5.0.0-alpha.2", + "hot-hook": "^0.4.0", "numeral": "^2.0.6", - "pinia": "^2.0.30", - "pino-pretty": "^11.2.2", + "pinia": "^3.0.2", + "pino-pretty": "^13.0.0", "postcss-loader": "^8.1.1", - "prettier": "^3.0.0", + "prettier": "^3.4.2", "supertest": "^6.3.3", - "tailwindcss": "^3.2.4", + "tailwindcss": "^3.4.17", "ts-loader": "^9.4.2", - "ts-node": "^10.9.2", - "typescript": "^5.1.3", + "ts-node-maintained": "^10.9.5", + "typescript": "~5.7", + "vite": "^6.0.11", "vue": "^3.4.26", "vue-facing-decorator": "^3.0.0", "vue-loader": "^17.0.1", @@ -75,30 +75,32 @@ "xslt3": "^2.5.0" }, "dependencies": { - "@adonisjs/auth": "^9.1.1", - "@adonisjs/core": "^6.3.1", + "@adonisjs/auth": "^9.2.4", + "@adonisjs/bodyparser": "^10.0.1", + "@adonisjs/core": "6.17.2", "@adonisjs/cors": "^2.2.1", - "@adonisjs/drive": "^2.3.0", - "@adonisjs/encore": "^1.0.0", - "@adonisjs/inertia": "^1.0.0-7", - "@adonisjs/lucid": "^21.1.0", + "@adonisjs/drive": "^3.2.0", + "@adonisjs/inertia": "^2.1.3", + "@adonisjs/lucid": "^21.5.1", "@adonisjs/mail": "^9.2.2", "@adonisjs/redis": "^9.1.0", - "@adonisjs/session": "^7.1.1", + "@adonisjs/session": "^7.5.0", "@adonisjs/shield": "^8.1.1", "@adonisjs/static": "^1.1.1", + "@adonisjs/vite": "^4.0.0", "@eidellev/adonis-stardust": "^3.0.0", "@fontsource/archivo-black": "^5.0.1", "@fontsource/inter": "^5.0.1", "@inertiajs/inertia": "^0.11.1", - "@inertiajs/vue3": "^1.0.0", - "@opensearch-project/opensearch": "^2.4.0", + "@inertiajs/vue3": "^2.0.3", + "@opensearch-project/opensearch": "^3.2.0", "@phc/format": "^1.0.0", - "@vinejs/vine": "^2.0.0", + "@poppinss/manager": "^5.0.2", + "@vinejs/vine": "^3.0.0", + "axios": "^1.7.9", "bcrypt": "^5.1.1", "bcryptjs": "^2.4.3", "clamscan": "^2.1.2", - "crypto": "^1.0.1", "dayjs": "^1.11.7", "deep-email-validator": "^0.1.21", "edge.js": "^6.0.1", @@ -114,13 +116,19 @@ "notiwind": "^2.0.0", "pg": "^8.9.0", "qrcode": "^1.5.3", - "redis": "^4.6.10", + "redis": "^5.0.0", "reflect-metadata": "^0.2.1", "saxon-js": "^2.5.0", "toastify-js": "^1.12.0", "vuedraggable": "^4.1.0", "xmlbuilder2": "^3.1.1" }, + "hotHook": { + "boundaries": [ + "./app/Controllers/**/*.ts", + "./app/middleware/*.ts" + ] + }, "type": "module", "imports": { "#controllers/*": "./app/Controllers/*.js", diff --git a/postcss.config.cjs b/postcss.config.cjs index b6568f7..4ae9206 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,7 +1,10 @@ module.exports = { plugins: { // 'postcss-import': {}, - 'tailwindcss/nesting': {}, + // 'postcss-nesting': {}, + 'tailwindcss/nesting': {}, + // "@tailwindcss/postcss": {}, + // tailwindcss: {}, tailwindcss: {}, autoprefixer: {}, }, diff --git a/providers/drive/drivers/local.ts b/providers/drive/drivers/local.ts index b008752..7073cd0 100644 --- a/providers/drive/drivers/local.ts +++ b/providers/drive/drivers/local.ts @@ -74,7 +74,8 @@ export class LocalDriver implements LocalDriverContract { */ public async exists(location: string): Promise { try { - return await this.adapter.pathExists(this.makePath(location)); + let path_temp = this.makePath(location); //'/storage/app/files/421' + return await this.adapter.pathExists(path_temp); } catch (error) { throw CannotGetMetaDataException.invoke(location, 'exists', error); } diff --git a/providers/mail_provider.ts b/providers/mail_provider.ts index bb775d8..ba140bb 100644 --- a/providers/mail_provider.ts +++ b/providers/mail_provider.ts @@ -69,7 +69,7 @@ export default class MailProvider { const mailConfigProvider = this.app.config.get('mail'); const config = await configProvider.resolve(this.app, mailConfigProvider); - const iwas = await config.mailers.smtp(); + await config.mailers.smtp(); // iwas.config.host = 'hhhost'; // this.app.config.set('mail.mailers.smtp.host', 'xhost'); // const iwas = await config.mailers.smtp(); diff --git a/providers/query_builder_provider.ts b/providers/query_builder_provider.ts index 6509fae..ed7cfb7 100644 --- a/providers/query_builder_provider.ts +++ b/providers/query_builder_provider.ts @@ -63,6 +63,15 @@ export default class QueryBuilderProvider { public register() { // Register your own bindings + // const ModelQueryBuilder = this.app.container.bind('@adonisjs/lucid/orm/ModelQueryBuilder'); + + // ModelQueryBuilder.macro('whereTrue', function (columnName: string) { + // return this.where(columnName, true); + // }); + + // ModelQueryBuilder.macro('whereFalse', function (columnName: string) { + // return this.where(columnName, false); + // }); } public async boot() { @@ -73,15 +82,14 @@ export default class QueryBuilderProvider { // let rolesPluck = {}; let rolesPluck: { [key: number]: any } = {}; const result = await this.exec(); - result.forEach((user, index) => { - let idc; + result.forEach((user: { [key: string]: any }, index: number) => { + let idc: number; if (!id) { idc = index; } else { idc = user[id]; } - const value = user[valueColumn]; - // rolesPluck[idc] = user.name; + const value: any = user[valueColumn]; rolesPluck[idc] = value; }); return rolesPluck; diff --git a/providers/rule_provider.ts b/providers/rule_provider.ts new file mode 100644 index 0000000..c945a5d --- /dev/null +++ b/providers/rule_provider.ts @@ -0,0 +1,34 @@ +import { ApplicationService } from '@adonisjs/core/types'; + +export default class RuleProvider { + constructor(protected app: ApplicationService) {} + + public register() { + // Register your own bindings + } + + public async boot() { + // IoC container is ready + // await import("../src/rules/index.js"); + + await import('#start/rules/unique'); + await import('#start/rules/translated_language'); + await import('#start/rules/unique_person'); + // () => import('#start/rules/file_length'), + // () => import('#start/rules/file_scan'), + // () => import('#start/rules/allowed_extensions_mimetypes'), + await import('#start/rules/dependent_array_min_length'); + await import('#start/rules/referenceValidation'); + await import('#start/rules/valid_mimetype'); + await import('#start/rules/array_contains_types'); + await import('#start/rules/orcid'); + } + + public async ready() { + // App is ready + } + + public async shutdown() { + // Cleanup, since app is going down + } +} diff --git a/providers/vinejs_provider.ts b/providers/vinejs_provider.ts index f139594..568dd3e 100644 --- a/providers/vinejs_provider.ts +++ b/providers/vinejs_provider.ts @@ -4,9 +4,8 @@ |-------------------------------------------------------------------------- |*/ import type { ApplicationService } from '@adonisjs/core/types'; -import vine, { BaseLiteralType, Vine } from '@vinejs/vine'; -import type { Validation, FieldContext, FieldOptions } from '@vinejs/vine/types'; -// import type { MultipartFile, FileValidationOptions } from '@adonisjs/bodyparser/types'; +import vine, { symbols, BaseLiteralType, Vine } from '@vinejs/vine'; +import type { FieldContext, FieldOptions } from '@vinejs/vine/types'; import type { MultipartFile } from '@adonisjs/core/bodyparser'; import type { FileValidationOptions } from '@adonisjs/core/types/bodyparser'; import { Request, RequestValidator } from '@adonisjs/core/http'; @@ -16,6 +15,7 @@ import MimeType from '#models/mime_type'; * Validation options accepted by the "file" rule */ export type FileRuleValidationOptions = Partial | ((field: FieldContext) => Partial); + /** * Extend VineJS */ @@ -24,31 +24,66 @@ declare module '@vinejs/vine' { myfile(options?: FileRuleValidationOptions): VineMultipartFile; } } + /** * Extend HTTP request class */ declare module '@adonisjs/core/http' { - interface Request extends RequestValidator { - } + interface Request extends RequestValidator {} } /** * Checks if the value is an instance of multipart file * from bodyparser. */ -export function isBodyParserFile(file: MultipartFile | unknown): boolean { +export function isBodyParserFile(file: MultipartFile | unknown): file is MultipartFile { return !!(file && typeof file === 'object' && 'isMultipartFile' in file); } -export async function getEnabledExtensions() { - const enabledExtensions = await MimeType.query().select('file_extension').where('enabled', true).exec(); - const extensions = enabledExtensions - .map((extension) => { - return extension.file_extension.split('|'); - }) - .flat(); - return extensions; -}; +/** + * Cache for enabled extensions to reduce database queries + */ +let extensionsCache: string[] | null = null; +let cacheTimestamp = 0; +const CACHE_DURATION = 5 * 60 * 1000; // 5 minutes + +/** + * Get enabled extensions with caching + */ +export async function getEnabledExtensions(): Promise { + const now = Date.now(); + + if (extensionsCache && now - cacheTimestamp < CACHE_DURATION) { + return extensionsCache; + } + + try { + const enabledExtensions = await MimeType.query().select('file_extension').where('enabled', true).exec(); + + const extensions = enabledExtensions + .map((extension) => extension.file_extension.split('|')) + .flat() + .map((ext) => ext.toLowerCase().trim()) + .filter((ext) => ext.length > 0); + + extensionsCache = [...new Set(extensions)]; // Remove duplicates + cacheTimestamp = now; + + return extensionsCache; + } catch (error) { + console.error('Error fetching enabled extensions:', error); + return extensionsCache || []; + } +} + +/** + * Clear extensions cache + */ +export function clearExtensionsCache(): void { + extensionsCache = null; + cacheTimestamp = 0; +} + /** * VineJS validation rule that validates the file to be an * instance of BodyParser MultipartFile class. @@ -65,6 +100,7 @@ const isMultipartFile = vine.createRule(async (file: MultipartFile | unknown, op // At this point, you can use type assertion to explicitly tell TypeScript that file is of type MultipartFile const validatedFile = file as MultipartFile; const validationOptions = typeof options === 'function' ? options(field) : options; + /** * Set size when it's defined in the options and missing * on the file instance @@ -72,28 +108,29 @@ const isMultipartFile = vine.createRule(async (file: MultipartFile | unknown, op if (validatedFile.sizeLimit === undefined && validationOptions.size) { validatedFile.sizeLimit = validationOptions.size; } + /** * Set extensions when it's defined in the options and missing * on the file instance */ - // if (validatedFile.allowedExtensions === undefined && validationOptions.extnames) { - // validatedFile.allowedExtensions = validationOptions.extnames; - // } - if (validatedFile.allowedExtensions === undefined && validationOptions.extnames) { - validatedFile.allowedExtensions = await getEnabledExtensions(); + if (validatedFile.allowedExtensions === undefined) { + if (validationOptions.extnames !== undefined) { + validatedFile.allowedExtensions = validationOptions.extnames; + } else { + validatedFile.allowedExtensions = await getEnabledExtensions(); + } } - /** - * wieder löschen - * Set extensions when it's defined in the options and missing - * on the file instance - */ - // if (file.clientNameSizeLimit === undefined && validationOptions.clientNameSizeLimit) { - // file.clientNameSizeLimit = validationOptions.clientNameSizeLimit; - // } + /** * Validate file */ - validatedFile.validate(); + try { + validatedFile.validate(); + } catch (error) { + field.report(`File validation failed: ${error.message}`, 'file.validation_error', field, validationOptions); + return; + } + /** * Report errors */ @@ -102,24 +139,40 @@ const isMultipartFile = vine.createRule(async (file: MultipartFile | unknown, op }); }); -export class VineMultipartFile extends BaseLiteralType { - // #private; - // constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions, validations?: Validation[]); - // clone(): this; +const MULTIPART_FILE: typeof symbols.SUBTYPE = symbols.SUBTYPE; - public validationOptions; +export class VineMultipartFile extends BaseLiteralType { + [MULTIPART_FILE]: string; + public validationOptions?: FileRuleValidationOptions; // extnames: (18) ['gpkg', 'htm', 'html', 'csv', 'txt', 'asc', 'c', 'cc', 'h', 'srt', 'tiff', 'pdf', 'png', 'zip', 'jpg', 'jpeg', 'jpe', 'xlsx'] // size: '512mb' - public constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions, validations?: Validation[]) { - // super(options, validations); + public constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions) { super(options, [isMultipartFile(validationOptions || {})]); this.validationOptions = validationOptions; } public clone(): any { - return new VineMultipartFile(this.validationOptions, this.cloneOptions(), this.cloneValidations()); + return new VineMultipartFile(this.validationOptions, this.cloneOptions()); } + + /** + * Set maximum file size + */ + public maxSize(size: string | number): this { + const newOptions = { ...this.validationOptions, size }; + return new VineMultipartFile(newOptions, this.cloneOptions()) as this; + } + + /** + * Set allowed extensions + */ + public extensions(extnames: string[]): this { + const newOptions = { ...this.validationOptions, extnames }; + return new VineMultipartFile(newOptions, this.cloneOptions()) as this; + } + + } export default class VinejsProvider { @@ -138,13 +191,8 @@ export default class VinejsProvider { /** * The container bindings have booted */ - boot(): void { - // VineString.macro('translatedLanguage', function (this: VineString, options: Options) { - // return this.use(translatedLanguageRule(options)); - // }); - - Vine.macro('myfile', function (this: Vine, options) { + Vine.macro('myfile', function (this: Vine, options?: FileRuleValidationOptions) { return new VineMultipartFile(options); }); @@ -152,10 +200,47 @@ export default class VinejsProvider { * The validate method can be used to validate the request * data for the current request using VineJS validators */ - Request.macro('validateUsing', function (...args) { - return new RequestValidator(this.ctx).validateUsing(...args); - }); + Request.macro('validateUsing', function (this: Request, ...args) { + if (!this.ctx) { + throw new Error('HttpContext is not available'); + } + return new RequestValidator(this.ctx).validateUsing(...args); + }); + // Ensure MIME validation macros are loaded + this.loadMimeValidationMacros(); + this.loadFileScanMacros(); + this.loadFileLengthMacros(); + } + + /** + * Load MIME validation macros - called during boot to ensure they're available + */ + private async loadMimeValidationMacros(): Promise { + try { + // Dynamically import the MIME validation rule to ensure macros are registered + await import('#start/rules/allowed_extensions_mimetypes'); + } catch (error) { + console.warn('Could not load MIME validation macros:', error); + } + } + + private async loadFileScanMacros(): Promise { + try { + // Dynamically import the MIME validation rule to ensure macros are registered + await import('#start/rules/file_scan'); + } catch (error) { + console.warn('Could not load MIME validation macros:', error); + } + } + + private async loadFileLengthMacros(): Promise { + try { + // Dynamically import the MIME validation rule to ensure macros are registered + await import('#start/rules/file_length'); + } catch (error) { + console.warn('Could not load MIME validation macros:', error); + } } /** @@ -171,5 +256,7 @@ export default class VinejsProvider { /** * Preparing to shutdown the app */ - async shutdown() {} + async shutdown() { + clearExtensionsCache(); + } } diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000..4d9cf1b Binary files /dev/null and b/public/android-chrome-192x192.png differ diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png new file mode 100644 index 0000000..7929356 Binary files /dev/null and b/public/android-chrome-512x512.png differ diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..50558dc Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/assets/entrypoints.json b/public/assets/entrypoints.json deleted file mode 100644 index 21084b2..0000000 --- a/public/assets/entrypoints.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "entrypoints": { - "app": { - "css": [ - "http://localhost:8080/assets/app.css" - ], - "js": [ - "http://localhost:8080/assets/app.js" - ] - } - } -} \ No newline at end of file diff --git a/public/assets/manifest.json b/public/assets/manifest.json deleted file mode 100644 index 9062764..0000000 --- a/public/assets/manifest.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "assets/app.css": "http://localhost:8080/assets/app.css", - "assets/app.js": "http://localhost:8080/assets/app.js", - "assets/resources_js_apps_settings_l18n_de_js.js": "http://localhost:8080/assets/resources_js_apps_settings_l18n_de_js.js", - "assets/resources_js_apps_settings_l18n_en_js.js": "http://localhost:8080/assets/resources_js_apps_settings_l18n_en_js.js", - "assets/resources_js_Pages_Admin_License_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_License_Index_vue.js", - "assets/resources_js_Pages_Admin_Mimetype_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Create_vue.js", - "assets/resources_js_Pages_Admin_Mimetype_Delete_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Delete_vue.js", - "assets/resources_js_Pages_Admin_Mimetype_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Mimetype_Index_vue.js", - "assets/resources_js_Pages_Admin_Permission_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Create_vue.js", - "assets/resources_js_Pages_Admin_Permission_Edit_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Edit_vue.js", - "assets/resources_js_Pages_Admin_Permission_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Index_vue.js", - "assets/resources_js_Pages_Admin_Permission_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Permission_Show_vue.js", - "assets/resources_js_Pages_Admin_Role_Create_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Create_vue.js", - "assets/resources_js_Pages_Admin_Role_Edit_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Edit_vue.js", - "assets/resources_js_Pages_Admin_Role_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Index_vue.js", - "assets/resources_js_Pages_Admin_Role_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Role_Show_vue.js", - "assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.css": "http://localhost:8080/assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.css", - "assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.js": "http://localhost:8080/assets/resources_js_Pages_Admin_Settings_vue-resources_js_utils_toast_css.js", - "assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.css": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.css", - "assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Create_vue-resources_js_Components_SimplePasswordMeter_password-f3312a.js", - "assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.css": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.css", - "assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Edit_vue-resources_js_Components_SimplePasswordMeter_password-m-6dc207.js", - "assets/resources_js_Pages_Admin_User_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Index_vue.js", - "assets/resources_js_Pages_Admin_User_Show_vue.js": "http://localhost:8080/assets/resources_js_Pages_Admin_User_Show_vue.js", - "assets/resources_js_Pages_App_vue.js": "http://localhost:8080/assets/resources_js_Pages_App_vue.js", - "assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.css": "http://localhost:8080/assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.css", - "assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.js": "http://localhost:8080/assets/resources_js_Pages_Auth_AccountInfo_vue-resources_js_utils_toast_css-resources_js_Components_-06c7b5.js", - "assets/resources_js_Pages_Auth_Login_vue.js": "http://localhost:8080/assets/resources_js_Pages_Auth_Login_vue.js", - "assets/resources_js_Pages_Auth_Register_vue.js": "http://localhost:8080/assets/resources_js_Pages_Auth_Register_vue.js", - "assets/resources_js_Pages_Dashboard_vue.js": "http://localhost:8080/assets/resources_js_Pages_Dashboard_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Approve_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Approve_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Doi_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Doi_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Index_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Publish_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Publish_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Receive_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Receive_vue.js", - "assets/resources_js_Pages_Editor_Dataset_Reject_vue.js": "http://localhost:8080/assets/resources_js_Pages_Editor_Dataset_Reject_vue.js", - "assets/resources_js_Pages_Error_vue.js": "http://localhost:8080/assets/resources_js_Pages_Error_vue.js", - "assets/resources_js_Pages_Errors_ServerError_vue.js": "http://localhost:8080/assets/resources_js_Pages_Errors_ServerError_vue.js", - "assets/resources_js_Pages_Errors_not_found_vue.js": "http://localhost:8080/assets/resources_js_Pages_Errors_not_found_vue.js", - "assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.css": "http://localhost:8080/assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.css", - "assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.js": "http://localhost:8080/assets/resources_js_Pages_Map_vue-resources_js_Components_Map_draw_component_vue-resources_js_Compon-b0925c.js", - "assets/resources_js_Pages_ProfileView_vue.js": "http://localhost:8080/assets/resources_js_Pages_ProfileView_vue.js", - "assets/resources_js_Pages_Reviewer_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Index_vue.js", - "assets/resources_js_Pages_Reviewer_Dataset_Reject_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Reject_vue.js", - "assets/resources_js_Pages_Reviewer_Dataset_Review_vue.js": "http://localhost:8080/assets/resources_js_Pages_Reviewer_Dataset_Review_vue.js", - "assets/resources_js_Pages_Submitter_Dataset_Category_vue.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Category_vue.css", - "assets/resources_js_Pages_Submitter_Dataset_Category_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Category_vue.js", - "assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.css", - "assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Create_vue-resources_js_utils_toast_css-resources_js_Com-03a898.js", - "assets/resources_js_Pages_Submitter_Dataset_Delete_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Delete_vue.js", - "assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.css", - "assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Edit_vue-resources_js_utils_toast_css-resources_js_Compo-a37b65.js", - "assets/resources_js_Pages_Submitter_Dataset_Index_vue.css": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Index_vue.css", - "assets/resources_js_Pages_Submitter_Dataset_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Index_vue.js", - "assets/resources_js_Pages_Submitter_Dataset_Release_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Dataset_Release_vue.js", - "assets/resources_js_Pages_Submitter_Person_Index_vue.js": "http://localhost:8080/assets/resources_js_Pages_Submitter_Person_Index_vue.js", - "assets/resources_js_Pages_register-view_register-view-component_vue.js": "http://localhost:8080/assets/resources_js_Pages_register-view_register-view-component_vue.js", - "assets/vendors-node_modules_mdi_js_mdi_js-node_modules_vue-loader_dist_exportHelper_js.js": "http://localhost:8080/assets/vendors-node_modules_mdi_js_mdi_js-node_modules_vue-loader_dist_exportHelper_js.js", - "assets/vendors-node_modules_focus-trap_dist_focus-trap_esm_js-node_modules_notiwind_dist_index_esm_js.js": "http://localhost:8080/assets/vendors-node_modules_focus-trap_dist_focus-trap_esm_js-node_modules_notiwind_dist_index_esm_js.js", - "assets/vendors-node_modules_vue-facing-decorator_dist_esm_utils_js.js": "http://localhost:8080/assets/vendors-node_modules_vue-facing-decorator_dist_esm_utils_js.js", - "assets/vendors-node_modules_toastify-js_src_toastify_js.js": "http://localhost:8080/assets/vendors-node_modules_toastify-js_src_toastify_js.js", - "assets/vendors-node_modules_leaflet_dist_leaflet-src_js-node_modules_leaflet_src_control_Control_Att-adabdc.js": "http://localhost:8080/assets/vendors-node_modules_leaflet_dist_leaflet-src_js-node_modules_leaflet_src_control_Control_Att-adabdc.js", - "assets/vendors-node_modules_buffer_index_js-node_modules_vuedraggable_dist_vuedraggable_umd_js.js": "http://localhost:8080/assets/vendors-node_modules_buffer_index_js-node_modules_vuedraggable_dist_vuedraggable_umd_js.js", - "assets/vendors-node_modules_mime_dist_src_index_js.js": "http://localhost:8080/assets/vendors-node_modules_mime_dist_src_index_js.js", - "assets/vendors-node_modules_numeral_numeral_js-node_modules_chart_js_dist_chart_js.js": "http://localhost:8080/assets/vendors-node_modules_numeral_numeral_js-node_modules_chart_js_dist_chart_js.js", - "assets/resources_js_Components_BaseButton_vue.js": "http://localhost:8080/assets/resources_js_Components_BaseButton_vue.js", - "assets/resources_js_Stores_main_ts-resources_js_Components_BaseDivider_vue-resources_js_Components_C-b45805.js": "http://localhost:8080/assets/resources_js_Stores_main_ts-resources_js_Components_BaseDivider_vue-resources_js_Components_C-b45805.js", - "assets/resources_js_Layouts_LayoutAuthenticated_vue.css": "http://localhost:8080/assets/resources_js_Layouts_LayoutAuthenticated_vue.css", - "assets/resources_js_Layouts_LayoutAuthenticated_vue.js": "http://localhost:8080/assets/resources_js_Layouts_LayoutAuthenticated_vue.js", - "assets/resources_js_Components_BaseButtons_vue-resources_js_Components_FormControl_vue-resources_js_-d830d6.js": "http://localhost:8080/assets/resources_js_Components_BaseButtons_vue-resources_js_Components_FormControl_vue-resources_js_-d830d6.js", - "assets/resources_js_Components_Admin_Pagination_vue-resources_js_Components_BaseButtons_vue-resource-6f3a70.js": "http://localhost:8080/assets/resources_js_Components_Admin_Pagination_vue-resources_js_Components_BaseButtons_vue-resource-6f3a70.js", - "assets/resources_js_utils_toast_ts-resources_js_Components_NotificationBar_vue.js": "http://localhost:8080/assets/resources_js_utils_toast_ts-resources_js_Components_NotificationBar_vue.js", - "assets/resources_js_Components_Map_draw_component_vue-resources_js_Components_Map_zoom_component_vue-058bcc.js": "http://localhost:8080/assets/resources_js_Components_Map_draw_component_vue-resources_js_Components_Map_zoom_component_vue-058bcc.js", - "assets/resources_js_Components_SectionMain_vue-resources_js_Components_SectionTitleLineWithButton_vu-764dfe.js": "http://localhost:8080/assets/resources_js_Components_SectionMain_vue-resources_js_Components_SectionTitleLineWithButton_vu-764dfe.js", - "assets/resources_js_Components_BaseButtons_vue-resources_js_Components_NotificationBar_vue-resources-7e06d8.js": "http://localhost:8080/assets/resources_js_Components_BaseButtons_vue-resources_js_Components_NotificationBar_vue-resources-7e06d8.js", - "assets/resources_js_Components_Admin_Sort_vue-resources_js_Components_SectionTitleLineWithButton_vue.js": "http://localhost:8080/assets/resources_js_Components_Admin_Sort_vue-resources_js_Components_SectionTitleLineWithButton_vue.js", - "assets/resources_js_Components_CardBoxModal_vue.js": "http://localhost:8080/assets/resources_js_Components_CardBoxModal_vue.js", - "assets/resources_js_Components_FileUpload_vue-resources_js_Components_FormCheckRadioGroup_vue-resour-25e686.js": "http://localhost:8080/assets/resources_js_Components_FileUpload_vue-resources_js_Components_FormCheckRadioGroup_vue-resour-25e686.js", - "assets/fonts/inter-latin-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-latin-ext-400-normal.1c20f7dc.woff", - "assets/fonts/inter-latin-400-normal.woff": "http://localhost:8080/assets/fonts/inter-latin-400-normal.b0c8fe9d.woff", - "assets/fonts/inter-latin-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-latin-ext-400-normal.3d10c85f.woff2", - "assets/fonts/inter-latin-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-latin-400-normal.9698cc7d.woff2", - "assets/fonts/archivo-black-latin-400-normal.woff2": "http://localhost:8080/assets/fonts/archivo-black-latin-400-normal.fc847a1f.woff2", - "assets/fonts/archivo-black-latin-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/archivo-black-latin-ext-400-normal.21761451.woff2", - "assets/fonts/inter-cyrillic-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-cyrillic-ext-400-normal.e8945162.woff", - "assets/fonts/archivo-black-latin-400-normal.woff": "http://localhost:8080/assets/fonts/archivo-black-latin-400-normal.58a301a6.woff", - "assets/fonts/inter-cyrillic-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-cyrillic-ext-400-normal.fd1478dc.woff2", - "assets/fonts/inter-cyrillic-400-normal.woff": "http://localhost:8080/assets/fonts/inter-cyrillic-400-normal.e2841352.woff", - "assets/fonts/inter-greek-400-normal.woff": "http://localhost:8080/assets/fonts/inter-greek-400-normal.a42da273.woff", - "assets/fonts/archivo-black-latin-ext-400-normal.woff": "http://localhost:8080/assets/fonts/archivo-black-latin-ext-400-normal.5ab5ba92.woff", - "assets/fonts/inter-greek-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-greek-400-normal.a8de720a.woff2", - "assets/fonts/inter-cyrillic-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-cyrillic-400-normal.cb04b2ee.woff2", - "assets/fonts/inter-greek-ext-400-normal.woff": "http://localhost:8080/assets/fonts/inter-greek-ext-400-normal.b9e1e894.woff", - "assets/fonts/inter-vietnamese-400-normal.woff": "http://localhost:8080/assets/fonts/inter-vietnamese-400-normal.96f8adc7.woff", - "assets/fonts/inter-greek-ext-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-greek-ext-400-normal.f2fa0d9e.woff2", - "assets/fonts/inter-vietnamese-400-normal.woff2": "http://localhost:8080/assets/fonts/inter-vietnamese-400-normal.44c9df13.woff2", - "assets/images/marker-icon.png": "http://localhost:8080/assets/images/marker-icon.2b3e1faf.png", - "assets/images/layers-2x.png": "http://localhost:8080/assets/images/layers-2x.8f2c4d11.png", - "assets/images/layers.png": "http://localhost:8080/assets/images/layers.416d9136.png", - "assets/images/Close.svg": "http://localhost:8080/assets/images/Close.e4887675.svg", - "assets/vendors-node_modules_vue-facing-decorator_dist_esm_index_js-node_modules_vue-facing-decorator-818045.js": "http://localhost:8080/assets/vendors-node_modules_vue-facing-decorator_dist_esm_index_js-node_modules_vue-facing-decorator-818045.js" -} \ No newline at end of file diff --git a/public/assets2/solr.sef.json b/public/assets2/solr.sef.json index 690f934..096d58e 100644 --- a/public/assets2/solr.sef.json +++ b/public/assets2/solr.sef.json @@ -1 +1 @@ -{"N":"package","version":"30","packageVersion":"1","saxonVersion":"SaxonJS 2.6","target":"JS","targetVersion":"2","name":"TOP-LEVEL","relocatable":"false","buildDateTime":"2023-10-17T11:51:02.397+02:00","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","C":[{"N":"co","binds":"","id":"0","vis":"PRIVATE","ex:uniform":"true","C":[{"N":"function","name":"Q{http://example.com/functions}escapeQuotes","as":"* ","slots":"201","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","module":"solr.xslt","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","flags":"muu","sig":"1F r[* ] a[* ] ","sType":"1F r[* ] a[* ] ","line":"58","C":[{"N":"arg","slot":"0","name":"Q{}input","as":"* ","sType":"* "},{"N":"fn","name":"replace","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"body","line":"61","C":[{"N":"treat","as":"AS","diag":"0|0||replace","C":[{"N":"check","card":"?","diag":"0|0||replace","C":[{"N":"cvUntyped","to":"AS","diag":"0|0||replace","C":[{"N":"check","card":"?","diag":"0|0||replace","C":[{"N":"data","diag":"0|0||replace","C":[{"N":"varRef","name":"Q{}input","slot":"0"}]}]}]}]}]},{"N":"str","val":"\""},{"N":"str","val":"'"}]}]}]},{"N":"co","id":"1","binds":"0","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"1","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","minImp":"0","flags":"s","slots":"200","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","line":"390","module":"solr.xslt","expand-text":"false","match":"/root2","prio":"0.5","matches":"NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]","C":[{"N":"p.withUpper","role":"match","axis":"parent","sType":"1NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"p.nodeTest","test":"NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]"},{"N":"p.nodeTest","test":"ND"}]},{"N":"elem","type":"element()","role":"action","name":"add","sType":"1NE ","nsuri":"","line":"391","C":[{"N":"elem","type":"element()","name":"doc","sType":"1NE ","nsuri":"","line":"392","C":[{"N":"sequence","sType":"* ","C":[{"N":"forEach","sType":"*NE ","line":"401","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"401","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_Index,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_Index]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"402","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"403","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"404","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"404"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"409","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"410","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"has_fulltext"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"411","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"411","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Has_Fulltext,NE nQ{http://www.w3.org/1999/xhtml}Has_Fulltext]"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"415","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"415","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_ID_Success,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_ID_Success]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"416","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"417","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext_id_success"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"418","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"418"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"423","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"423","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_ID_Failure,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_ID_Failure]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"424","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"425","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext_id_failure"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"426","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"426"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"431","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"431","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}PersonReferee,NE nQ{http://www.w3.org/1999/xhtml}PersonReferee]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"432","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"433","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"referee"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"434","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"434"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"436","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"436"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"* ","line":"441","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"441","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"choose","sType":"? ","line":"442","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"442","C":[{"N":"and","C":[{"N":"and","C":[{"N":"compareToString","op":"ne","val":"Person","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]},{"N":"compareToString","op":"ne","val":"PersonAuthor","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]}]},{"N":"compareToString","op":"ne","val":"PersonSubmitter","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]}]},{"N":"compareToString","op":"eq","val":"Person","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"substring","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"1"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"6"}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"443","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"444","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"persons"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"445","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"445"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"447","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"447"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]},{"N":"forEach","sType":"* ","line":"461","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"461","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Collection,NE nQ{http://www.w3.org/1999/xhtml}Collection]"}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"choose","sType":"* ","type":"item()*","line":"462","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"463","C":[{"N":"attVal","name":"Q{}RoleName"},{"N":"str","val":"projects"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"464","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"465","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"project"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"466","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Number","name":"attribute","nodeTest":"*NA nQ{}Number","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"466"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"468","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"469","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"app_area"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"470","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"substring","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"470","C":[{"N":"cvUntyped","to":"AS","diag":"0|0||substring","C":[{"N":"check","card":"?","diag":"0|0||substring","C":[{"N":"attVal","name":"Q{}Number"}]}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"0"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"2"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"473","C":[{"N":"attVal","name":"Q{}RoleName"},{"N":"str","val":"institutes"}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"474","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"475","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"institute"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"476","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Name","name":"attribute","nodeTest":"*NA nQ{}Name","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"476"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"481","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"482","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"collection_ids"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"483","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"483"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"494","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"494","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Series,NE nQ{http://www.w3.org/1999/xhtml}Series]"}]}]}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"495","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"496","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"series_ids"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"497","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"497"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"500","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"501","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"series_number_for_id_"}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"503","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"503"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"505","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Number","name":"attribute","nodeTest":"*NA nQ{}Number","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"505"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"508","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"509","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"doc_sort_order_for_seriesid_"}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"511","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"511"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"513","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}DocSortOrder","name":"attribute","nodeTest":"*NA nQ{}DocSortOrder","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"513"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]}]},{"N":"choose","sType":"? ","line":"526","C":[{"N":"docOrder","sType":"*NE","line":"526","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"527","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"name","sType":"1NA ","line":"528","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"geo_location"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"let","var":"Q{}geolocation","slot":"0","sType":"* ","line":"534","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"534","C":[{"N":"str","val":"SOUTH-BOUND LATITUDE: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"data","diag":"0|1||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]}]},{"N":"str","val":" * WEST-BOUND LONGITUDE: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"data","diag":"0|3||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"str","val":" * NORTH-BOUND LATITUDE: "},{"N":"check","card":"?","diag":"0|5||concat","C":[{"N":"data","diag":"0|5||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]}]},{"N":"str","val":" * EAST-BOUND LONGITUDE: "},{"N":"check","card":"?","diag":"0|7||concat","C":[{"N":"data","diag":"0|7||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]}]}]},{"N":"sequence","sType":"? ","C":[{"N":"valueOf","flags":"l","sType":"1NT ","line":"536","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}geolocation","slot":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"536"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"538","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"538","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}ElevationMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}ElevationMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"539","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"539","C":[{"N":"str","val":" * ELEVATION MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}ElevationMin"}]},{"N":"str","val":" * ELEVATION MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}ElevationMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"541","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"541","C":[{"N":"attVal","name":"Q{}ElevationAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"542","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"542","C":[{"N":"str","val":" * ELEVATION ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}ElevationAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"546","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"546","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}DepthMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}DepthMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"547","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"547","C":[{"N":"str","val":" * DEPTH MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}DepthMin"}]},{"N":"str","val":" * DEPTH MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}DepthMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"549","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"549","C":[{"N":"attVal","name":"Q{}DepthAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"550","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"550","C":[{"N":"str","val":" * DEPTH ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}DepthAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"554","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"554","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}TimeMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}TimeMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"555","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"555","C":[{"N":"str","val":" * TIME MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}TimeMin"}]},{"N":"str","val":" * TIME MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}TimeMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"557","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"557","C":[{"N":"attVal","name":"Q{}TimeAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"558","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"558","C":[{"N":"str","val":" * TIME ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}TimeAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"0","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","minImp":"0","flags":"s","slots":"200","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","line":"64","module":"solr.xslt","expand-text":"false","match":"Rdr_Dataset","prio":"0","matches":"NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","C":[{"N":"p.nodeTest","role":"match","test":"NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","sType":"1NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"{"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"id\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"96","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublishId","name":"attribute","nodeTest":"*NA nQ{}PublishId","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"96"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"let","var":"Q{}year","slot":"0","sType":"* ","line":"100","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"101","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"102","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Year"}]}]},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"103","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}Year","role":"select","line":"103","C":[{"N":"slash","op":"/","sType":"*NA nQ{}Year","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Year"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","line":"106","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublishedYear","name":"attribute","nodeTest":"*NA nQ{}PublishedYear","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"106"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"year\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"111","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}year","slot":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"111"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"choose","sType":"* ","line":"115","C":[{"N":"varRef","name":"Q{}year","slot":"0","sType":"*","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"115"},{"N":"let","var":"Q{}yearInverted","slot":"1","sType":"*NT ","line":"116","C":[{"N":"arith","op":"-","calc":"a-a","sType":"1A","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"116","C":[{"N":"int","val":"65535"},{"N":"check","card":"?","diag":"1|1||arith","C":[{"N":"data","diag":"1|1||arith","C":[{"N":"varRef","name":"Q{}year","slot":"0"}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"year_inverted\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"118","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}yearInverted","slot":"1","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"118"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"123","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"123","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]},{"N":"str","val":""}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"server_date_published\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"125","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","role":"select","line":"125","C":[{"N":"slash","op":"/","sType":"*NA nQ{}UnixTimestamp","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"130","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"130","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDateModified,NE nQ{http://www.w3.org/1999/xhtml}ServerDateModified]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]},{"N":"str","val":""}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"server_date_modified\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"132","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","role":"select","line":"132","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDateModified,NE nQ{http://www.w3.org/1999/xhtml}ServerDateModified]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}language","slot":"1","sType":"* ","line":"137","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Language","sType":"*NA nQ{}Language","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"137"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"language\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"139","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}language","slot":"1","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"139"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"forEach","sType":"* ","line":"143","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleMain,NE nQ{http://www.w3.org/1999/xhtml}TitleMain]","sType":"*NE u[NE nQ{}TitleMain,NE nQ{http://www.w3.org/1999/xhtml}TitleMain]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"143"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"145","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"145","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"choose","sType":"* ","line":"147","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"147","C":[{"N":"attVal","name":"Q{}Language"},{"N":"data","diag":"1|1||gc","C":[{"N":"varRef","name":"Q{}language","slot":"1"}]}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_output\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"149","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Value","name":"attribute","nodeTest":"*NA nQ{}Value","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"149"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]},{"N":"let","var":"Q{}abstracts","slot":"2","sType":"* ","line":"155","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"156","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAbstract,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstract]","sType":"*NE u[NE nQ{}TitleAbstract,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstract]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"156"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"159","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"159","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"161","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"161","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"abstract\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"165","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}abstracts","slot":"2","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"165"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}authors","slot":"3","sType":"* ","line":"177","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"178","C":[{"N":"sort","sType":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","sType":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"178"},{"N":"sortKey","sType":"?A ","C":[{"N":"check","card":"?","sType":"?A ","diag":"2|0|XTTE1020|sort","role":"select","C":[{"N":"data","sType":"*A ","role":"select","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}SortOrder","sType":"*NA nQ{}SortOrder","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"179"}]}]},{"N":"str","sType":"1AS ","val":"ascending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"182","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"182"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"184","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"184"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"186","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"186","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"author\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"190","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}authors","slot":"3","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"190"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"doctype\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"216","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Type","name":"attribute","nodeTest":"*NA nQ{}Type","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"216"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"let","var":"Q{}subjects","slot":"4","sType":"* ","line":"220","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"221","C":[{"N":"filter","sType":"*NE u[NE nQ{}Subject,NE nQ{http://www.w3.org/1999/xhtml}Subject]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"221","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Subject,NE nQ{http://www.w3.org/1999/xhtml}Subject]"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}Type"},{"N":"str","val":"Uncontrolled"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"223","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"223","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"225","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"225","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"subjects\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"229","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}subjects","slot":"4","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"229"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"belongs_to_bibliography\": "}]},{"N":"choose","sType":"?NT ","type":"item()*","line":"234","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"235","C":[{"N":"attVal","name":"Q{}BelongsToBibliography"},{"N":"int","val":"1"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"true"}]},{"N":"true"},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"false"}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"choose","sType":"* ","line":"247","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","sType":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"247"},{"N":"let","var":"Q{}title_sub","slot":"5","sType":"*NT ","line":"248","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"249","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","sType":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"249"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"251","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"251","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"253","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"253","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_sub\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"259","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}title_sub","slot":"5","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"259"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}title_additional","slot":"5","sType":"* ","line":"264","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"265","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAdditional]","sType":"*NE u[NE nQ{}TitleAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAdditional]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"265"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"268","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"268","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"270","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"270","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_additional\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"276","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"string","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"276","C":[{"N":"check","card":"?","diag":"0|0||string","C":[{"N":"varRef","name":"Q{}title_additional","slot":"5"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}abstract_additional","slot":"6","sType":"* ","line":"280","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"281","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAbstractAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstractAdditional]","sType":"*NE u[NE nQ{}TitleAbstractAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstractAdditional]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"281"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"283","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"283","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"285","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"285","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"abstract_additional\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"291","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}abstract_additional","slot":"6","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"291"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"choose","sType":"* ","line":"295","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]","sType":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"295"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"licence\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"297","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"297","bSlot":"0","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Name"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"302","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}CreatingCorporation","sType":"*NA nQ{}CreatingCorporation","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"302"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"creating_corporation\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"304","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}CreatingCorporation","name":"attribute","nodeTest":"*NA nQ{}CreatingCorporation","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"304"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"309","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}ContributingCorporation","sType":"*NA nQ{}ContributingCorporation","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"309"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"contributing_corporation\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"311","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}ContributingCorporation","name":"attribute","nodeTest":"*NA nQ{}ContributingCorporation","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"311"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"316","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}PublisherName","sType":"*NA nQ{}PublisherName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"316"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"publisher_name\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"318","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublisherName","name":"attribute","nodeTest":"*NA nQ{}PublisherName","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"318"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"323","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}PublisherPlace","sType":"*NA nQ{}PublisherPlace","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"323"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"publisher_place\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"325","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublisherPlace","name":"attribute","nodeTest":"*NA nQ{}PublisherPlace","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"325"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"330","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]","sType":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"330"},{"N":"let","var":"Q{}geolocation","slot":"7","sType":"*NT ","line":"334","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"334","C":[{"N":"check","card":"?","diag":"0|0||concat","C":[{"N":"data","diag":"0|0||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|2||concat","C":[{"N":"data","diag":"0|2||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|4||concat","C":[{"N":"data","diag":"0|4||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|6||concat","C":[{"N":"data","diag":"0|6||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"geo_location\": "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"BBOX ("}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"337","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}geolocation","slot":"7","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"337"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")\","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_xmin\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"341","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}XMin","role":"select","line":"341","C":[{"N":"slash","op":"/","sType":"*NA nQ{}XMin","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_xmax\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"344","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}XMax","role":"select","line":"344","C":[{"N":"slash","op":"/","sType":"*NA nQ{}XMax","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_ymin\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"347","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}YMin","role":"select","line":"347","C":[{"N":"slash","op":"/","sType":"*NA nQ{}YMin","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_ymax\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"350","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}YMax","role":"select","line":"350","C":[{"N":"slash","op":"/","sType":"*NA nQ{}YMax","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}identifier","slot":"7","sType":"*NT ","line":"356","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"357","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Identifier,NE nQ{http://www.w3.org/1999/xhtml}Identifier]","sType":"*NE u[NE nQ{}Identifier,NE nQ{http://www.w3.org/1999/xhtml}Identifier]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"357"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"359","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"359","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"361","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"361","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"identifier\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"367","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}identifier","slot":"7","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"367"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}reference","slot":"8","sType":"*NT ","line":"371","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"372","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Reference,NE nQ{http://www.w3.org/1999/xhtml}Reference]","sType":"*NE u[NE nQ{}Reference,NE nQ{http://www.w3.org/1999/xhtml}Reference]","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"372"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"374","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"374","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"376","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"376","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"reference\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"382","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}reference","slot":"8","ns":"= xml=~ fn=http://example.com/functions xsl=~ xs=~ xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"382"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"]"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"}"}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"overridden"},{"N":"output","C":[{"N":"property","name":"Q{http://saxon.sf.net/}stylesheet-version","value":"30"},{"N":"property","name":"method","value":"text"}]},{"N":"decimalFormat"}],"Σ":"b8107a64"} \ No newline at end of file +{"N":"package","version":"30","packageVersion":"1","saxonVersion":"SaxonJS 2.7","target":"JS","targetVersion":"2","name":"TOP-LEVEL","relocatable":"false","buildDateTime":"2025-10-09T14:12:43.043+02:00","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","C":[{"N":"co","binds":"","id":"0","vis":"PRIVATE","ex:uniform":"true","C":[{"N":"function","name":"Q{http://example.com/functions}escapeQuotes","as":"* ","slots":"201","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","module":"solr.xslt","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","flags":"muu","sig":"1F r[* ] a[* ] ","sType":"1F r[* ] a[* ] ","line":"40","C":[{"N":"arg","slot":"0","name":"Q{}input","as":"* ","sType":"* "},{"N":"fn","name":"replace","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"body","line":"43","C":[{"N":"treat","as":"AS","diag":"0|0||replace","C":[{"N":"check","card":"?","diag":"0|0||replace","C":[{"N":"cvUntyped","to":"AS","diag":"0|0||replace","C":[{"N":"check","card":"?","diag":"0|0||replace","C":[{"N":"data","diag":"0|0||replace","C":[{"N":"varRef","name":"Q{}input","slot":"0"}]}]}]}]}]},{"N":"str","val":"\""},{"N":"str","val":"'"}]}]}]},{"N":"co","id":"1","binds":"0","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"1","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","minImp":"0","flags":"s","slots":"200","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","line":"380","module":"solr.xslt","expand-text":"false","match":"/root2","prio":"0.5","matches":"NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]","C":[{"N":"p.withUpper","role":"match","axis":"parent","sType":"1NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"p.nodeTest","test":"NE u[NE nQ{}root2,NE nQ{http://www.w3.org/1999/xhtml}root2]"},{"N":"p.nodeTest","test":"ND"}]},{"N":"elem","type":"element()","role":"action","name":"add","sType":"1NE ","nsuri":"","line":"381","C":[{"N":"elem","type":"element()","name":"doc","sType":"1NE ","nsuri":"","line":"382","C":[{"N":"sequence","sType":"* ","C":[{"N":"forEach","sType":"*NE ","line":"391","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"391","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_Index,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_Index]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"392","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"393","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"394","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"394"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"399","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"400","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"has_fulltext"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"401","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"401","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Has_Fulltext,NE nQ{http://www.w3.org/1999/xhtml}Has_Fulltext]"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"405","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"405","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_ID_Success,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_ID_Success]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"406","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"407","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext_id_success"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"408","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"408"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"413","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"413","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Fulltext_ID_Failure,NE nQ{http://www.w3.org/1999/xhtml}Fulltext_ID_Failure]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"414","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"415","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"fulltext_id_failure"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"416","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"416"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"421","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"421","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}PersonReferee,NE nQ{http://www.w3.org/1999/xhtml}PersonReferee]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"422","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"423","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"referee"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"424","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"424"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"426","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"426"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"forEach","sType":"* ","line":"431","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"431","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"choose","sType":"? ","line":"432","C":[{"N":"and","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"432","C":[{"N":"and","C":[{"N":"and","C":[{"N":"compareToString","op":"ne","val":"Person","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]},{"N":"compareToString","op":"ne","val":"PersonAuthor","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]}]},{"N":"compareToString","op":"ne","val":"PersonSubmitter","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]}]}]},{"N":"compareToString","op":"eq","val":"Person","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","C":[{"N":"fn","name":"substring","C":[{"N":"fn","name":"local-name","C":[{"N":"dot"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"1"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"6"}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"433","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"434","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"persons"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"435","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"435"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"437","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"437"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]},{"N":"forEach","sType":"* ","line":"451","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"451","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Collection,NE nQ{http://www.w3.org/1999/xhtml}Collection]"}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"choose","sType":"* ","type":"item()*","line":"452","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"453","C":[{"N":"attVal","name":"Q{}RoleName"},{"N":"str","val":"projects"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"454","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"455","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"project"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"456","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Number","name":"attribute","nodeTest":"*NA nQ{}Number","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"456"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"458","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"459","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"app_area"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"460","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"substring","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"460","C":[{"N":"cvUntyped","to":"AS","diag":"0|0||substring","C":[{"N":"check","card":"?","diag":"0|0||substring","C":[{"N":"attVal","name":"Q{}Number"}]}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"0"}]},{"N":"convert","to":"AO","flags":"","C":[{"N":"int","val":"2"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"463","C":[{"N":"attVal","name":"Q{}RoleName"},{"N":"str","val":"institutes"}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"464","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"465","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"institute"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"466","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Name","name":"attribute","nodeTest":"*NA nQ{}Name","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"466"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"471","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"472","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"collection_ids"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"473","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"473"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"484","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"484","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Series,NE nQ{http://www.w3.org/1999/xhtml}Series]"}]}]}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"485","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"486","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"series_ids"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"487","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"487"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"490","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"491","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"series_number_for_id_"}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"493","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"493"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"495","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Number","name":"attribute","nodeTest":"*NA nQ{}Number","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"495"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"498","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"name","sType":"1NA ","line":"499","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"doc_sort_order_for_seriesid_"}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"501","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Id","name":"attribute","nodeTest":"*NA nQ{}Id","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"501"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"503","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}DocSortOrder","name":"attribute","nodeTest":"*NA nQ{}DocSortOrder","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"503"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]}]},{"N":"choose","sType":"? ","line":"516","C":[{"N":"docOrder","sType":"*NE","line":"516","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]}]}]},{"N":"elem","type":"element()","name":"field","sType":"1NE ","nsuri":"","line":"517","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"name","sType":"1NA ","line":"518","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"geo_location"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"let","var":"Q{}geolocation","slot":"0","sType":"* ","line":"524","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"524","C":[{"N":"str","val":"SOUTH-BOUND LATITUDE: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"data","diag":"0|1||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]}]},{"N":"str","val":" * WEST-BOUND LONGITUDE: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"data","diag":"0|3||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"str","val":" * NORTH-BOUND LATITUDE: "},{"N":"check","card":"?","diag":"0|5||concat","C":[{"N":"data","diag":"0|5||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]}]},{"N":"str","val":" * EAST-BOUND LONGITUDE: "},{"N":"check","card":"?","diag":"0|7||concat","C":[{"N":"data","diag":"0|7||concat","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Opus,NE nQ{http://www.w3.org/1999/xhtml}Opus]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]"}]},{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]}]}]},{"N":"sequence","sType":"? ","C":[{"N":"valueOf","flags":"l","sType":"1NT ","line":"526","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}geolocation","slot":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"526"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"528","C":[{"N":"and","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"528","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}ElevationMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}ElevationMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"529","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"529","C":[{"N":"str","val":" * ELEVATION MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}ElevationMin"}]},{"N":"str","val":" * ELEVATION MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}ElevationMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"531","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"531","C":[{"N":"attVal","name":"Q{}ElevationAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"532","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"532","C":[{"N":"str","val":" * ELEVATION ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}ElevationAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"536","C":[{"N":"and","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"536","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}DepthMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}DepthMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"537","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"537","C":[{"N":"str","val":" * DEPTH MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}DepthMin"}]},{"N":"str","val":" * DEPTH MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}DepthMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"539","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"539","C":[{"N":"attVal","name":"Q{}DepthAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"540","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"540","C":[{"N":"str","val":" * DEPTH ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}DepthAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"choose","sType":"? ","line":"544","C":[{"N":"and","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"544","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}TimeMin"},{"N":"str","val":""}]},{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}TimeMax"},{"N":"str","val":""}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"545","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"545","C":[{"N":"str","val":" * TIME MIN: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}TimeMin"}]},{"N":"str","val":" * TIME MAX: "},{"N":"check","card":"?","diag":"0|3||concat","C":[{"N":"attVal","name":"Q{}TimeMax"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"? ","line":"547","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"547","C":[{"N":"attVal","name":"Q{}TimeAbsolut"},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"548","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"548","C":[{"N":"str","val":" * TIME ABSOLUT: "},{"N":"check","card":"?","diag":"0|1||concat","C":[{"N":"attVal","name":"Q{}TimeAbsolut"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"0","ns":"xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json","minImp":"0","flags":"s","slots":"200","baseUri":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","line":"46","module":"solr.xslt","expand-text":"false","match":"Rdr_Dataset","prio":"0","matches":"NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","C":[{"N":"p.nodeTest","role":"match","test":"NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","sType":"1NE u[NE nQ{}Rdr_Dataset,NE nQ{http://www.w3.org/1999/xhtml}Rdr_Dataset]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"{"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"id\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"78","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublishId","name":"attribute","nodeTest":"*NA nQ{}PublishId","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"78"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"let","var":"Q{}year","slot":"0","sType":"* ","line":"82","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"83","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"84","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Year"}]}]},{"N":"str","val":""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"85","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}Year","role":"select","line":"85","C":[{"N":"slash","op":"/","sType":"*NA nQ{}Year","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Year"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","line":"88","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublishedYear","name":"attribute","nodeTest":"*NA nQ{}PublishedYear","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"88"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"year\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"93","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}year","slot":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"93"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"choose","sType":"* ","line":"97","C":[{"N":"varRef","name":"Q{}year","slot":"0","sType":"*","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"97"},{"N":"let","var":"Q{}yearInverted","slot":"1","sType":"*NT ","line":"98","C":[{"N":"arith","op":"-","calc":"a-a","sType":"1A","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"98","C":[{"N":"int","val":"65535"},{"N":"check","card":"?","diag":"1|1||arith","C":[{"N":"data","diag":"1|1||arith","C":[{"N":"varRef","name":"Q{}year","slot":"0"}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"year_inverted\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"100","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}yearInverted","slot":"1","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"100"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"105","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"105","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]},{"N":"str","val":""}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"server_date_published\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"107","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","role":"select","line":"107","C":[{"N":"slash","op":"/","sType":"*NA nQ{}UnixTimestamp","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDatePublished,NE nQ{http://www.w3.org/1999/xhtml}ServerDatePublished]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"112","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"112","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDateModified,NE nQ{http://www.w3.org/1999/xhtml}ServerDateModified]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]},{"N":"str","val":""}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"server_date_modified\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"114","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","role":"select","line":"114","C":[{"N":"slash","op":"/","sType":"*NA nQ{}UnixTimestamp","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}ServerDateModified,NE nQ{http://www.w3.org/1999/xhtml}ServerDateModified]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"119","C":[{"N":"gc","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"119","C":[{"N":"data","diag":"1|0||gc","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}EmbargoDate,NE nQ{http://www.w3.org/1999/xhtml}EmbargoDate]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]},{"N":"str","val":""}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"embargo_date\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"121","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}UnixTimestamp","role":"select","line":"121","C":[{"N":"slash","op":"/","sType":"*NA nQ{}UnixTimestamp","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}EmbargoDate,NE nQ{http://www.w3.org/1999/xhtml}EmbargoDate]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}UnixTimestamp"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}language","slot":"1","sType":"* ","line":"126","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Language","sType":"*NA nQ{}Language","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"126"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"language\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"128","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}language","slot":"1","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"128"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"forEach","sType":"* ","line":"132","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleMain,NE nQ{http://www.w3.org/1999/xhtml}TitleMain]","sType":"*NE u[NE nQ{}TitleMain,NE nQ{http://www.w3.org/1999/xhtml}TitleMain]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"132"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"134","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"134","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"choose","sType":"* ","line":"136","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"136","C":[{"N":"attVal","name":"Q{}Language"},{"N":"data","diag":"1|1||gc","C":[{"N":"varRef","name":"Q{}language","slot":"1"}]}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_output\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"138","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Value","name":"attribute","nodeTest":"*NA nQ{}Value","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"138"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]},{"N":"let","var":"Q{}abstracts","slot":"2","sType":"* ","line":"144","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"145","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAbstract,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstract]","sType":"*NE u[NE nQ{}TitleAbstract,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstract]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"145"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"148","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"148","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"150","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"150","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"abstract\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"154","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}abstracts","slot":"2","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"154"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}authors","slot":"3","sType":"* ","line":"166","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"167","C":[{"N":"sort","sType":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","sType":"*NE u[NE nQ{}PersonAuthor,NE nQ{http://www.w3.org/1999/xhtml}PersonAuthor]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"167"},{"N":"sortKey","sType":"?A ","C":[{"N":"check","card":"?","sType":"?A ","diag":"2|0|XTTE1020|sort","role":"select","C":[{"N":"data","sType":"*A ","role":"select","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}SortOrder","sType":"*NA nQ{}SortOrder","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"168"}]}]},{"N":"str","sType":"1AS ","val":"ascending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"171","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}LastName","name":"attribute","nodeTest":"*NA nQ{}LastName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"171"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"173","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}FirstName","name":"attribute","nodeTest":"*NA nQ{}FirstName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"173"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"175","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"175","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"author\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"179","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}authors","slot":"3","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"179"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"doctype\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"205","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}Type","name":"attribute","nodeTest":"*NA nQ{}Type","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"205"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]},{"N":"let","var":"Q{}subjects","slot":"4","sType":"* ","line":"209","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"211","C":[{"N":"filter","sType":"*NE u[NE nQ{}Subject,NE nQ{http://www.w3.org/1999/xhtml}Subject]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"211","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Subject,NE nQ{http://www.w3.org/1999/xhtml}Subject]"},{"N":"or","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}Type"},{"N":"str","val":"Uncontrolled"}]},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}Type"},{"N":"str","val":"Geoera"}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"213","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"213","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"215","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"215","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"subjects\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"219","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}subjects","slot":"4","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"219"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"belongs_to_bibliography\": "}]},{"N":"choose","sType":"?NT ","type":"item()*","line":"224","C":[{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"225","C":[{"N":"attVal","name":"Q{}BelongsToBibliography"},{"N":"int","val":"1"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"true"}]},{"N":"true"},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"false"}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"choose","sType":"* ","line":"237","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","sType":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"237"},{"N":"let","var":"Q{}title_sub","slot":"5","sType":"*NT ","line":"238","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"239","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","sType":"*NE u[NE nQ{}TitleSub,NE nQ{http://www.w3.org/1999/xhtml}TitleSub]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"239"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"241","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"241","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"243","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"243","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_sub\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"249","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}title_sub","slot":"5","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"249"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}title_additional","slot":"5","sType":"* ","line":"254","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"255","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAdditional]","sType":"*NE u[NE nQ{}TitleAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAdditional]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"255"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"258","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"258","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"260","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"260","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"title_additional\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"266","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"fn","name":"string","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"266","C":[{"N":"check","card":"?","diag":"0|0||string","C":[{"N":"varRef","name":"Q{}title_additional","slot":"5"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}abstract_additional","slot":"6","sType":"* ","line":"270","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"271","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}TitleAbstractAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstractAdditional]","sType":"*NE u[NE nQ{}TitleAbstractAdditional,NE nQ{http://www.w3.org/1999/xhtml}TitleAbstractAdditional]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"271"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"273","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"273","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"275","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"275","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":", "}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"abstract_additional\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"281","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}abstract_additional","slot":"6","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"281"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"choose","sType":"* ","line":"285","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]","sType":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"285"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"licence\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"287","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"287","bSlot":"0","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Licence,NE nQ{http://www.w3.org/1999/xhtml}Licence]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Name"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"292","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}CreatingCorporation","sType":"*NA nQ{}CreatingCorporation","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"292"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"creating_corporation\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"294","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}CreatingCorporation","name":"attribute","nodeTest":"*NA nQ{}CreatingCorporation","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"294"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"299","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}ContributingCorporation","sType":"*NA nQ{}ContributingCorporation","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"299"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"contributing_corporation\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"301","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}ContributingCorporation","name":"attribute","nodeTest":"*NA nQ{}ContributingCorporation","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"301"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"306","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}PublisherName","sType":"*NA nQ{}PublisherName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"306"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"publisher_name\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"308","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublisherName","name":"attribute","nodeTest":"*NA nQ{}PublisherName","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"308"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"313","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}PublisherPlace","sType":"*NA nQ{}PublisherPlace","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"313"},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"publisher_place\": \""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"315","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}PublisherPlace","name":"attribute","nodeTest":"*NA nQ{}PublisherPlace","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"315"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\","}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"choose","sType":"* ","line":"320","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]","sType":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"320"},{"N":"let","var":"Q{}geolocation","slot":"7","sType":"*NT ","line":"324","C":[{"N":"fn","name":"concat","sType":"1AS","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"324","C":[{"N":"check","card":"?","diag":"0|0||concat","C":[{"N":"data","diag":"0|0||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|2||concat","C":[{"N":"data","diag":"0|2||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|4||concat","C":[{"N":"data","diag":"0|4||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]},{"N":"str","val":", "},{"N":"check","card":"?","diag":"0|6||concat","C":[{"N":"data","diag":"0|6||concat","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"geo_location\": "}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"BBOX ("}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"327","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}geolocation","slot":"7","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"327"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")\","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_xmin\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"331","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}XMin","role":"select","line":"331","C":[{"N":"slash","op":"/","sType":"*NA nQ{}XMin","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMin"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_xmax\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"334","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}XMax","role":"select","line":"334","C":[{"N":"slash","op":"/","sType":"*NA nQ{}XMax","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}XMax"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_ymin\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"337","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}YMin","role":"select","line":"337","C":[{"N":"slash","op":"/","sType":"*NA nQ{}YMin","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMin"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"bbox_ymax\": "}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"340","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"docOrder","sType":"*NA nQ{}YMax","role":"select","line":"340","C":[{"N":"slash","op":"/","sType":"*NA nQ{}YMax","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Coverage,NE nQ{http://www.w3.org/1999/xhtml}Coverage]"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}YMax"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"let","var":"Q{}identifier","slot":"7","sType":"*NT ","line":"346","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"347","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Identifier,NE nQ{http://www.w3.org/1999/xhtml}Identifier]","sType":"*NE u[NE nQ{}Identifier,NE nQ{http://www.w3.org/1999/xhtml}Identifier]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"347"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"349","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"349","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"351","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"351","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"*NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"identifier\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"357","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}identifier","slot":"7","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"357"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"],"}]},{"N":"let","var":"Q{}reference","slot":"8","sType":"*NT ","line":"361","C":[{"N":"doc","sType":"1ND ","base":"file:///home/administrator/tethys/tethys.myapp/public/assets2/solr.xslt","role":"select","C":[{"N":"forEach","sType":"* ","line":"362","C":[{"N":"axis","name":"child","nodeTest":"*NE u[NE nQ{}Reference,NE nQ{http://www.w3.org/1999/xhtml}Reference]","sType":"*NE u[NE nQ{}Reference,NE nQ{http://www.w3.org/1999/xhtml}Reference]","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"362"},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"364","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"ufCall","sType":"*","name":"Q{http://example.com/functions}escapeQuotes","coId":"0","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"364","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}Value"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\""}]},{"N":"choose","sType":"? ","line":"366","C":[{"N":"vc","op":"ne","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","sType":"1AB","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","line":"366","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":","}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]},{"N":"sequence","sType":"?NT ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\"reference\": ["}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"372","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}reference","slot":"8","ns":"= xml=~ xsl=~ xs=~ fn=http://example.com/functions xlink=http://www.w3.org/1999/xlink gmd=http://www.isotc211.org/2005/gmd gco=http://www.isotc211.org/2005/gco json=http://www.w3.org/2013/XSL/json ","role":"select","line":"372"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"]"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"}"}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"overridden"},{"N":"output","C":[{"N":"property","name":"Q{http://saxon.sf.net/}stylesheet-version","value":"30"},{"N":"property","name":"method","value":"text"}]},{"N":"decimalFormat"}],"Σ":"5fc7092b"} \ No newline at end of file diff --git a/public/assets2/solr.xslt b/public/assets2/solr.xslt index d4cac24..4b3dc22 100644 --- a/public/assets2/solr.xslt +++ b/public/assets2/solr.xslt @@ -111,7 +111,14 @@ "server_date_modified": " - + + ", + + + + + "embargo_date": " + ", @@ -200,7 +207,8 @@ - + + " " diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..c614e7d Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..6886e7b Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon-32x32.png:Zone.Identifier b/public/favicon-32x32.png:Zone.Identifier new file mode 100644 index 0000000..8bcdfdc --- /dev/null +++ b/public/favicon-32x32.png:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +ZoneId=3 +HostUrl=https://sea1.geoinformation.dev/favicon-32x32.png diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index ce3fc0a..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/favicon.png b/public/favicon.png deleted file mode 100644 index d3d3eb5..0000000 Binary files a/public/favicon.png and /dev/null differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..eb81bca --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/readme.md b/readme.md index 0fd7e64..7d032ce 100644 --- a/readme.md +++ b/readme.md @@ -11,6 +11,8 @@ Welcome to the Tethys Research Repository Backend System! This is the backend co - [Configuration](#configuration) - [Database](#database) - [API Documentation](#api-documentation) +- [Commands](#commands) +- [Documentation](#documentation) - [Contributing](#contributing) - [License](#license) @@ -29,5 +31,175 @@ Before you begin, ensure you have met the following requirements: 1. Clone this repository: ```bash - git clone https://gitea.geologie.ac.at/geolba/tethys.backend.git + git clone git clone https://gitea.geologie.ac.at/geolba/tethys.backend.git + cd tethys-backend ``` + +2. Install dependencies: + + ```bash + npm install + ``` + +3. Configure environment variables (see [Configuration](#configuration)) + +4. Run database migrations: + + ```bash + node ace migration:run + ``` + +5. Start the development server: + + ```bash + npm run dev + ``` + +## Usage + +The Tethys Backend provides RESTful APIs for managing research datasets, user authentication, DOI registration, and search functionality. + +## Configuration + +Copy the `.env.example` file to `.env` and configure the following variables: + +### Database Configuration +```bash +DB_CONNECTION=pg +DB_HOST=localhost +DB_PORT=5432 +DB_USER=your_username +DB_PASSWORD=your_password +DB_DATABASE=tethys_db +``` + +### DataCite Configuration +```bash +# DataCite Credentials +DATACITE_USERNAME=your_datacite_username +DATACITE_PASSWORD=your_datacite_password +DATACITE_PREFIX=10.21388 + +# Environment-specific API endpoints +DATACITE_API_URL=https://api.test.datacite.org # Test environment +DATACITE_SERVICE_URL=https://mds.test.datacite.org # Test MDS + +# For production: +# DATACITE_API_URL=https://api.datacite.org +# DATACITE_SERVICE_URL=https://mds.datacite.org +``` + +### OpenSearch Configuration +```bash +OPENSEARCH_HOST=localhost:9200 +``` + +### Application Configuration +```bash +BASE_DOMAIN=tethys.at +APP_KEY=your_app_key +``` + +## Database + +The system uses PostgreSQL with Lucid ORM. Key models include: + +- **Dataset**: Research dataset metadata +- **DatasetIdentifier**: DOI and other identifiers for datasets +- **User**: User management and authentication +- **XmlCache**: Cached XML metadata + +Run migrations and seeders: + +```bash +# Run migrations +node ace migration:run + +# Run seeders (if available) +node ace db:seed +``` + +## API Documentation + +API endpoints are available for: + +- Dataset management (`/api/datasets`) +- User authentication (`/api/auth`) +- DOI registration (`/api/doi`) +- Search functionality (`/api/search`) + +*Detailed API documentation can be found in the `/docs/api` directory.* + +## Commands + +The system includes several Ace commands for maintenance and data management: + +### Dataset Indexing +```bash +# Index all published datasets to OpenSearch +node ace index:datasets + +# Index a specific dataset +node ace index:datasets --publish_id 123 +``` + +### DataCite DOI Management +```bash +# Update DataCite records for modified datasets +node ace update:datacite + +# Show detailed statistics for datasets needing updates +node ace update:datacite --stats + +# Preview what would be updated (dry run) +node ace update:datacite --dry-run + +# Force update all DOI records +node ace update:datacite --force + +# Update a specific dataset +node ace update:datacite --publish_id 123 +``` + +*For detailed command documentation, see the [Commands Documentation](docs/commands/)* + +## Documentation + +Comprehensive documentation is available in the `/docs` directory: + +- **[Commands Documentation](docs/commands/)** - Detailed guides for Ace commands + - [DataCite Update Command](docs/commands/update-datacite.md) - DOI synchronization and management + - [Dataset Indexing Command](docs/commands/index-datasets.md) - Search index management +- **[API Documentation](docs/api/)** - REST API endpoints and usage +- **[Deployment Guide](docs/deployment/)** - Production deployment instructions +- **[Configuration Guide](docs/configuration/)** - Environment setup and configuration options + +## Contributing + +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add some amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +### Development Guidelines + +- Follow the existing code style and conventions +- Write tests for new features +- Update documentation for any API changes +- Ensure all commands and migrations work properly + +### Testing Commands + +```bash +# Run tests +npm test + +# Test specific commands +node ace update:datacite --dry-run --publish_id 123 +node ace index:datasets --publish_id 123 +``` + +## License + +This project is licensed under the [MIT License](LICENSE). \ No newline at end of file diff --git a/resources/css/app.css b/resources/css/app.css index 1347a65..0301a3a 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,19 +1,20 @@ /* @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap'); */ /* @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,600,700'); */ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@import '_checkbox-radio-switch.css'; +/* @import '_checkbox-radio-switch.css'; */ @import '_progress.css'; @import '_scrollbars.css'; @import '_table.css'; -@import '~leaflet/dist/leaflet.css'; +/* @import '~leaflet/dist/leaflet.css'; */ +@import '~/leaflet/dist/leaflet.css'; @import '@fontsource/inter/index.css'; @import '@fontsource/archivo-black/index.css'; + +@tailwind base; +@tailwind components; +@tailwind utilities; :root { --color-main-background: #ffffff; --color-main-background-rgb: 255,255,255; @@ -108,6 +109,9 @@ --radius: 15; --pi: 3.14159265358979; } +.leaflet-container .leaflet-pane { + z-index: 30!important; +} /* @layer base { html, diff --git a/resources/js/Components/.FormField.vue.swo b/resources/js/Components/.FormField.vue.swo new file mode 100644 index 0000000..b00c9b9 Binary files /dev/null and b/resources/js/Components/.FormField.vue.swo differ diff --git a/resources/js/Components/AsideMenuItem.vue b/resources/js/Components/AsideMenuItem.vue index 4e52d40..52e4bbc 100644 --- a/resources/js/Components/AsideMenuItem.vue +++ b/resources/js/Components/AsideMenuItem.vue @@ -1,162 +1,143 @@ diff --git a/resources/js/Components/AsideMenuLayer.vue b/resources/js/Components/AsideMenuLayer.vue index 7617136..6e6c5b0 100644 --- a/resources/js/Components/AsideMenuLayer.vue +++ b/resources/js/Components/AsideMenuLayer.vue @@ -36,13 +36,24 @@ const logoutItemClick = async () => { await router.post(stardust.route('logout')); }; -const menuClick = (event, item) => { +interface MenuItem { + name: string; + label: string; + icon: string; + color: string; + link: string; +} + +const menuClick = (event: Event, item: MenuItem) => { emit('menu-click', event, item); };