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/Dockerfile b/Dockerfile
index a5d1263..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:22-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/adonisrc.ts b/adonisrc.ts
index 19e946c..824d4c8 100644
--- a/adonisrc.ts
+++ b/adonisrc.ts
@@ -11,9 +11,10 @@ export default defineConfig({
*/
commands: [
- () => import('@adonisjs/core/commands'),
- () => import('@adonisjs/lucid/commands'),
- () => import('@adonisjs/mail/commands')],
+ () => import('@adonisjs/core/commands'),
+ () => import('@adonisjs/lucid/commands'),
+ () => import('@adonisjs/mail/commands')
+ ],
/*
|--------------------------------------------------------------------------
| Preloads
@@ -26,16 +27,17 @@ export default defineConfig({
() => 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/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'),
],
/*
|--------------------------------------------------------------------------
@@ -70,7 +72,7 @@ export default defineConfig({
() => import('#providers/stardust_provider'),
() => import('#providers/query_builder_provider'),
() => import('#providers/token_worker_provider'),
- // () => import('#providers/validator_provider'),
+ () => import('#providers/rule_provider'),
// () => import('#providers/drive/provider/drive_provider'),
() => import('@adonisjs/drive/drive_provider'),
// () => import('@adonisjs/core/providers/vinejs_provider'),
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 7209699..2b0bae1 100644
--- a/app/Controllers/Http/Api/AuthorsController.ts
+++ b/app/Controllers/Http/Api/AuthorsController.ts
@@ -4,20 +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()
- .preload('datasets')
- .where('name_type', 'Personal')
- .whereHas('datasets', (dQuery) => {
- dQuery.wherePivot('role', 'author');
- })
- .withCount('datasets', (query) => {
- query.as('datasets_count');
- })
- .orderBy('datasets_count', 'desc');
+ .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;
}
diff --git a/app/Controllers/Http/Api/AvatarController.ts b/app/Controllers/Http/Api/AvatarController.ts
index 74fe135..d7c532f 100644
--- a/app/Controllers/Http/Api/AvatarController.ts
+++ b/app/Controllers/Http/Api/AvatarController.ts
@@ -2,26 +2,46 @@ import type { HttpContext } from '@adonisjs/core/http';
import { StatusCodes } from 'http-status-codes';
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
export default class AvatarController {
public async generateAvatar({ request, response }: HttpContext) {
try {
const { name, size = DEFAULT_SIZE } = request.only(['name', 'size']);
- if (!name) {
- return response.status(StatusCodes.BAD_REQUEST).json({ error: 'Name is required' });
+
+ // 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:${name.trim().toLowerCase()}-${size}`;
- const cachedSvg = await redis.get(cacheKey);
- if (cachedSvg) {
- this.setResponseHeaders(response);
- return response.send(cachedSvg);
+ 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);
}
const initials = this.getInitials(name);
@@ -29,41 +49,85 @@ export default class AvatarController {
const svgContent = this.createSvg(size, colors, initials);
// // Cache the generated avatar for future use, e.g. 1 hour expiry
- await redis.setex(cacheKey, 3600, svgContent);
+ 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.INTERNAL_SERVER_ERROR).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): string {
- const parts = name
+ private validateSize(size: any): { isValid: boolean; value?: number; error?: string } {
+ const numSize = Number(size);
+
+ 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);
+ .filter((part) => part.length > 0)
+ .map((part) => part.trim());
if (parts.length === 0) {
return 'NA';
}
- if (parts.length >= 2) {
- return this.getMultiWordInitials(parts);
+ 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 parts[0].substring(0, 2).toUpperCase();
+
+ return this.getMultiWordInitials(parts);
}
private getMultiWordInitials(parts: string[]): string {
- const firstName = parts[0];
- const lastName = parts[parts.length - 1];
- const firstInitial = firstName.charAt(0).toUpperCase();
- const lastInitial = lastName.charAt(0).toUpperCase();
+ // Filter out prefixes and short words
+ const significantParts = parts.filter((part) => !PREFIXES.includes(part.toLowerCase()) && part.length > 1);
- if (PREFIXES.includes(lastName.toLowerCase()) && lastName === lastName.toUpperCase()) {
- return firstInitial + lastName.charAt(1).toUpperCase();
+ if (significantParts.length === 0) {
+ // Fallback to first and last regardless of prefixes
+ const firstName = parts[0];
+ const lastName = parts[parts.length - 1];
+ return (firstName.charAt(0) + lastName.charAt(0)).toUpperCase();
}
- return firstInitial + lastInitial;
+
+ 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 } {
@@ -75,31 +139,44 @@ export default class AvatarController {
}
private createSvg(size: number, colors: { background: string; text: string }, initials: string): string {
- const fontSize = size * FONT_SIZE_RATIO;
- return `
-
- `;
+ 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 ``;
+ }
+
+ 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', 'no-cache');
- response.header('Pragma', 'no-cache');
- response.header('Expires', '0');
+ 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;
- for (let i = 0; i < name.length; i++) {
- hash = name.charCodeAt(i) + ((hash << 5) - hash);
+ 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++) {
- const value = (hash >> (i * 8)) & 0xff;
+ 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('');
@@ -110,7 +187,7 @@ export default class AvatarController {
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 * (100 + percent)) / 100));
+ const lightenValue = (value: number) => Math.min(255, Math.floor(value + (255 - value) * (percent / 100)));
const newR = lightenValue(r);
const newG = lightenValue(g);
@@ -124,7 +201,7 @@ export default class AvatarController {
const g = parseInt(hexColor.slice(2, 4), 16);
const b = parseInt(hexColor.slice(4, 6), 16);
- const darkenValue = (value: number) => Math.round(value * COLOR_DARKENING_FACTOR);
+ const darkenValue = (value: number) => Math.max(0, Math.floor(value * COLOR_DARKENING_FACTOR));
const darkerR = darkenValue(r);
const darkerG = darkenValue(g);
diff --git a/app/Controllers/Http/Api/DatasetController.ts b/app/Controllers/Http/Api/DatasetController.ts
index b80949d..9106521 100644
--- a/app/Controllers/Http/Api/DatasetController.ts
+++ b/app/Controllers/Http/Api/DatasetController.ts
@@ -1,24 +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 datasets with server_state 'published' or 'deleted' and sort by the last published date
- 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');
+ /**
+ * 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()
@@ -34,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 8080479..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/data/' + 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/Editor/DatasetController.ts b/app/Controllers/Http/Editor/DatasetController.ts
index 5ec3910..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';
@@ -188,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)) {
@@ -217,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(),
});
@@ -230,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)) {
@@ -252,7 +262,6 @@ export default class DatasetsController {
dataset.reject_editor_note = null;
}
-
//save main and additional titles
const reviewer_id = request.input('reviewer_id', null);
dataset.reviewer_id = reviewer_id;
@@ -262,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) => {
@@ -290,14 +304,17 @@ export default class DatasetsController {
});
}
-
-
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');
})
@@ -380,9 +397,14 @@ export default class DatasetsController {
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) => {
@@ -402,18 +424,16 @@ export default class DatasetsController {
.back();
}
-
-
return inertia.render('Editor/Dataset/Publish', {
dataset,
- can: {
- reject: await auth.user?.can(['dataset-editor-reject']),
+ 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(),
});
@@ -425,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();
@@ -451,10 +476,16 @@ export default class DatasetsController {
}
}
- public async rejectToReviewer({ request, inertia, response }: 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('id', id)
+ .where('editor_id', user.id) // Ensure the user is the editor of the dataset
.preload('reviewer', (builder) => {
builder.select('id', 'login', 'email');
})
@@ -480,9 +511,14 @@ export default class DatasetsController {
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');
})
@@ -555,7 +591,6 @@ export default class DatasetsController {
}
}
-
return response
.flash(
`You have successfully rejected dataset ${dataset.id} reviewed by ${dataset.reviewer.login}.${emailStatusMessage}`,
@@ -564,10 +599,16 @@ export default class DatasetsController {
.toRoute('editor.dataset.list');
}
- public async doiCreate({ request, inertia }: HttpContext) {
+ 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')
@@ -578,60 +619,110 @@ 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({ request, inertia, response }: HttpContext) {
+ public async edit({ request, inertia, response, auth }: HttpContext) {
const id = request.param('id');
- const datasetQuery = Dataset.query().where('id', 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'))
@@ -648,6 +739,7 @@ export default class DatasetsController {
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)) {
@@ -721,11 +813,16 @@ export default class DatasetsController {
});
}
- public async update({ request, response, session }: HttpContext) {
+ 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.findOrFail(datasetId);
+ const dataset = await Dataset.query().where('id', datasetId).where('editor_id', user.id).firstOrFail();
await dataset.load('files');
let trx: TransactionClientContract | null = null;
@@ -734,7 +831,7 @@ export default class DatasetsController {
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);
+ // const dataset = await Dataset.findOrFail(datasetId);
// save the licenses
const licenses: number[] = request.input('licenses', []);
@@ -900,6 +997,7 @@ export default class DatasetsController {
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();
@@ -919,10 +1017,15 @@ export default class DatasetsController {
}
}
- public async categorize({ inertia, request, response }: HttpContext) {
+ 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).preload('collections').firstOrFail();
+ 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!');
@@ -950,10 +1053,15 @@ export default class DatasetsController {
});
}
- public async categorizeUpdate({ request, response, session }: HttpContext) {
+ public async categorizeUpdate({ request, response, session, auth }: 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 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)) {
@@ -1121,9 +1229,20 @@ export default class DatasetsController {
// 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('Content-Type', file.mime_type || 'application/octet-stream');
- response.attachment(`${file.label}.${fileExt}`);
+ 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);
}
@@ -1136,19 +1255,18 @@ export default class DatasetsController {
}
}
- private async getDatasetXmlDomNode(dataset: Dataset) {
- const xmlModel = new XmlModel(dataset);
+ private async getDatasetXmlDomNode(dataset: Dataset): Promise {
+ 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 db49a32..47d1708 100644
--- a/app/Controllers/Http/Oai/OaiController.ts
+++ b/app/Controllers/Http/Oai/OaiController.ts
@@ -15,7 +15,7 @@ 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';
@@ -292,7 +292,7 @@ export default class OaiController {
this.xsltParameter['repIdentifier'] = repIdentifier;
const datasetNode = this.xml.root().ele('Datasets');
- const paginationParams: PagingParameter ={
+ const paginationParams: PagingParameter = {
cursor: 0,
totalLength: 0,
start: maxRecords + 1,
@@ -333,7 +333,7 @@ export default class OaiController {
}
private async handleNoResumptionToken(oaiRequest: Dictionary, paginationParams: PagingParameter, maxRecords: number) {
- this.validateMetadataPrefix(oaiRequest, paginationParams);
+ this.validateMetadataPrefix(oaiRequest, paginationParams);
const finder: ModelQueryBuilderContract = Dataset.query().whereIn(
'server_state',
this.deliveringDocumentStates,
@@ -347,16 +347,20 @@ export default class OaiController {
finder: ModelQueryBuilderContract,
paginationParams: PagingParameter,
oaiRequest: Dictionary,
- maxRecords: number
+ maxRecords: number,
) {
const totalResult = await finder
.clone()
.count('* as total')
.first()
.then((res) => res?.$extras.total);
- paginationParams.totalLength = Number(totalResult);
+ paginationParams.totalLength = Number(totalResult);
- const combinedRecords: Dataset[] = await finder.select('publish_id').orderBy('publish_id').offset(0).limit(maxRecords*2);
+ 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));
@@ -602,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) {
diff --git a/app/Controllers/Http/Reviewer/DatasetController.ts b/app/Controllers/Http/Reviewer/DatasetController.ts
index 6b54772..27f9b46 100644
--- a/app/Controllers/Http/Reviewer/DatasetController.ts
+++ b/app/Controllers/Http/Reviewer/DatasetController.ts
@@ -107,13 +107,12 @@ export default class DatasetsController {
}
return inertia.render('Reviewer/Dataset/Review', {
- dataset,
+ 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) {
@@ -370,6 +369,19 @@ export default class DatasetsController {
.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
@@ -377,9 +389,20 @@ export default class DatasetsController {
// 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('Content-Type', file.mime_type || 'application/octet-stream');
- response.attachment(`${file.label}.${fileExt}`);
+ 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 245b5d9..d666e6f 100644
--- a/app/Controllers/Http/Submitter/DatasetController.ts
+++ b/app/Controllers/Http/Submitter/DatasetController.ts
@@ -105,6 +105,7 @@ export default class DatasetController {
'reviewed',
'rejected_editor',
'rejected_reviewer',
+ 'rejected_to_reviewer',
])
.where('account_id', user.id)
.preload('titles')
@@ -233,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)
@@ -249,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)),
}),
)
@@ -324,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)
@@ -340,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)),
}),
)
@@ -819,13 +824,20 @@ export default class DatasetController {
};
// 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();
@@ -846,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)) {
@@ -928,7 +951,15 @@ export default class DatasetController {
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'))
@@ -944,8 +975,9 @@ 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!');
@@ -983,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,
@@ -1015,18 +1034,37 @@ export default class DatasetController {
referenceIdentifierTypes: Object.entries(ReferenceIdentifierTypes).map(([key, value]) => ({ value: key, label: value })),
relationTypes: Object.entries(RelationTypes).map(([key, value]) => ({ value: key, label: value })),
doctypes: DatasetTypes,
- can: {
+ can: {
edit: await auth.user?.can(['dataset-edit']),
delete: await auth.user?.can(['dataset-delete']),
},
});
}
- public async update({ request, response, session }: HttpContext) {
+ public async update({ request, response, session, auth }: HttpContext) {
// Get the dataset id from the route parameter
const datasetId = request.param('id');
- // Retrieve the dataset and load its existing files
- const dataset = await Dataset.findOrFail(datasetId);
+ 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);
@@ -1163,42 +1201,93 @@ export default class DatasetController {
}
}
- // Process all subjects/keywords from the request
- const subjects = request.input('subjects');
+ // ============================================
+ // IMPROVED SUBJECTS PROCESSING
+ // ============================================
+ const subjects = request.input('subjects', []);
+ const currentDatasetSubjectIds = new Set();
+
for (const subjectData of subjects) {
- // Case 1: Subject already exists in the database (has an ID)
+ let subjectToRelate: Subject;
+
+ // Case 1: Subject has an ID (existing subject being updated)
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;
+ // 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();
- // Only save if there are actual changes
- if (existingSubject.$isDirty) {
- await existingSubject.save();
+ 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;
}
-
- // 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);
+ // 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 (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]);
+ 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) {
@@ -1211,16 +1300,16 @@ export default class DatasetController {
.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
+ // Detach the subject from this dataset
+ await dataset.useTransaction(trx).related('subjects').detach([subject.id]);
- 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);
}
}
@@ -1399,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!');
@@ -1433,9 +1532,27 @@ 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)) {
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;
+ /** 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 86151e7..4232ac4 100644
--- a/app/Library/Doi/DoiClient.ts
+++ b/app/Library/Doi/DoiClient.ts
@@ -1,6 +1,3 @@
-// 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';
@@ -12,14 +9,14 @@ 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';
@@ -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 {
+ 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 {
+ 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 True if DOI exists
+ */
+ public async doiExists(doiValue: string): Promise {
+ const doiInfo = await this.getDoiInfo(doiValue);
+ return doiInfo !== null;
+ }
+
+ /**
+ * Gets the last modification date of a DOI
+ *
+ * @param doiValue The DOI identifier
+ * @returns Promise Last modification date or creation date if never updated, null if not found
+ */
+ public async getDoiLastModified(doiValue: string): Promise {
+ 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> The http response
+ */
+ public async makeDoiUnfindable(doiValue: string): Promise> {
+ 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> The http response
+ */
+ public async makeDoiFindable(doiValue: string, landingPageUrl: string): Promise> {
+ 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 The DOI state or null if not found
+ */
+ public async getDoiState(doiValue: string): Promise {
+ const doiInfo = await this.getDoiInfo(doiValue);
+ return doiInfo?.state || null;
+ }
}
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 {
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 {
- let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '');
- 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 {
+ const xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '');
+ 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 => {
-// 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 => {
-// let xml = create({ version: '1.0', encoding: 'UTF-8', standalone: true }, '');
-// 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 => {
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 => {
- 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} 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;
- 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 {
- 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 }, '');
- 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 {
- 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/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} 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 {
- // // 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 {
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 {
+ await this.delete();
+ logger.debug(`Invalidated cache for document ${this.document_id}`);
}
}
diff --git a/app/models/person.ts b/app/models/person.ts
index cdc612d..f4cf3a2 100644
--- a/app/models/person.ts
+++ b/app/models/person.ts
@@ -30,7 +30,7 @@ export default class Person extends BaseModel {
@column({})
public lastName: string;
- @column({})
+ @column({ columnName: 'identifier_orcid' })
public identifierOrcid: string;
@column({})
@@ -95,4 +95,34 @@ export default class Person extends BaseModel {
pivotColumns: ['role', 'sort_order', 'allow_email_contact'],
})
public datasets: ManyToMany;
+
+ // 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/user.ts b/app/models/user.ts
index 5dbaab4..7be02b9 100644
--- a/app/models/user.ts
+++ b/app/models/user.ts
@@ -89,24 +89,11 @@ export default class User extends compose(BaseModel, AuthFinder) {
@column({})
public avatar: string;
- // @hasOne(() => TotpSecret, {
- // foreignKey: 'user_id',
- // })
- // public totp_secret: HasOne;
-
- // @beforeSave()
- // public static async hashPassword(user: User) {
- // if (user.$dirty.password) {
- // user.password = await hash.use('laravel').make(user.password);
- // }
- // }
-
public get isTwoFactorEnabled(): boolean {
return Boolean(this?.twoFactorSecret && this.state == TotpState.STATE_ENABLED);
// return Boolean(this.totp_secret?.twoFactorSecret);
}
-
@manyToMany(() => Role, {
pivotForeignKey: 'account_id',
pivotRelatedForeignKey: 'role_id',
@@ -142,7 +129,9 @@ export default class User extends compose(BaseModel, AuthFinder) {
@beforeFind()
@beforeFetch()
public static preloadRoles(user: User) {
- user.preload('roles')
+ user.preload('roles', (builder) => {
+ builder.select(['id', 'name', 'display_name', 'description']);
+ });
}
public async getBackupCodes(this: User): Promise {
diff --git a/app/validators/dataset.ts b/app/validators/dataset.ts
index 5417463..f670b81 100644
--- a/app/validators/dataset.ts
+++ b/app/validators/dataset.ts
@@ -55,8 +55,8 @@ export const createDatasetValidator = vine.compile(
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- // .minLength(1),
- .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
+ // .minLength(1),
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
authors: vine
.array(
vine.object({
@@ -67,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)
@@ -83,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')
@@ -158,7 +160,8 @@ export const createDatasetValidator = vine.compile(
.fileScan({ removeInfected: true }),
)
.minLength(1),
- }),);
+ }),
+);
/**
* Validates the dataset's update action
@@ -214,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)
@@ -230,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)),
}),
)
@@ -305,12 +310,13 @@ 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(),
}),
);
@@ -365,8 +371,9 @@ export const updateEditorDatasetValidator = 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)
@@ -381,8 +388,9 @@ export const updateEditorDatasetValidator = 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)),
}),
)
@@ -496,7 +504,7 @@ 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')}`,
+ 'embargo_date.date.afterOrEqual': `Embargo date must be on or after ${dayjs().add(10, 'day').format('DD.MM.YYYY')}`,
});
createDatasetValidator.messagesProvider = messagesProvider;
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/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 {
+ 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 {
+ 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 {
+ 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 = {
+ 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 {
+ 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 {
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 {
- 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 - Array of datasets that need updates
+ */
+ // private async processChunk(datasets: Dataset[]): Promise {
+ // // 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 =>
+ // // 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 {
+ // 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 => result.status === 'fulfilled' && result.value !== null)
+ .map((result) => result.value!);
+ }
+
+ private async getDatasets(page: number, chunkSize: number): Promise {
+ 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 {
+ 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 {
+ 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 `);
+ }
+
+ private async showVerboseOutput(updatableDatasets: Dataset[]): Promise {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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 {
+ 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/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/mail.ts b/config/mail.ts
index 8016c29..a97489f 100644
--- a/config/mail.ts
+++ b/config/mail.ts
@@ -16,7 +16,7 @@ const mailConfig = defineConfig({
host: env.get('SMTP_HOST', ''),
port: env.get('SMTP_PORT'),
secure: false,
- // ignoreTLS: true,
+ ignoreTLS: true,
requireTLS: false,
/**
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 ` | `-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
+
+
+
+
+ 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/package-lock.json b/package-lock.json
index 6b10877..7cb57a4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,7 +10,7 @@
"dependencies": {
"@adonisjs/auth": "^9.2.4",
"@adonisjs/bodyparser": "^10.0.1",
- "@adonisjs/core": "^6.17.0",
+ "@adonisjs/core": "6.17.2",
"@adonisjs/cors": "^2.2.1",
"@adonisjs/drive": "^3.2.0",
"@adonisjs/inertia": "^2.1.3",
@@ -30,7 +30,6 @@
"@phc/format": "^1.0.0",
"@poppinss/manager": "^5.0.2",
"@vinejs/vine": "^3.0.0",
- "argon2": "^0.43.0",
"axios": "^1.7.9",
"bcrypt": "^5.1.1",
"bcryptjs": "^2.4.3",
@@ -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,9 +130,9 @@
}
},
"node_modules/@adonisjs/application": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.4.1.tgz",
- "integrity": "sha512-2vwO/8DoKJ9AR4Vvllz08RcomBoETc3FMf+q+ri1BVVjc76tLGV3KcYZp8+uKOuEreiK6poQ7NwJrR1P5ANA/w==",
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.4.2.tgz",
+ "integrity": "sha512-gxyQgl1n7M/hv7ZKQOlTo2adBMehjEO0ssWSG3AGW2RXdCvkHQKlatFXMuXJMmGg2P1AWJX0LEiXey9+qxC9Uw==",
"license": "MIT",
"dependencies": {
"@poppinss/hooks": "^7.2.5",
@@ -182,13 +181,13 @@
}
},
"node_modules/@adonisjs/auth": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-9.4.0.tgz",
- "integrity": "sha512-dzvnJRKY+RcKUXCRT6ebnlGV0wAfejTSGqS0XbgjB97r6Pww14MhsY89EBr1nSydQzvjdbtIR3EDGbU97BVmbQ==",
+ "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.4",
- "@poppinss/utils": "^6.9.2",
+ "@poppinss/utils": "^6.10.0",
"basic-auth": "^2.0.1"
},
"engines": {
@@ -258,30 +257,30 @@
}
},
"node_modules/@adonisjs/core": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-6.18.0.tgz",
- "integrity": "sha512-Uuj7kzlMPiS3MVOCHfiXLVeFXUqrjGjF43LNLJb4Q2hBY/q0T2kUym2kVO2gazkLWj8YQKLdOA4ij7t9rDR4OA==",
+ "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.4.1",
- "@adonisjs/bodyparser": "^10.1.0",
+ "@adonisjs/application": "^8.3.1",
+ "@adonisjs/bodyparser": "^10.0.3",
"@adonisjs/config": "^5.0.2",
"@adonisjs/encryption": "^6.0.2",
- "@adonisjs/env": "^6.2.0",
+ "@adonisjs/env": "^6.1.1",
"@adonisjs/events": "^9.0.2",
"@adonisjs/fold": "^10.1.3",
- "@adonisjs/hash": "^9.1.1",
+ "@adonisjs/hash": "^9.0.5",
"@adonisjs/health": "^2.0.0",
- "@adonisjs/http-server": "^7.6.1",
- "@adonisjs/logger": "^6.0.6",
+ "@adonisjs/http-server": "^7.4.0",
+ "@adonisjs/logger": "^6.0.5",
"@adonisjs/repl": "^4.1.0",
- "@antfu/install-pkg": "^1.1.0",
+ "@antfu/install-pkg": "^1.0.0",
"@paralleldrive/cuid2": "^2.2.2",
"@poppinss/colors": "^4.1.4",
- "@poppinss/dumper": "^0.6.3",
+ "@poppinss/dumper": "^0.6.2",
"@poppinss/macroable": "^1.0.4",
- "@poppinss/utils": "^6.9.3",
+ "@poppinss/utils": "^6.9.2",
"@sindresorhus/is": "^7.0.1",
"@types/he": "^1.2.3",
"error-stack-parser-es": "^1.0.5",
@@ -301,8 +300,8 @@
"peerDependencies": {
"@adonisjs/assembler": "^7.8.0",
"@vinejs/vine": "^2.1.0 || ^3.0.0",
- "argon2": "^0.31.2 || ^0.41.0 || ^0.43.0",
- "bcrypt": "^5.1.1 || ^6.0.0",
+ "argon2": "^0.31.2 || ^0.41.0",
+ "bcrypt": "^5.1.1",
"edge.js": "^6.2.0"
},
"peerDependenciesMeta": {
@@ -447,17 +446,49 @@
}
},
"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==",
+ "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/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": {
+ "@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/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",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/@adonisjs/hash": {
"version": "9.1.1",
"resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-9.1.1.tgz",
@@ -497,17 +528,17 @@
}
},
"node_modules/@adonisjs/http-server": {
- "version": "7.6.1",
- "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.6.1.tgz",
- "integrity": "sha512-2KHen5rcer6pDvJrDOhr5hJ9cSxSOOrdqmm9o9HkW/BAkMh42ymTIvCtaMmz6amrCSg0cdMO3ImmD8VBaMmfXA==",
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.7.0.tgz",
+ "integrity": "sha512-qW1wsp7f1BqRO2qmJ8laUaq8vnLjEvhgkMusLEa2ju6RBMMsph5w3cEDTXAwQO8fSSqNXmRTzPRQ1lUm/FXq0A==",
"license": "MIT",
"dependencies": {
"@paralleldrive/cuid2": "^2.2.2",
"@poppinss/macroable": "^1.0.4",
"@poppinss/matchit": "^3.1.2",
"@poppinss/middleware": "^3.2.5",
- "@poppinss/utils": "^6.9.3",
- "@sindresorhus/is": "^7.0.1",
+ "@poppinss/utils": "^6.10.0",
+ "@sindresorhus/is": "^7.0.2",
"accepts": "^1.3.8",
"content-disposition": "^0.5.4",
"cookie": "^1.0.2",
@@ -580,16 +611,16 @@
}
},
"node_modules/@adonisjs/lucid": {
- "version": "21.6.1",
- "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-21.6.1.tgz",
- "integrity": "sha512-0TLCcPm9GHShJlsDAF5SHilafnvTxW25y5nD3bGJBSMEaNfGXcGRBbnyWoeNs7DsnqMCZ6ociT+0XMcKJWzQrQ==",
+ "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.4",
- "@faker-js/faker": "^9.6.0",
- "@poppinss/hooks": "^7.2.5",
- "@poppinss/macroable": "^1.0.4",
- "@poppinss/utils": "^6.9.2",
+ "@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",
@@ -687,12 +718,12 @@
}
},
"node_modules/@adonisjs/repl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-4.1.0.tgz",
- "integrity": "sha512-7Ml87uoufDQmpjRZYbJeRTk0/WcD4DllJ96L1r2IWF/jZIsryiVN5o+7Xd7fHlRzd8iapAbs32Tq4a6fVI6UKA==",
+ "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.4",
+ "@poppinss/colors": "^4.1.5",
"string-width": "^7.2.0"
},
"engines": {
@@ -837,21 +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",
- "peer": true,
- "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",
@@ -875,6 +891,641 @@
"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.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
@@ -891,9 +1542,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.27.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
- "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
+ "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,
@@ -902,23 +1553,23 @@
}
},
"node_modules/@babel/core": {
- "version": "7.27.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
- "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
+ "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.27.1",
- "@babel/generator": "^7.27.3",
+ "@babel/generator": "^7.28.3",
"@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.27.3",
- "@babel/helpers": "^7.27.4",
- "@babel/parser": "^7.27.4",
+ "@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.27.4",
- "@babel/types": "^7.27.3",
+ "@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",
@@ -934,16 +1585,16 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.27.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
- "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
+ "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.27.5",
- "@babel/types": "^7.27.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": {
@@ -982,18 +1633,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",
- "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",
+ "version": "7.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.27.1",
+ "@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.27.1",
+ "@babel/traverse": "^7.28.3",
"semver": "^6.3.1"
},
"engines": {
@@ -1003,6 +1654,16 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
@@ -1032,15 +1693,15 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
- "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
+ "version": "7.28.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.27.1",
"@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.27.3"
+ "@babel/traverse": "^7.28.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1133,27 +1794,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.27.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz",
- "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",
+ "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.27.2",
- "@babel/types": "^7.27.3"
+ "@babel/types": "^7.28.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.27.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
- "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
+ "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.27.3"
+ "@babel/types": "^7.28.4"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1212,13 +1873,13 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz",
- "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==",
+ "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.27.1",
+ "@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",
@@ -1267,28 +1928,28 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.27.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
- "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
+ "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.27.1",
- "@babel/generator": "^7.27.3",
- "@babel/parser": "^7.27.4",
+ "@babel/generator": "^7.28.3",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.28.4",
"@babel/template": "^7.27.2",
- "@babel/types": "^7.27.3",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
+ "@babel/types": "^7.28.4",
+ "debug": "^4.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
- "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
+ "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.27.1",
@@ -1298,6 +1959,16 @@
"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",
@@ -1345,9 +2016,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
- "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+ "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"
],
@@ -1361,9 +2032,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
- "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.10.tgz",
+ "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==",
"cpu": [
"arm"
],
@@ -1377,9 +2048,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
- "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
+ "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"
],
@@ -1393,9 +2064,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
- "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.10.tgz",
+ "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==",
"cpu": [
"x64"
],
@@ -1409,9 +2080,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
- "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+ "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"
],
@@ -1425,9 +2096,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
- "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz",
+ "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==",
"cpu": [
"x64"
],
@@ -1441,9 +2112,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
- "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+ "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"
],
@@ -1457,9 +2128,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
- "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+ "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"
],
@@ -1473,9 +2144,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
- "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+ "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"
],
@@ -1489,9 +2160,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
- "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+ "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"
],
@@ -1505,9 +2176,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
- "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+ "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"
],
@@ -1521,9 +2192,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
- "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+ "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"
],
@@ -1537,9 +2208,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
- "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+ "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"
],
@@ -1553,9 +2224,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
- "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz",
+ "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==",
"cpu": [
"ppc64"
],
@@ -1569,9 +2240,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
- "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz",
+ "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==",
"cpu": [
"riscv64"
],
@@ -1585,9 +2256,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
- "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
+ "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"
],
@@ -1601,9 +2272,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
- "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
+ "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"
],
@@ -1617,9 +2288,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
+ "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"
],
@@ -1633,9 +2304,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
- "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
+ "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"
],
@@ -1649,9 +2320,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
- "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
+ "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"
],
@@ -1665,9 +2336,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
- "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
+ "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"
],
@@ -1680,10 +2351,26 @@
"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.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
- "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz",
+ "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==",
"cpu": [
"x64"
],
@@ -1697,9 +2384,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
- "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
+ "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"
],
@@ -1713,9 +2400,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
- "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
+ "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"
],
@@ -1729,9 +2416,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
- "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
+ "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"
],
@@ -1745,9 +2432,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "version": "4.9.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": {
@@ -1797,35 +2484,6 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@eslint/js": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
@@ -1837,9 +2495,9 @@
}
},
"node_modules/@faker-js/faker": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz",
- "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==",
+ "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",
@@ -1853,18 +2511,18 @@
}
},
"node_modules/@fontsource/archivo-black": {
- "version": "5.2.5",
- "resolved": "https://registry.npmjs.org/@fontsource/archivo-black/-/archivo-black-5.2.5.tgz",
- "integrity": "sha512-tdBRFgA0CgxVqj3mBM96aiXRBoOp51X3IW2e8/t59AVr0NwiBcB+c3C+p5dd7Np/UT/vqdmjb/gK/HaFpulhIA==",
+ "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.2.5",
- "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.2.5.tgz",
- "integrity": "sha512-kbsPKj0S4p44JdYRFiW78Td8Ge2sBVxi/PIBwmih+RpSXUdvS9nbs1HIiuUSPtRMi14CqLEZ/fbk7dj7vni1Sg==",
+ "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"
@@ -1938,13 +2596,14 @@
}
},
"node_modules/@inertiajs/core": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.11.tgz",
- "integrity": "sha512-DSFdkPLvLwHC0hePc/692WK9ItRzddVZ+OS5ZO1B2+6TmZnZH3kTQZGEhaYAtkAB+DHKxOm1oGHPKQrsAZ54qQ==",
+ "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": {
- "axios": "^1.8.2",
- "es-toolkit": "^1.34.1",
+ "@types/lodash-es": "^4.17.12",
+ "axios": "^1.12.0",
+ "lodash-es": "^4.17.21",
"qs": "^6.9.0"
}
},
@@ -1969,22 +2628,23 @@
}
},
"node_modules/@inertiajs/vue3": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.0.11.tgz",
- "integrity": "sha512-dlx62L7heOzQzBwRl7q/aZyS/b3AcwO2x6VMPfcSkCn+yA/HEImUJ6AlVojrl/vyvNf9PelermyQ7aWJNHdvqw==",
+ "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.0.11",
- "es-toolkit": "^1.33.0"
+ "@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": {
@@ -2006,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": {
@@ -2019,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": {
@@ -2057,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": {
@@ -2091,16 +2751,16 @@
}
},
"node_modules/@japa/assert": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@japa/assert/-/assert-4.0.1.tgz",
- "integrity": "sha512-n/dA9DVLNvM/Bw8DtN8kBdPjYsSHe3XTRjF5+U8vlzDavpW9skUANl2CHR1K/TBWZxwMfGi15SJIjo6UCs09AA==",
+ "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.4",
- "@types/chai": "^5.0.1",
+ "@poppinss/macroable": "^1.0.5",
+ "@types/chai": "^5.2.2",
"assertion-error": "^2.0.1",
- "chai": "^5.1.2"
+ "chai": "^5.2.1"
},
"engines": {
"node": ">=18.16.0"
@@ -2129,14 +2789,14 @@
}
},
"node_modules/@japa/errors-printer": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@japa/errors-printer/-/errors-printer-4.1.2.tgz",
- "integrity": "sha512-exl/r07ssJhEEsMdFT2sXgP1sV7Tp3mZvYUEDMXZ8YjWZPHTFLLcA7o9q9FJSSB1ITrEIbx2SWTB+2fFUaZ3NA==",
+ "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.4",
- "jest-diff": "^29.7.0",
+ "@poppinss/colors": "^4.1.5",
+ "jest-diff": "^30.0.4",
"supports-color": "^10.0.0",
"youch": "^4.1.0-beta.5"
},
@@ -2145,20 +2805,17 @@
}
},
"node_modules/@japa/errors-printer/node_modules/youch": {
- "version": "4.1.0-beta.8",
- "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.8.tgz",
- "integrity": "sha512-rY2A2lSF7zC+l7HH9Mq+83D1dLlsPnEvy8jTouzaptDZM6geqZ3aJe/b7ULCwRURPtWV3vbDjA2DDMdoBol0HQ==",
+ "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.4",
- "@poppinss/dumper": "^0.6.3",
+ "@poppinss/colors": "^4.1.5",
+ "@poppinss/dumper": "^0.6.4",
"@speed-highlight/core": "^1.2.7",
"cookie": "^1.0.2",
- "youch-core": "^0.3.1"
- },
- "engines": {
- "node": ">=18"
+ "youch-core": "^0.3.3"
}
},
"node_modules/@japa/plugin-adonisjs": {
@@ -2190,54 +2847,84 @@
}
},
"node_modules/@japa/runner": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@japa/runner/-/runner-4.2.0.tgz",
- "integrity": "sha512-e3BFn1rca/OTiagilkmRTrLVhl00iC/LrY5j4Ns/VZDONYHs9BKAbHaImxjD1zoHMEhwQEF+ce7fgMO/BK+lfg==",
+ "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": "^10.3.0",
- "@japa/errors-printer": "^4.1.2",
- "@poppinss/colors": "^4.1.4",
- "@poppinss/hooks": "^7.2.5",
+ "@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-dir": "^5.0.0",
+ "find-cache-directory": "^6.0.0",
"getopts": "^2.3.0",
"ms": "^2.1.3",
"serialize-error": "^12.0.0",
"slash": "^5.1.0",
- "supports-color": "^10.0.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": "^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": {
@@ -2250,20 +2937,10 @@
"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,
@@ -2273,15 +2950,15 @@
}
},
"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": {
@@ -2306,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.2.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz",
- "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==",
+ "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"
@@ -2330,11 +3065,15 @@
}
},
"node_modules/@jsonjoy.com/util": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz",
- "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==",
+ "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"
},
@@ -2554,9 +3293,9 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
- "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
+ "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": {
@@ -2587,12 +3326,12 @@
}
},
"node_modules/@poppinss/cliui": {
- "version": "6.4.3",
- "resolved": "https://registry.npmjs.org/@poppinss/cliui/-/cliui-6.4.3.tgz",
- "integrity": "sha512-flAHvbWHP4r7+DVcWMuO9EGnnkaZLJzkei6E4QTVhPsIAKBI78vDplhHXZofUvwG5IrU42QM0gX/pxMOKwQRvg==",
+ "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",
@@ -2602,51 +3341,39 @@
"supports-color": "^10.0.0",
"terminal-size": "^4.0.0",
"wordwrap": "^1.0.0"
- },
- "engines": {
- "node": ">=18.16.0"
}
},
"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.3",
- "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.6.3.tgz",
- "integrity": "sha512-iombbn8ckOixMtuV1p3f8jN6vqhXefNjJttoPaJDMeIk/yIGhkkL3OrHkEjE9SRsgoAx1vBUU2GtgggjvA5hCA==",
+ "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/exception": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.1.tgz",
- "integrity": "sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
+ "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",
@@ -2658,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",
@@ -2673,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",
@@ -2711,24 +3432,21 @@
}
},
"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.6.0",
- "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.6.0.tgz",
- "integrity": "sha512-HfAf9VqTvo31BsruwgwEauQ316RNODdryk6QgYZo4qTV50s0h1H9HmIr+QjwwI3u4Sz7r4Q1dd1EVaLB7pWlaw==",
+ "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",
@@ -2741,10 +3459,16 @@
"truncatise": "^0.0.8"
}
},
+ "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.4",
- "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.9.4.tgz",
- "integrity": "sha512-KJe9/ebFBqb4fFBdadgN4YgT4bHAKdWhLAFzjaeDqx5vOCtD3C+byN5DrORVNbwAjt+rb8beP8pXaWZWx+WmTA==",
+ "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.1",
@@ -2775,27 +3499,27 @@
"license": "BSD-3-Clause"
},
"node_modules/@poppinss/validator-lite": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@poppinss/validator-lite/-/validator-lite-2.1.0.tgz",
- "integrity": "sha512-CfT8EPeB7jKxjCb5+KP32iu/0BB7cKlRRqMBcCwzky0WgFACsFlRtvHsy+CkOszHmNyOdoH3WoyMyoxVCu9qEw==",
+ "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": "5.5.5",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.5.5.tgz",
- "integrity": "sha512-M0GDmw8k0EOFoSpmMjhFUADk/apoano97fLSpT81opgmkkDtBB9iB6l6husxnzK5t2qNz/o0+OCVG9g6lEEwKw==",
+ "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": "^5.5.5"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/client": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.5.5.tgz",
- "integrity": "sha512-1Dv/CVdMNLw0mlROSnmpp4MQu+6YIJX0YR0h3g2hnPdLvk6L7TcRcrUj7BQFGSeZD2MxklAUO+rp09ITUqE5Og==",
+ "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"
@@ -2805,45 +3529,45 @@
}
},
"node_modules/@redis/json": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.5.5.tgz",
- "integrity": "sha512-Nq8wHjOhwuhD05YPWFPL9RyT3K1VdT37TKvqbhykZA2MWQgjjhLn5i1/6zZ+1b0Zc/Sr9E0eK9J8txk6YJR6EA==",
+ "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": "^5.5.5"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/search": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.5.5.tgz",
- "integrity": "sha512-xM/DKrRhbsMS2QQF5bBPjR7P/QEjWWZDUr92r+UOwkZjvc/kmy0tp7h8zkxBo2jtSF99vkk2mwMzn6fQ8d60aQ==",
+ "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": "^5.5.5"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@redis/time-series": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.5.5.tgz",
- "integrity": "sha512-2ifwV75Fv/uVX4n0zqvgqIlIInHZtVj+afjcbXPBD2GhG2AeVfkitTz1bMnGnNDA78sWRYooK42OWH9yqujjyQ==",
+ "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": "^5.5.5"
+ "@redis/client": "^5.8.2"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
- "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
+ "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"
],
@@ -2854,9 +3578,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
- "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
+ "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"
],
@@ -2867,9 +3591,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
- "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
+ "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"
],
@@ -2880,9 +3604,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
- "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
+ "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"
],
@@ -2893,9 +3617,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
- "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
+ "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"
],
@@ -2906,9 +3630,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
- "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
+ "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"
],
@@ -2919,9 +3643,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
- "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
+ "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"
],
@@ -2932,9 +3656,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
- "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
+ "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"
],
@@ -2945,9 +3669,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
- "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
+ "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"
],
@@ -2958,9 +3682,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
- "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
+ "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"
],
@@ -2970,10 +3694,10 @@
"linux"
]
},
- "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
- "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
+ "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"
],
@@ -2983,10 +3707,10 @@
"linux"
]
},
- "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
- "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
+ "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"
],
@@ -2997,9 +3721,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
- "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
+ "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"
],
@@ -3010,9 +3734,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
- "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
+ "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"
],
@@ -3023,9 +3747,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
- "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
+ "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"
],
@@ -3036,9 +3760,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
- "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
+ "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"
],
@@ -3049,9 +3773,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
- "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
+ "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"
],
@@ -3061,10 +3785,23 @@
"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"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
- "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
+ "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"
],
@@ -3075,9 +3812,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
- "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
+ "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"
],
@@ -3088,9 +3825,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
- "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
+ "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"
],
@@ -3107,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.2",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.2.tgz",
- "integrity": "sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==",
+ "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"
@@ -3138,6 +3875,590 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "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": {
+ "@smithy/types": "^4.5.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "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",
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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": ">=18.0.0"
+ }
+ },
+ "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",
@@ -3146,9 +4467,9 @@
"license": "CC0-1.0"
},
"node_modules/@swc/wasm": {
- "version": "1.11.29",
- "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.11.29.tgz",
- "integrity": "sha512-FirHVrjDsaLICll/iXJzK99TbIbMfYiAGLV6Cbc3W29Q/QFCeiO0tpHObXXdTiJgV2tHIsuwRfCaSYNwyrRDDg==",
+ "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"
},
@@ -3178,9 +4499,9 @@
}
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.13.9",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.9.tgz",
- "integrity": "sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==",
+ "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": {
@@ -3189,13 +4510,13 @@
}
},
"node_modules/@tanstack/vue-virtual": {
- "version": "3.13.9",
- "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.9.tgz",
- "integrity": "sha512-HsvHaOo+o52cVcPhomKDZ3CMpTF/B2qg+BhPHIQJwzn4VIqDyt/rRVqtIomG6jE83IFsE2vlr6cmx7h3dHA0SA==",
+ "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.9"
+ "@tanstack/virtual-core": "3.13.12"
},
"funding": {
"type": "github",
@@ -3243,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": {
@@ -3326,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": {
@@ -3445,15 +4766,15 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "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.22",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz",
- "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==",
+ "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": {
@@ -3507,9 +4828,9 @@
"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"
},
@@ -3541,19 +4862,34 @@
}
},
"node_modules/@types/leaflet": {
- "version": "1.9.18",
- "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.18.tgz",
- "integrity": "sha512-ht2vsoPjezor5Pmzi5hdsA7F++v5UGq9OlUduWHmMZiuQGIpJ2WS5+Gg9HaAA79gNh1AIPtCqhzejcIZ3lPzXQ==",
+ "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.6.2",
- "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz",
- "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==",
+ "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"
},
@@ -3572,18 +4908,18 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.15.29",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz",
- "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",
+ "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.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": {
@@ -3591,11 +4927,12 @@
}
},
"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": "*"
}
},
@@ -3662,16 +4999,16 @@
"license": "MIT"
},
"node_modules/@types/semver": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz",
- "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==",
+ "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": {
@@ -3690,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": {
@@ -3752,10 +5089,16 @@
"@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.15.1",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.1.tgz",
- "integrity": "sha512-9gG6ogYcoI2mCMLdcO0NYI0AYrbxIjv0MDmy/5Ywo6CpWWrqYayc+mmgxRsCgtcGJm9BSbXkMsmxGah1iGHAAQ==",
+ "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": {
@@ -4080,9 +5423,9 @@
}
},
"node_modules/@vavite/multibuild/node_modules/@types/node": {
- "version": "18.19.110",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.110.tgz",
- "integrity": "sha512-WW2o4gTmREtSnqKty9nhqF/vA0GKd0V/rbC0OyjSk9Bz6bzlsXKT+i7WDdS/a0z74rfT2PO4dArVCSnapNLA5Q==",
+ "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",
"dependencies": {
"undici-types": "~5.26.4"
@@ -4137,73 +5480,73 @@
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz",
- "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",
+ "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.27.2",
- "@vue/shared": "3.5.16",
+ "@babel/parser": "^7.28.3",
+ "@vue/shared": "3.5.21",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",
- "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",
+ "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.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-core": "3.5.21",
+ "@vue/shared": "3.5.21"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",
- "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",
+ "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.27.2",
- "@vue/compiler-core": "3.5.16",
- "@vue/compiler-dom": "3.5.16",
- "@vue/compiler-ssr": "3.5.16",
- "@vue/shared": "3.5.16",
+ "@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.17",
- "postcss": "^8.5.3",
+ "magic-string": "^0.30.18",
+ "postcss": "^8.5.6",
"source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",
- "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",
+ "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.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-dom": "3.5.21",
+ "@vue/shared": "3.5.21"
}
},
"node_modules/@vue/devtools-api": {
- "version": "7.7.6",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.6.tgz",
- "integrity": "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==",
+ "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",
"dependencies": {
- "@vue/devtools-kit": "^7.7.6"
+ "@vue/devtools-kit": "^7.7.7"
}
},
"node_modules/@vue/devtools-kit": {
- "version": "7.7.6",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz",
- "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==",
+ "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.6",
+ "@vue/devtools-shared": "^7.7.7",
"birpc": "^2.3.0",
"hookable": "^5.5.3",
"mitt": "^3.0.1",
@@ -4213,9 +5556,9 @@
}
},
"node_modules/@vue/devtools-shared": {
- "version": "7.7.6",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz",
- "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==",
+ "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": {
@@ -4223,53 +5566,53 @@
}
},
"node_modules/@vue/reactivity": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.16.tgz",
- "integrity": "sha512-FG5Q5ee/kxhIm1p2bykPpPwqiUBV3kFySsHEQha5BJvjXdZTUfmya7wP7zC39dFuZAcf/PD5S4Lni55vGLMhvA==",
+ "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.16"
+ "@vue/shared": "3.5.21"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz",
- "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==",
+ "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.16",
- "@vue/shared": "3.5.16"
+ "@vue/reactivity": "3.5.21",
+ "@vue/shared": "3.5.21"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz",
- "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==",
+ "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.16",
- "@vue/runtime-core": "3.5.16",
- "@vue/shared": "3.5.16",
+ "@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.16",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz",
- "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==",
+ "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.16",
- "@vue/shared": "3.5.16"
+ "@vue/compiler-ssr": "3.5.21",
+ "@vue/shared": "3.5.21"
},
"peerDependencies": {
- "vue": "3.5.16"
+ "vue": "3.5.21"
}
},
"node_modules/@vue/shared": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz",
- "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==",
+ "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": {
@@ -4511,9 +5854,9 @@
}
},
"node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "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"
@@ -4522,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",
@@ -4626,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"
@@ -4712,9 +6069,9 @@
}
},
"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": {
@@ -4739,15 +6096,17 @@
"license": "MIT"
},
"node_modules/argon2": {
- "version": "0.43.0",
- "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.43.0.tgz",
- "integrity": "sha512-u/HKLcbWShVDhkfwI4hWyiUf3qyX8QhTfaIv2cWE18uqhXCmR5hb6Ed7oqYi2KCQegeAnRhiFzbjzm7i5yl1GA==",
+ "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": {
"@phc/format": "^1.0.0",
- "node-addon-api": "^8.3.1",
- "node-gyp-build": "^4.8.4"
+ "node-addon-api": "^8.1.0",
+ "node-gyp-build": "^4.8.1"
},
"engines": {
"node": ">=16.17.0"
@@ -4882,27 +6241,27 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
- "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
+ "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.15.6",
- "form-data": "^4.0.0",
+ "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"
@@ -4917,6 +6276,16 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT"
},
+ "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,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
"node_modules/basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
@@ -4982,9 +6351,9 @@
}
},
"node_modules/birpc": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz",
- "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==",
+ "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": {
@@ -5136,10 +6505,16 @@
"multicast-dns": "^7.2.5"
}
},
+ "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",
@@ -5159,9 +6534,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
- "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
+ "version": "4.26.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz",
+ "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==",
"dev": true,
"funding": [
{
@@ -5179,9 +6554,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001718",
- "electron-to-chromium": "^1.5.160",
- "node-releases": "^2.0.19",
+ "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": {
@@ -5322,9 +6698,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001721",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
- "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
+ "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": [
{
@@ -5355,9 +6731,9 @@
}
},
"node_modules/chai": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
- "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
+ "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": {
@@ -5368,7 +6744,7 @@
"pathval": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/chalk": {
@@ -5402,9 +6778,9 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.9",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz",
- "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==",
+ "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": {
@@ -5726,9 +7102,9 @@
}
},
"node_modules/compression": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz",
- "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
+ "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5736,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"
},
@@ -5875,9 +7251,9 @@
}
},
"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": {
@@ -6030,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.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -6089,9 +7465,9 @@
}
},
"node_modules/dedent": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
- "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz",
+ "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
@@ -6246,9 +7622,9 @@
}
},
"node_modules/detect-libc": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
- "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+ "version": "2.1.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"
@@ -6289,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",
@@ -6367,9 +7733,9 @@
}
},
"node_modules/dotenv": {
- "version": "16.5.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
- "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+ "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"
@@ -6399,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": {
@@ -6473,9 +7839,9 @@
}
},
"node_modules/edge.js": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-6.2.1.tgz",
- "integrity": "sha512-me875zh6YA0V429hywgQIpHgMvQkondv5XHaP6EsL2yIBpLcBWCl7Ba1cai0SwYhp8iD0IyV3KjpxLrnW7S2Ag==",
+ "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",
@@ -6502,16 +7868,16 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.164",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.164.tgz",
- "integrity": "sha512-TXBrF2aZenRjY3wbj5Yc0mZn43lMiSHNkzwPkIxx+vWUB35Kf8Gm/uOYmOJFNQ7SUwWAinbfxX73ANIud65wSA==",
+ "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.1.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.1.0.tgz",
- "integrity": "sha512-rsX7ktqARv/6UQDgMaLfIqUWAEzzbCQiVh7V9rhDXp6c37yoJcks12NVD+XPkgl4AEavmNhVfrhGoqYwIsMYYA==",
+ "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"
@@ -6521,9 +7887,9 @@
}
},
"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/encodeurl": {
@@ -6536,9 +7902,9 @@
}
},
"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": {
@@ -6546,9 +7912,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
- "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "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": {
@@ -6607,9 +7973,9 @@
}
},
"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": {
@@ -6676,20 +8042,10 @@
"node": ">= 0.4"
}
},
- "node_modules/es-toolkit": {
- "version": "1.38.0",
- "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.38.0.tgz",
- "integrity": "sha512-OT3AxczYYd3W50bCj4V0hKoOAfqIy9tof0leNQYekEDxVKir3RTVTJOLij7VAe6fsCNsGhC0JqIkURpMXTCSEA==",
- "license": "MIT",
- "workspaces": [
- "docs",
- "benchmarks"
- ]
- },
"node_modules/esbuild": {
- "version": "0.25.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
- "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+ "version": "0.25.10",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz",
+ "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -6699,31 +8055,32 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.5",
- "@esbuild/android-arm": "0.25.5",
- "@esbuild/android-arm64": "0.25.5",
- "@esbuild/android-x64": "0.25.5",
- "@esbuild/darwin-arm64": "0.25.5",
- "@esbuild/darwin-x64": "0.25.5",
- "@esbuild/freebsd-arm64": "0.25.5",
- "@esbuild/freebsd-x64": "0.25.5",
- "@esbuild/linux-arm": "0.25.5",
- "@esbuild/linux-arm64": "0.25.5",
- "@esbuild/linux-ia32": "0.25.5",
- "@esbuild/linux-loong64": "0.25.5",
- "@esbuild/linux-mips64el": "0.25.5",
- "@esbuild/linux-ppc64": "0.25.5",
- "@esbuild/linux-riscv64": "0.25.5",
- "@esbuild/linux-s390x": "0.25.5",
- "@esbuild/linux-x64": "0.25.5",
- "@esbuild/netbsd-arm64": "0.25.5",
- "@esbuild/netbsd-x64": "0.25.5",
- "@esbuild/openbsd-arm64": "0.25.5",
- "@esbuild/openbsd-x64": "0.25.5",
- "@esbuild/sunos-x64": "0.25.5",
- "@esbuild/win32-arm64": "0.25.5",
- "@esbuild/win32-ia32": "0.25.5",
- "@esbuild/win32-x64": "0.25.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": {
@@ -6824,9 +8181,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
- "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
+ "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": {
@@ -6857,9 +8214,9 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz",
- "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==",
+ "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": {
@@ -6917,35 +8274,6 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/esm": {
"version": "3.2.25",
"resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
@@ -7310,9 +8638,9 @@
"license": "MIT"
},
"node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"dev": true,
"funding": [
{
@@ -7326,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",
@@ -7358,10 +8704,13 @@
}
},
"node_modules/fdir": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
- "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "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"
},
@@ -7472,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"
@@ -7510,7 +8859,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
"integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=18"
@@ -7612,15 +8961,15 @@
}
},
"node_modules/flydrive": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/flydrive/-/flydrive-1.2.0.tgz",
- "integrity": "sha512-l9ix5MhBE8bVwxyHdFku6z5KhGOCOXQDI9xGNIlACSz9UrDFQxAB1I6W0qffZiOBBDambiJZlEYBCxlvF4U7fw==",
+ "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.2",
- "@poppinss/utils": "^6.9.2",
+ "@humanwhocodes/retry": "^0.4.3",
+ "@poppinss/utils": "^6.10.0",
"etag": "^1.8.1",
- "mime-types": "^2.1.35"
+ "mime-types": "^3.0.1"
},
"engines": {
"node": ">=20.6.0"
@@ -7642,27 +8991,6 @@
}
}
},
- "node_modules/flydrive/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/flydrive/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/focus-trap": {
"version": "7.6.5",
"resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
@@ -7673,9 +9001,9 @@
}
},
"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",
@@ -7710,14 +9038,15 @@
}
},
"node_modules/form-data": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
- "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "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": {
@@ -7725,9 +9054,9 @@
}
},
"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"
@@ -7812,9 +9141,9 @@
}
},
"node_modules/fs-extra": {
- "version": "11.3.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
- "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
+ "version": "11.3.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",
@@ -7967,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"
@@ -8102,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",
@@ -8110,13 +9456,19 @@
"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==",
+ "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": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/globby": {
@@ -8176,9 +9528,9 @@
}
},
"node_modules/got": {
- "version": "14.4.7",
- "resolved": "https://registry.npmjs.org/got/-/got-14.4.7.tgz",
- "integrity": "sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==",
+ "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",
@@ -8200,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",
@@ -8612,15 +9976,19 @@
}
},
"node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "version": "0.7.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.0.0"
},
"engines": {
"node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/ieee754": {
@@ -8738,12 +10106,12 @@
}
},
"node_modules/ioredis": {
- "version": "5.6.1",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz",
- "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==",
+ "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",
@@ -8874,9 +10242,9 @@
}
},
"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": {
@@ -9003,29 +10371,19 @@
}
},
"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-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": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker": {
@@ -9062,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==",
+ "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": {
@@ -9171,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"
@@ -9319,14 +10677,14 @@
}
},
"node_modules/launch-editor": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz",
- "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==",
+ "version": "2.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": {
@@ -9401,6 +10759,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
+ "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": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
@@ -9440,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"
@@ -9452,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"
@@ -9464,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"
@@ -9479,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",
@@ -9495,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"
@@ -9510,9 +10874,9 @@
}
},
"node_modules/loupe": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
- "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
+ "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
"dev": true,
"license": "MIT"
},
@@ -9540,21 +10904,21 @@
}
},
"node_modules/luxon": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
- "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
+ "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/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": {
@@ -9603,15 +10967,17 @@
}
},
"node_modules/memfs": {
- "version": "4.17.2",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz",
- "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==",
+ "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": {
- "@jsonjoy.com/json-pack": "^1.0.3",
- "@jsonjoy.com/util": "^1.3.0",
- "tree-dump": "^1.0.1",
+ "@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": {
@@ -9702,9 +11068,9 @@
}
},
"node_modules/mime": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz",
- "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==",
+ "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"
],
@@ -9961,10 +11327,12 @@
}
},
"node_modules/node-addon-api": {
- "version": "8.3.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz",
- "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==",
+ "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"
}
@@ -10010,6 +11378,8 @@
"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",
@@ -10017,9 +11387,9 @@
}
},
"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"
},
@@ -10096,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"
@@ -10240,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": {
@@ -10274,16 +11644,16 @@
}
},
"node_modules/open": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
- "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
+ "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"
@@ -10604,28 +11974,15 @@
}
},
"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": "7.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-7.0.0.tgz",
- "integrity": "sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "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",
@@ -10634,22 +11991,22 @@
"license": "MIT"
},
"node_modules/pg": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz",
- "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==",
+ "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.9.0",
- "pg-pool": "^3.10.0",
- "pg-protocol": "^1.10.0",
+ "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.2.5"
+ "pg-cloudflare": "^1.2.7"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
@@ -10661,9 +12018,9 @@
}
},
"node_modules/pg-cloudflare": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.5.tgz",
- "integrity": "sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==",
+ "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
},
@@ -10683,18 +12040,18 @@
}
},
"node_modules/pg-pool": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.0.tgz",
- "integrity": "sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==",
+ "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.10.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.0.tgz",
- "integrity": "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==",
+ "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": {
@@ -10714,9 +12071,9 @@
}
},
"node_modules/pg/node_modules/pg-connection-string": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.0.tgz",
- "integrity": "sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==",
+ "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": {
@@ -10735,9 +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==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -10779,9 +12136,9 @@
}
},
"node_modules/pino": {
- "version": "9.7.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz",
- "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==",
+ "version": "9.10.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.10.0.tgz",
+ "integrity": "sha512-VOFxoNnxICtxaN8S3E73pR66c5MTFC+rwRcNRyHV/bV/c90dXvJqMfjkeRFsGBDXmlUN3LccJQPqGIufnaJePA==",
"license": "MIT",
"dependencies": {
"atomic-sleep": "^1.0.0",
@@ -10810,9 +12167,9 @@
}
},
"node_modules/pino-pretty": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz",
- "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==",
+ "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": {
@@ -10826,14 +12183,44 @@
"on-exit-leak-free": "^2.1.0",
"pino-abstract-transport": "^2.0.0",
"pump": "^3.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/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",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pino-std-serializers": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
@@ -10851,48 +12238,21 @@
}
},
"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==",
+ "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": {
- "find-up": "^6.3.0"
+ "find-up-simple": "^1.0.0"
},
"engines": {
- "node": ">=14.16"
+ "node": ">=18"
},
"funding": {
"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==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^7.1.0",
- "path-exists": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/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",
@@ -10912,9 +12272,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.4",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
- "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"funding": [
{
"type": "opencollective",
@@ -10958,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"
@@ -10969,10 +12339,6 @@
"engines": {
"node": "^12 || ^14 || >= 16"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": "^8.4.21"
}
@@ -11014,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"
@@ -11155,9 +12521,9 @@
}
},
"node_modules/prettier": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
- "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "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": {
@@ -11184,18 +12550,18 @@
}
},
"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": {
@@ -11221,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": {
@@ -11295,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": {
@@ -11348,9 +12714,9 @@
}
},
"node_modules/quansync": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz",
- "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==",
+ "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": [
{
@@ -11433,18 +12799,18 @@
}
},
"node_modules/raw-body": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
- "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
+ "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.6.3",
+ "iconv-lite": "0.7.0",
"unpipe": "1.0.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.10"
}
},
"node_modules/react-is": {
@@ -11482,6 +12848,19 @@
"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",
@@ -11520,6 +12899,19 @@
"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",
@@ -11583,16 +12975,16 @@
}
},
"node_modules/redis": {
- "version": "5.5.5",
- "resolved": "https://registry.npmjs.org/redis/-/redis-5.5.5.tgz",
- "integrity": "sha512-x7vpciikEY7nptGzQrE5I+/pvwFZJDadPk/uEoyGSg/pZ2m/CX2n5EhSgUh+S5T7Gz3uKM6YzWcXEu3ioAsdFQ==",
+ "version": "5.8.2",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-5.8.2.tgz",
+ "integrity": "sha512-31vunZj07++Y1vcFGcnNWEf5jPoTkGARgfWI4+Tk55vdwHxhAvug8VEtW7Cx+/h47NuJTEg/JL77zAwC6E0OeA==",
"license": "MIT",
"dependencies": {
- "@redis/bloom": "5.5.5",
- "@redis/client": "5.5.5",
- "@redis/json": "5.5.5",
- "@redis/search": "5.5.5",
- "@redis/time-series": "5.5.5"
+ "@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"
@@ -11774,12 +13166,12 @@
"license": "MIT"
},
"node_modules/rollup": {
- "version": "4.41.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
- "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
+ "version": "4.51.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.51.0.tgz",
+ "integrity": "sha512-7cR0XWrdp/UAj2HMY/Y4QQEUjidn3l2AY1wSeZoFjMbD8aOMPoV9wgTFYbrJpPzzvejDEini1h3CiUP8wLzxQA==",
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.7"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -11789,33 +13181,34 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.41.1",
- "@rollup/rollup-android-arm64": "4.41.1",
- "@rollup/rollup-darwin-arm64": "4.41.1",
- "@rollup/rollup-darwin-x64": "4.41.1",
- "@rollup/rollup-freebsd-arm64": "4.41.1",
- "@rollup/rollup-freebsd-x64": "4.41.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
- "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
- "@rollup/rollup-linux-arm64-gnu": "4.41.1",
- "@rollup/rollup-linux-arm64-musl": "4.41.1",
- "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
- "@rollup/rollup-linux-riscv64-musl": "4.41.1",
- "@rollup/rollup-linux-s390x-gnu": "4.41.1",
- "@rollup/rollup-linux-x64-gnu": "4.41.1",
- "@rollup/rollup-linux-x64-musl": "4.41.1",
- "@rollup/rollup-win32-arm64-msvc": "4.41.1",
- "@rollup/rollup-win32-ia32-msvc": "4.41.1",
- "@rollup/rollup-win32-x64-msvc": "4.41.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": {
@@ -12062,6 +13455,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/serialize-error/node_modules/type-fest": {
+ "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": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -12364,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"
@@ -12396,6 +13802,16 @@
"websocket-driver": "^0.7.4"
}
},
+ "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",
@@ -12471,9 +13887,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.21",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
- "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+ "version": "3.0.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"
},
@@ -12631,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"
@@ -12643,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"
@@ -12724,14 +14140,25 @@
"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": "10.2.2",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.2.2.tgz",
- "integrity": "sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==",
+ "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": "^7.0.0"
+ "@tokenizer/token": "^0.3.0"
},
"engines": {
"node": ">=18"
@@ -12765,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": {
@@ -12835,7 +14262,7 @@
"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",
+ "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": {
@@ -12897,6 +14324,7 @@
"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": {
@@ -12908,9 +14336,9 @@
}
},
"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==",
+ "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": ">=18"
@@ -12932,13 +14360,13 @@
}
},
"node_modules/synckit": {
- "version": "0.11.8",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
- "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
+ "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.2.4"
+ "@pkgr/core": "^0.2.9"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -13029,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",
@@ -13056,13 +14494,17 @@
}
},
"node_modules/tapable": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
- "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "version": "2.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": {
@@ -13119,15 +14561,15 @@
}
},
"node_modules/terser": {
- "version": "5.40.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz",
- "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",
+ "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.14.0",
+ "acorn": "^8.15.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -13213,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"
}
@@ -13282,13 +14728,13 @@
"license": "MIT"
},
"node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"license": "MIT",
"dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
},
"engines": {
"node": ">=12.0.0"
@@ -13334,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"
},
@@ -13357,9 +14804,9 @@
"license": "MIT"
},
"node_modules/tree-dump": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz",
- "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==",
+ "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": {
@@ -13387,9 +14834,9 @@
"license": "Apache-2.0"
},
"node_modules/ts-loader": {
- "version": "9.5.2",
- "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz",
- "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==",
+ "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": {
@@ -13421,13 +14868,13 @@
}
},
"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": ">= 12"
}
},
"node_modules/ts-morph": {
@@ -13442,9 +14889,9 @@
}
},
"node_modules/ts-node-maintained": {
- "version": "10.9.5",
- "resolved": "https://registry.npmjs.org/ts-node-maintained/-/ts-node-maintained-10.9.5.tgz",
- "integrity": "sha512-p8LJFxBTE3YZYGcOMxWKEpaY2nz55NyOg+mTDIOW/MrOIUTAAb7+UkleRu5z90P/fCVVv5pXN1/nb92G/tSNyw==",
+ "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": {
@@ -13544,12 +14991,13 @@
}
},
"node_modules/type-fest": {
- "version": "4.41.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
- "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "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"
@@ -13596,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"
@@ -13702,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"
@@ -13754,9 +15205,9 @@
}
},
"node_modules/vite": {
- "version": "6.3.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
- "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz",
+ "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==",
"license": "MIT",
"dependencies": {
"esbuild": "^0.25.0",
@@ -13843,16 +15294,16 @@
}
},
"node_modules/vue": {
- "version": "3.5.16",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz",
- "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==",
+ "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.16",
- "@vue/compiler-sfc": "3.5.16",
- "@vue/runtime-dom": "3.5.16",
- "@vue/server-renderer": "3.5.16",
- "@vue/shared": "3.5.16"
+ "@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": "*"
@@ -13939,23 +15390,24 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.99.9",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz",
- "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",
+ "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",
@@ -13969,7 +15421,7 @@
"tapable": "^2.1.1",
"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"
@@ -13988,15 +15440,15 @@
}
},
"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"
@@ -14017,29 +15469,6 @@
}
}
},
- "node_modules/webpack-dev-middleware/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/webpack-dev-middleware/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/webpack-dev-server": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz",
@@ -14173,9 +15602,9 @@
}
},
"node_modules/webpack-sources": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz",
- "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==",
+ "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,
@@ -14346,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",
@@ -14414,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"
@@ -14426,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"
@@ -14438,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"
@@ -14459,9 +15888,9 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.18.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
- "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
+ "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": {
@@ -14480,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",
@@ -14555,9 +16000,9 @@
"peer": true
},
"node_modules/yaml": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
- "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
+ "version": "2.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": {
@@ -14724,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": {
@@ -14748,17 +16193,14 @@
}
},
"node_modules/youch-core": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.2.tgz",
- "integrity": "sha512-fusrlIMLeRvTFYLUjJ9KzlGC3N+6MOPJ68HNj/yJv2nz7zq8t4HEviLms2gkdRPUS7F5rZ5n+pYx9r88m6IE1g==",
+ "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.0",
+ "@poppinss/exception": "^1.2.2",
"error-stack-parser-es": "^1.0.5"
- },
- "engines": {
- "node": ">=18"
}
},
"node_modules/youch-terminal": {
diff --git a/package.json b/package.json
index 989a29e..7ae829f 100644
--- a/package.json
+++ b/package.json
@@ -77,7 +77,7 @@
"dependencies": {
"@adonisjs/auth": "^9.2.4",
"@adonisjs/bodyparser": "^10.0.1",
- "@adonisjs/core": "^6.17.0",
+ "@adonisjs/core": "6.17.2",
"@adonisjs/cors": "^2.2.1",
"@adonisjs/drive": "^3.2.0",
"@adonisjs/inertia": "^2.1.3",
@@ -97,7 +97,6 @@
"@phc/format": "^1.0.0",
"@poppinss/manager": "^5.0.2",
"@vinejs/vine": "^3.0.0",
- "argon2": "^0.43.0",
"axios": "^1.7.9",
"bcrypt": "^5.1.1",
"bcryptjs": "^2.4.3",
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 e4aad4c..568dd3e 100644
--- a/providers/vinejs_provider.ts
+++ b/providers/vinejs_provider.ts
@@ -6,17 +6,16 @@
import type { ApplicationService } from '@adonisjs/core/types';
import vine, { symbols, BaseLiteralType, Vine } from '@vinejs/vine';
import type { FieldContext, FieldOptions } from '@vinejs/vine/types';
-// import type { MultipartFile, FileValidationOptions } from '@adonisjs/bodyparser/types';
import type { MultipartFile } from '@adonisjs/core/bodyparser';
import type { FileValidationOptions } from '@adonisjs/core/types/bodyparser';
import { Request, RequestValidator } from '@adonisjs/core/http';
import MimeType from '#models/mime_type';
-
/**
* Validation options accepted by the "file" rule
*/
export type FileRuleValidationOptions = Partial | ((field: FieldContext) => Partial);
+
/**
* Extend VineJS
*/
@@ -25,6 +24,7 @@ declare module '@vinejs/vine' {
myfile(options?: FileRuleValidationOptions): VineMultipartFile;
}
}
+
/**
* Extend HTTP request class
*/
@@ -36,19 +36,54 @@ declare module '@adonisjs/core/http' {
* 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,30 +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 !== undefined) {
- validatedFile.allowedExtensions = validationOptions.extnames; // await getEnabledExtensions();
- } else if (validatedFile.allowedExtensions === undefined && validationOptions.extnames === undefined) {
- 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
*/
@@ -107,36 +142,37 @@ const isMultipartFile = vine.createRule(async (file: MultipartFile | unknown, op
const MULTIPART_FILE: typeof symbols.SUBTYPE = symbols.SUBTYPE;
export class VineMultipartFile extends BaseLiteralType {
-
[MULTIPART_FILE]: string;
- // constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions) {
- // super(options, [isMultipartFile(validationOptions || {})]);
- // this.validationOptions = validationOptions;
- // this.#private = true;
- // }
-
- // clone(): this {
- // return new VineMultipartFile(this.validationOptions, this.cloneOptions()) as this;
- // }
- // #private;
- // constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions, validations?: Validation[]);
- // clone(): this;
-
- public validationOptions;
+ 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[]) {
public constructor(validationOptions?: FileRuleValidationOptions, options?: FieldOptions) {
- // super(options, validations);
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 {
@@ -155,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);
});
@@ -175,6 +206,41 @@ export default class VinejsProvider {
}
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);
+ }
}
/**
@@ -190,5 +256,7 @@ export default class VinejsProvider {
/**
* Preparing to shutdown the app
*/
- async shutdown() {}
+ async shutdown() {
+ clearExtensionsCache();
+ }
}
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/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/js/Components/BaseButton.vue b/resources/js/Components/BaseButton.vue
index 74c0b5d..1462566 100644
--- a/resources/js/Components/BaseButton.vue
+++ b/resources/js/Components/BaseButton.vue
@@ -1,5 +1,5 @@
-
{{ label }}
diff --git a/resources/js/Components/CardBox.vue b/resources/js/Components/CardBox.vue
index c2d200e..dbdee01 100644
--- a/resources/js/Components/CardBox.vue
+++ b/resources/js/Components/CardBox.vue
@@ -67,7 +67,7 @@ const submit = (e) => {
{{ title }}
-