diff --git a/adonisrc.ts b/adonisrc.ts
index 97e4528..19e946c 100644
--- a/adonisrc.ts
+++ b/adonisrc.ts
@@ -35,6 +35,7 @@ export default defineConfig({
() => import('#start/rules/dependent_array_min_length'),
() => import('#start/rules/referenceValidation'),
() => import('#start/rules/valid_mimetype'),
+ () => import('#start/rules/array_contains_types'),
],
/*
|--------------------------------------------------------------------------
diff --git a/app/Controllers/Http/Admin/AdminuserController.ts b/app/Controllers/Http/Admin/AdminuserController.ts
index ce99724..2962cbd 100644
--- a/app/Controllers/Http/Admin/AdminuserController.ts
+++ b/app/Controllers/Http/Admin/AdminuserController.ts
@@ -85,7 +85,9 @@ export default class AdminuserController {
// return response.badRequest(error.messages);
throw error;
}
- const input = request.only(['login', 'email', 'password', 'first_name', 'last_name']);
+
+ const input: Record = request.only(['login', 'email','first_name', 'last_name']);
+ input.password = request.input('new_password');
const user = await User.create(input);
if (request.input('roles')) {
const roles: Array = request.input('roles');
@@ -95,7 +97,6 @@ export default class AdminuserController {
session.flash('message', 'User has been created successfully');
return response.redirect().toRoute('settings.user.index');
}
-
public async show({ request, inertia }: HttpContext) {
const id = request.param('id');
const user = await User.query().where('id', id).firstOrFail();
@@ -139,9 +140,11 @@ export default class AdminuserController {
});
// password is optional
- let input;
- if (request.input('password')) {
- input = request.only(['login', 'email', 'password', 'first_name', 'last_name']);
+ let input: Record;
+
+ if (request.input('new_password')) {
+ input = request.only(['login', 'email', 'first_name', 'last_name']);
+ input.password = request.input('new_password');
} else {
input = request.only(['login', 'email', 'first_name', 'last_name']);
}
@@ -156,7 +159,6 @@ export default class AdminuserController {
session.flash('message', 'User has been updated successfully');
return response.redirect().toRoute('settings.user.index');
}
-
public async destroy({ request, response, session }: HttpContext) {
const id = request.param('id');
const user = await User.findOrFail(id);
diff --git a/app/Controllers/Http/Admin/MimetypeController.ts b/app/Controllers/Http/Admin/MimetypeController.ts
index 1d9d2a7..561c0ad 100644
--- a/app/Controllers/Http/Admin/MimetypeController.ts
+++ b/app/Controllers/Http/Admin/MimetypeController.ts
@@ -64,7 +64,7 @@ export default class MimetypeController {
'maxLength': '{{ field }} must be less then {{ max }} characters long',
'isUnique': '{{ field }} must be unique, and this value is already taken',
'required': '{{ field }} is required',
- 'file_extension.minLength': 'at least {{ min }} mimetypes must be defined',
+ 'file_extension.array.minLength': 'at least {{ min }} mimetypes must be defined',
'file_extension.*.string': 'Each file extension must be a valid string', // Adjusted to match the type
};
diff --git a/app/Controllers/Http/Api/AuthorsController.ts b/app/Controllers/Http/Api/AuthorsController.ts
index bc964a9..7209699 100644
--- a/app/Controllers/Http/Api/AuthorsController.ts
+++ b/app/Controllers/Http/Api/AuthorsController.ts
@@ -9,6 +9,7 @@ export default class AuthorsController {
// where exists (select * from gba.documents inner join gba.link_documents_persons on "documents"."id" = "link_documents_persons"."document_id"
// where ("link_documents_persons"."role" = 'author') and ("persons"."id" = "link_documents_persons"."person_id"));
const authors = await Person.query()
+ .preload('datasets')
.where('name_type', 'Personal')
.whereHas('datasets', (dQuery) => {
dQuery.wherePivot('role', 'author');
@@ -27,7 +28,10 @@ export default class AuthorsController {
if (request.input('filter')) {
// users = users.whereRaw('name like %?%', [request.input('search')])
const searchTerm = request.input('filter');
- authors.whereILike('first_name', `%${searchTerm}%`).orWhereILike('last_name', `%${searchTerm}%`);
+ authors.andWhere((query) => {
+ query.whereILike('first_name', `%${searchTerm}%`)
+ .orWhereILike('last_name', `%${searchTerm}%`);
+ });
// .orWhere('email', 'like', `%${searchTerm}%`);
}
diff --git a/app/Controllers/Http/Api/HomeController.ts b/app/Controllers/Http/Api/HomeController.ts
index 020f651..fdec7f9 100644
--- a/app/Controllers/Http/Api/HomeController.ts
+++ b/app/Controllers/Http/Api/HomeController.ts
@@ -17,7 +17,8 @@ export default class HomeController {
// .preload('authors')
// .orderBy('server_date_published');
- const datasets = await db.from('documents as doc')
+ const datasets = await db
+ .from('documents as doc')
.select(['publish_id', 'server_date_published', db.raw(`date_part('year', server_date_published) as pub_year`)])
.where('server_state', serverState)
.innerJoin('link_documents_persons as ba', 'doc.id', 'ba.document_id')
@@ -59,7 +60,6 @@ export default class HomeController {
// const year = params.year;
// const from = parseInt(year);
try {
-
// const datasets = await Database.from('documents as doc')
// .select([Database.raw(`date_part('month', server_date_published) as pub_month`), Database.raw('COUNT(*) as count')])
// .where('server_state', serverState)
@@ -68,9 +68,12 @@ export default class HomeController {
// .groupBy('pub_month');
// // .orderBy('server_date_published');
- const years = [2021, 2022, 2023]; // Add the second year
+ // Calculate the last 4 years including the current year
+ const currentYear = new Date().getFullYear();
+ const years = Array.from({ length: 4 }, (_, i) => currentYear - (i + 1)).reverse();
- const result = await db.from('documents as doc')
+ const result = await db
+ .from('documents as doc')
.select([
db.raw(`date_part('year', server_date_published) as pub_year`),
db.raw(`date_part('month', server_date_published) as pub_month`),
@@ -83,7 +86,7 @@ export default class HomeController {
.groupBy('pub_year', 'pub_month')
.orderBy('pub_year', 'asc')
.orderBy('pub_month', 'asc');
-
+
const labels = Array.from({ length: 12 }, (_, i) => i + 1); // Assuming 12 months
const inputDatasets: Map = result.reduce((acc, item) => {
@@ -100,15 +103,15 @@ export default class HomeController {
acc[pub_year].data[pub_month - 1] = parseInt(count);
- return acc ;
+ return acc;
}, {});
const outputDatasets = Object.entries(inputDatasets).map(([year, data]) => ({
data: data.data,
label: year,
borderColor: data.borderColor,
- fill: data.fill
- }));
+ fill: data.fill,
+ }));
const data = {
labels: labels,
@@ -126,11 +129,11 @@ export default class HomeController {
private getRandomHexColor() {
const letters = '0123456789ABCDEF';
let color = '#';
-
+
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
-
+
return color;
}
}
@@ -139,5 +142,4 @@ interface ChartDataset {
label: string;
borderColor: string;
fill: boolean;
-
}
diff --git a/app/Controllers/Http/Auth/AuthController.ts b/app/Controllers/Http/Auth/AuthController.ts
index 71256f2..08b1c05 100644
--- a/app/Controllers/Http/Auth/AuthController.ts
+++ b/app/Controllers/Http/Auth/AuthController.ts
@@ -5,7 +5,7 @@ import BackupCode from '#models/backup_code';
// import InvalidCredentialException from 'App/Exceptions/InvalidCredentialException';
import { authValidator } from '#validators/auth';
import hash from '@adonisjs/core/services/hash';
-
+import db from '@adonisjs/lucid/services/db';
import TwoFactorAuthProvider from '#app/services/TwoFactorAuthProvider';
// import { Authenticator } from '@adonisjs/auth';
// import { LoginState } from 'Contracts/enums';
@@ -29,6 +29,10 @@ export default class AuthController {
const { email, password } = request.only(['email', 'password']);
try {
+
+ await db.connection().rawQuery('SELECT 1')
+
+
// // attempt to verify credential and login user
// await auth.use('web').attempt(email, plainPassword);
@@ -51,6 +55,9 @@ export default class AuthController {
await auth.use('web').login(user);
} catch (error) {
+ if (error.code === 'ECONNREFUSED') {
+ throw error
+ }
// if login fails, return vague form message and redirect back
session.flash('message', 'Your username, email, or password is incorrect');
return response.redirect().back();
diff --git a/app/Controllers/Http/Editor/DatasetController.ts b/app/Controllers/Http/Editor/DatasetController.ts
index acaf505..5ec3910 100644
--- a/app/Controllers/Http/Editor/DatasetController.ts
+++ b/app/Controllers/Http/Editor/DatasetController.ts
@@ -18,9 +18,33 @@ import { HttpException } from 'node-exceptions';
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
import vine, { SimpleMessagesProvider } from '@vinejs/vine';
import mail from '@adonisjs/mail/services/main';
-// import { resolveMx } from 'dns/promises';
-// import * as net from 'net';
import { validate } from 'deep-email-validator';
+import {
+ TitleTypes,
+ DescriptionTypes,
+ ContributorTypes,
+ PersonNameTypes,
+ ReferenceIdentifierTypes,
+ RelationTypes,
+ SubjectTypes,
+ DatasetTypes,
+} from '#contracts/enums';
+import { TransactionClientContract } from '@adonisjs/lucid/types/database';
+import db from '@adonisjs/lucid/services/db';
+import Project from '#models/project';
+import License from '#models/license';
+import Language from '#models/language';
+import File from '#models/file';
+import Coverage from '#models/coverage';
+import Title from '#models/title';
+import Description from '#models/description';
+import Subject from '#models/subject';
+import DatasetReference from '#models/dataset_reference';
+import Collection from '#models/collection';
+import CollectionRole from '#models/collection_role';
+import { updateEditorDatasetValidator } from '#validators/dataset';
+import { savePersons } from '#app/utils/utility-functions';
+
// Create a new instance of the client
const client = new Client({ node: 'http://localhost:9200' }); // replace with your OpenSearch endpoint
@@ -63,8 +87,15 @@ export default class DatasetsController {
}
datasets.orderBy(attribute, sortOrder);
} else {
- // users.orderBy('created_at', 'desc');
- datasets.orderBy('id', 'asc');
+ // datasets.orderBy('id', 'asc');
+ // Custom ordering to prioritize rejected_editor state
+ datasets.orderByRaw(`
+ CASE
+ WHEN server_state = 'rejected_reviewer' THEN 0
+ ELSE 1
+ END ASC,
+ id ASC
+ `);
}
// const users = await User.query().orderBy('login').paginate(page, limit);
@@ -217,6 +248,10 @@ export default class DatasetsController {
if (dataset.reject_reviewer_note != null) {
dataset.reject_reviewer_note = null;
}
+ if (dataset.reject_editor_note != null) {
+ dataset.reject_editor_note = null;
+ }
+
//save main and additional titles
const reviewer_id = request.input('reviewer_id', null);
@@ -255,70 +290,7 @@ export default class DatasetsController {
});
}
- // private async checkEmailDomain(email: string): Promise {
- // const domain = email.split('@')[1];
- // try {
- // // Step 1: Check MX records for the domain
- // const mxRecords = await resolveMx(domain);
- // if (mxRecords.length === 0) {
- // return false; // No MX records, can't send email
- // }
-
- // // Sort MX records by priority
- // mxRecords.sort((a, b) => a.priority - b.priority);
-
- // // Step 2: Attempt SMTP connection to the first available mail server
- // const smtpServer = mxRecords[0].exchange;
-
- // return await this.checkMailboxExists(smtpServer, email);
- // } catch (error) {
- // console.error('Error during MX lookup or SMTP validation:', error);
- // return false;
- // }
- // }
-
- //// Helper function to check if the mailbox exists using SMTP
- // private async checkMailboxExists(smtpServer: string, email: string): Promise {
- // return new Promise((resolve, reject) => {
- // const socket = net.createConnection(25, smtpServer);
-
- // socket.on('connect', () => {
- // socket.write(`HELO ${smtpServer}\r\n`);
- // socket.write(`MAIL FROM: \r\n`);
- // socket.write(`RCPT TO: <${email}>\r\n`);
- // });
-
- // socket.on('data', (data) => {
- // const response = data.toString();
- // if (response.includes('250')) {
- // // 250 is an SMTP success code
- // socket.end();
- // resolve(true); // Email exists
- // } else if (response.includes('550')) {
- // // 550 means the mailbox doesn't exist
- // socket.end();
- // resolve(false); // Email doesn't exist
- // }
- // });
-
- // socket.on('error', (error) => {
- // console.error('SMTP connection error:', error);
- // socket.end();
- // resolve(false);
- // });
-
- // socket.on('end', () => {
- // // SMTP connection closed
- // });
-
- // socket.setTimeout(5000, () => {
- // // Timeout after 5 seconds
- // socket.end();
- // resolve(false); // Assume email doesn't exist if no response
- // });
- // });
- // }
public async rejectUpdate({ request, response, auth }: HttpContext) {
const authUser = auth.user!;
@@ -353,7 +325,7 @@ export default class DatasetsController {
return response
.flash(
`Invalid server state. Dataset with id ${id} cannot be rejected. Datset has server state ${dataset.server_state}.`,
- 'warning'
+ 'warning',
)
.redirect()
.toRoute('editor.dataset.list');
@@ -388,7 +360,9 @@ export default class DatasetsController {
emailStatusMessage = ` A rejection email was successfully sent to ${dataset.user.email}.`;
} catch (error) {
logger.error(error);
- return response.flash('Dataset has not been rejected due to an email error: ' + error.message, 'error').toRoute('editor.dataset.list');
+ return response
+ .flash('Dataset has not been rejected due to an email error: ' + error.message, 'error')
+ .toRoute('editor.dataset.list');
}
} else {
emailStatusMessage = ` However, the email could not be sent because the submitter's email address (${dataset.user.email}) is not valid.`;
@@ -404,7 +378,7 @@ export default class DatasetsController {
.toRoute('editor.dataset.list');
}
- public async publish({ request, inertia, response }: HttpContext) {
+ public async publish({ request, inertia, response, auth }: HttpContext) {
const id = request.param('id');
const dataset = await Dataset.query()
@@ -428,8 +402,14 @@ export default class DatasetsController {
.back();
}
+
+
return inertia.render('Editor/Dataset/Publish', {
dataset,
+ can: {
+ reject: await auth.user?.can(['dataset-editor-reject']),
+ publish: await auth.user?.can(['dataset-publish']),
+ },
});
}
@@ -471,6 +451,119 @@ export default class DatasetsController {
}
}
+ public async rejectToReviewer({ request, inertia, response }: HttpContext) {
+ const id = request.param('id');
+ const dataset = await Dataset.query()
+ .where('id', id)
+ .preload('reviewer', (builder) => {
+ builder.select('id', 'login', 'email');
+ })
+ .firstOrFail();
+
+ const validStates = ['reviewed'];
+ if (!validStates.includes(dataset.server_state)) {
+ // session.flash('errors', 'Invalid server state!');
+ return response
+ .flash(
+ 'warning',
+ `Invalid server state. Dataset with id ${id} cannot be rejected to the reviewer. Datset has server state ${dataset.server_state}.`,
+ )
+ .redirect()
+ .toRoute('editor.dataset.list');
+ }
+
+ return inertia.render('Editor/Dataset/RejectToReviewer', {
+ dataset,
+ });
+ }
+
+ public async rejectToReviewerUpdate({ request, response, auth }: HttpContext) {
+ const authUser = auth.user!;
+
+ const id = request.param('id');
+ const dataset = await Dataset.query()
+ .where('id', id)
+ .preload('reviewer', (builder) => {
+ builder.select('id', 'login', 'email');
+ })
+ .firstOrFail();
+
+ const newSchema = vine.object({
+ server_state: vine.string().trim(),
+ reject_editor_note: vine.string().trim().minLength(10).maxLength(500),
+ send_mail: vine.boolean().optional(),
+ });
+
+ try {
+ // await request.validate({ schema: newSchema });
+ const validator = vine.compile(newSchema);
+ await request.validateUsing(validator);
+ } catch (error) {
+ // return response.badRequest(error.messages);
+ throw error;
+ }
+
+ const validStates = ['reviewed'];
+ if (!validStates.includes(dataset.server_state)) {
+ // throw new Error('Invalid server state!');
+ // return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back();
+ return response
+ .flash(
+ `Invalid server state. Dataset with id ${id} cannot be rejected to reviewer. Datset has server state ${dataset.server_state}.`,
+ 'warning',
+ )
+ .redirect()
+ .toRoute('editor.dataset.list');
+ }
+
+ dataset.server_state = 'rejected_to_reviewer';
+ const rejectEditorNote = request.input('reject_editor_note', '');
+ dataset.reject_editor_note = rejectEditorNote;
+
+ // add logic for sending reject message
+ const sendMail = request.input('send_email', false);
+ // const validRecipientEmail = await this.checkEmailDomain('arno.kaimbacher@outlook.at');
+ const validationResult = await validate({
+ email: dataset.reviewer.email,
+ validateSMTP: false,
+ });
+ const validRecipientEmail: boolean = validationResult.valid;
+
+ await dataset.save();
+
+ let emailStatusMessage = '';
+ if (sendMail == true) {
+ if (dataset.reviewer.email && validRecipientEmail) {
+ try {
+ await mail.send((message) => {
+ message.to(dataset.reviewer.email).subject('Dataset Rejection Notification').html(`
+ Dear ${dataset.reviewer.login},
+ Your dataset with ID ${dataset.id} has been rejected.
+ Reason for rejection: ${rejectEditorNote}
+ Best regards, Your Tethys editor: ${authUser.login}
+ `);
+ });
+ emailStatusMessage = ` A rejection email was successfully sent to ${dataset.reviewer.email}.`;
+ } catch (error) {
+ logger.error(error);
+ return response
+ .flash('Dataset has not been rejected due to an email error: ' + error.message, 'error')
+ .toRoute('editor.dataset.list');
+ }
+ } else {
+ emailStatusMessage = ` However, the email could not be sent because the submitter's email address (${dataset.reviewer.email}) is not valid.`;
+ }
+ }
+
+
+ return response
+ .flash(
+ `You have successfully rejected dataset ${dataset.id} reviewed by ${dataset.reviewer.login}.${emailStatusMessage}`,
+ 'message',
+ )
+ .toRoute('editor.dataset.list');
+ }
+
public async doiCreate({ request, inertia }: HttpContext) {
const id = request.param('id');
const dataset = await Dataset.query()
@@ -536,10 +629,376 @@ export default class DatasetsController {
public async show({}: HttpContext) {}
- public async edit({}: HttpContext) {}
+ public async edit({ request, inertia, response }: HttpContext) {
+ const id = request.param('id');
+ const datasetQuery = Dataset.query().where('id', id);
+ datasetQuery
+ .preload('titles', (query) => query.orderBy('id', 'asc'))
+ .preload('descriptions', (query) => query.orderBy('id', 'asc'))
+ .preload('coverage')
+ .preload('licenses')
+ .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc'))
+ .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc'))
+ // .preload('subjects')
+ .preload('subjects', (builder) => {
+ builder.orderBy('id', 'asc').withCount('datasets');
+ })
+ .preload('references')
+ .preload('files', (query) => {
+ query.orderBy('sort_order', 'asc'); // Sort by sort_order column
+ });
+
+ const dataset = await datasetQuery.firstOrFail();
+ const validStates = ['editor_accepted', 'rejected_reviewer'];
+ if (!validStates.includes(dataset.server_state)) {
+ // session.flash('errors', 'Invalid server state!');
+ return response
+ .flash(
+ `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`,
+ 'warning',
+ )
+ .toRoute('editor.dataset.list');
+ }
+
+ const titleTypes = Object.entries(TitleTypes)
+ .filter(([value]) => value !== 'Main')
+ .map(([key, value]) => ({ value: key, label: value }));
+
+ const descriptionTypes = Object.entries(DescriptionTypes)
+ .filter(([value]) => value !== 'Abstract')
+ .map(([key, value]) => ({ value: key, label: value }));
+
+ const languages = await Language.query().where('active', true).pluck('part1', 'part1');
+
+ // const contributorTypes = Config.get('enums.contributor_types');
+ const contributorTypes = Object.entries(ContributorTypes).map(([key, value]) => ({ value: key, label: value }));
+
+ // const nameTypes = Config.get('enums.name_types');
+ const nameTypes = Object.entries(PersonNameTypes).map(([key, value]) => ({ value: key, label: value }));
+
+ // const messages = await Database.table('messages')
+ // .pluck('help_text', 'metadata_element');
+
+ const projects = await Project.query().pluck('label', 'id');
+
+ const currentDate = new Date();
+ const currentYear = currentDate.getFullYear();
+ const years = Array.from({ length: currentYear - 1990 + 1 }, (_, index) => 1990 + index);
+
+ const licenses = await License.query().select('id', 'name_long').where('active', 'true').pluck('name_long', 'id');
+ // const userHasRoles = user.roles;
+ // const datasetHasLicenses = await dataset.related('licenses').query().pluck('id');
+ // const checkeds = dataset.licenses.first().id;
+
+ // const doctypes = {
+ // analysisdata: { label: 'Analysis', value: 'analysisdata' },
+ // measurementdata: { label: 'Measurements', value: 'measurementdata' },
+ // monitoring: 'Monitoring',
+ // remotesensing: 'Remote Sensing',
+ // gis: 'GIS',
+ // models: 'Models',
+ // mixedtype: 'Mixed Type',
+ // };
+
+ return inertia.render('Editor/Dataset/Edit', {
+ dataset,
+ titletypes: titleTypes,
+ descriptiontypes: descriptionTypes,
+ contributorTypes,
+ nameTypes,
+ languages,
+ // messages,
+ projects,
+ licenses,
+ // datasetHasLicenses: Object.keys(datasetHasLicenses).map((key) => datasetHasLicenses[key]), //convert object to array with license ids
+ // checkeds,
+ years,
+ // languages,
+ subjectTypes: SubjectTypes,
+ referenceIdentifierTypes: Object.entries(ReferenceIdentifierTypes).map(([key, value]) => ({ value: key, label: value })),
+ relationTypes: Object.entries(RelationTypes).map(([key, value]) => ({ value: key, label: value })),
+ doctypes: DatasetTypes,
+ });
+ }
+
+ public async update({ request, response, session }: 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);
+ await dataset.load('files');
+
+ let trx: TransactionClientContract | null = null;
+ try {
+ await request.validateUsing(updateEditorDatasetValidator);
+ trx = await db.transaction();
+ // const user = (await User.find(auth.user?.id)) as User;
+ // await this.createDatasetAndAssociations(user, request, trx);
+ const dataset = await Dataset.findOrFail(datasetId);
+
+ // save the licenses
+ const licenses: number[] = request.input('licenses', []);
+ // await dataset.useTransaction(trx).related('licenses').sync(licenses);
+ await dataset.useTransaction(trx).related('licenses').sync(licenses);
+
+ // save authors and contributors
+ await dataset.useTransaction(trx).related('authors').sync([]);
+ await dataset.useTransaction(trx).related('contributors').sync([]);
+ await savePersons(dataset, request.input('authors', []), 'author', trx);
+ await savePersons(dataset, request.input('contributors', []), 'contributor', trx);
+
+ //save the titles:
+ const titles = request.input('titles', []);
+ // const savedTitles:Array = [];
+ for (const titleData of titles) {
+ if (titleData.id) {
+ const title = await Title.findOrFail(titleData.id);
+ title.value = titleData.value;
+ title.language = titleData.language;
+ title.type = titleData.type;
+ if (title.$isDirty) {
+ await title.useTransaction(trx).save();
+ // await dataset.useTransaction(trx).related('titles').save(title);
+ // savedTitles.push(title);
+ }
+ } else {
+ const title = new Title();
+ title.fill(titleData);
+ // savedTitles.push(title);
+ await dataset.useTransaction(trx).related('titles').save(title);
+ }
+ }
+
+ // save the abstracts
+ const descriptions = request.input('descriptions', []);
+ // const savedTitles:Array = [];
+ for (const descriptionData of descriptions) {
+ if (descriptionData.id) {
+ const description = await Description.findOrFail(descriptionData.id);
+ description.value = descriptionData.value;
+ description.language = descriptionData.language;
+ description.type = descriptionData.type;
+ if (description.$isDirty) {
+ await description.useTransaction(trx).save();
+ // await dataset.useTransaction(trx).related('titles').save(title);
+ // savedTitles.push(title);
+ }
+ } else {
+ const description = new Description();
+ description.fill(descriptionData);
+ // savedTitles.push(title);
+ await dataset.useTransaction(trx).related('descriptions').save(description);
+ }
+ }
+
+ // Process all subjects/keywords from the request
+ const subjects = request.input('subjects');
+ for (const subjectData of subjects) {
+ // Case 1: Subject already exists in the database (has an ID)
+ if (subjectData.id) {
+ // Retrieve the existing subject
+ const existingSubject = await Subject.findOrFail(subjectData.id);
+
+ // Update subject properties from the request data
+ existingSubject.value = subjectData.value;
+ existingSubject.type = subjectData.type;
+ existingSubject.external_key = subjectData.external_key;
+
+ // Only save if there are actual changes
+ if (existingSubject.$isDirty) {
+ await existingSubject.save();
+ }
+
+ // Note: The relationship between dataset and subject is already established,
+ // so we don't need to attach it again
+ }
+ // Case 2: New subject being added (no ID)
+ else {
+ // Check if a subject with the same value and type already exists in the database
+ const subject = await Subject.firstOrNew({ value: subjectData.value, type: subjectData.type }, subjectData);
+
+ if (subject.$isNew === true) {
+ // If it's a completely new subject, create and associate it with the dataset
+ await dataset.useTransaction(trx).related('subjects').save(subject);
+ } else {
+ // If the subject already exists, just create the relationship
+ await dataset.useTransaction(trx).related('subjects').attach([subject.id]);
+ }
+ }
+ }
+
+ const subjectsToDelete = request.input('subjectsToDelete', []);
+ for (const subjectData of subjectsToDelete) {
+ if (subjectData.id) {
+ // const subject = await Subject.findOrFail(subjectData.id);
+ const subject = await Subject.query()
+ .where('id', subjectData.id)
+ .preload('datasets', (builder) => {
+ builder.orderBy('id', 'asc');
+ })
+ .withCount('datasets')
+ .firstOrFail();
+
+ // Check if the subject is used by multiple datasets
+ if (subject.$extras.datasets_count > 1) {
+ // If used by multiple datasets, just detach it from the current dataset
+ await dataset.useTransaction(trx).related('subjects').detach([subject.id]);
+ } else {
+ // If only used by this dataset, delete the subject completely
+
+ await dataset.useTransaction(trx).related('subjects').detach([subject.id]);
+ await subject.useTransaction(trx).delete();
+ }
+ }
+ }
+
+ // Process references
+ const references = request.input('references', []);
+ // First, get existing references to determine which ones to update vs. create
+ const existingReferences = await dataset.related('references').query();
+ const existingReferencesMap: Map = new Map(existingReferences.map((ref) => [ref.id, ref]));
+
+ for (const referenceData of references) {
+ if (existingReferencesMap.has(referenceData.id) && referenceData.id) {
+ // Update existing reference
+ const reference = existingReferencesMap.get(referenceData.id);
+ if (reference) {
+ reference.merge(referenceData);
+ if (reference.$isDirty) {
+ await reference.useTransaction(trx).save();
+ }
+ }
+ } else {
+ // Create new reference
+ const dataReference = new DatasetReference();
+ dataReference.fill(referenceData);
+ await dataset.useTransaction(trx).related('references').save(dataReference);
+ }
+ }
+
+ // Handle references to delete if provided
+ const referencesToDelete = request.input('referencesToDelete', []);
+ for (const referenceData of referencesToDelete) {
+ if (referenceData.id) {
+ const reference = await DatasetReference.findOrFail(referenceData.id);
+ await reference.useTransaction(trx).delete();
+ }
+ }
+
+ // save coverage
+ const coverageData = request.input('coverage');
+ if (coverageData) {
+ if (coverageData.id) {
+ const coverage = await Coverage.findOrFail(coverageData.id);
+ coverage.merge(coverageData);
+ if (coverage.$isDirty) {
+ await coverage.useTransaction(trx).save();
+ }
+ }
+ }
+
+ const input = request.only(['project_id', 'embargo_date', 'language', 'type', 'creating_corporation']);
+ // dataset.type = request.input('type');
+ dataset.merge(input);
+ // let test: boolean = dataset.$isDirty;
+ await dataset.useTransaction(trx).save();
+
+ await trx.commit();
+ // console.log('Dataset has been updated successfully');
+
+ session.flash('message', 'Dataset has been updated successfully');
+ // return response.redirect().toRoute('user.index');
+ return response.redirect().toRoute('editor.dataset.edit', [dataset.id]);
+ } catch (error) {
+ if (trx !== null) {
+ await trx.rollback();
+ }
+ console.error('Failed to update dataset and related models:', error);
+ // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` });
+ throw error;
+ }
+ }
+
+ public async categorize({ inertia, request, response }: HttpContext) {
+ const id = request.param('id');
+ // Preload dataset and its "collections" relation
+ const dataset = await Dataset.query().where('id', id).preload('collections').firstOrFail();
+ const validStates = ['editor_accepted', 'rejected_reviewer'];
+ if (!validStates.includes(dataset.server_state)) {
+ // session.flash('errors', 'Invalid server state!');
+ return response
+ .flash(
+ 'warning',
+ `Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`,
+ )
+ .redirect()
+ .toRoute('editor.dataset.list');
+ }
+
+ const collectionRoles = await CollectionRole.query()
+ .whereIn('name', ['ddc', 'ccs'])
+ .preload('collections', (coll: Collection) => {
+ // preloa only top level collection with noparent_id
+ coll.whereNull('parent_id').orderBy('number', 'asc');
+ })
+ .exec();
+
+ return inertia.render('Editor/Dataset/Category', {
+ collectionRoles: collectionRoles,
+ dataset: dataset,
+ relatedCollections: dataset.collections,
+ });
+ }
+
+ public async categorizeUpdate({ request, response, session }: HttpContext) {
+ // Get the dataset id from the route parameter
+ const id = request.param('id');
+ const dataset = await Dataset.query().preload('files').where('id', id).firstOrFail();
+
+ const validStates = ['editor_accepted', 'rejected_reviewer'];
+ if (!validStates.includes(dataset.server_state)) {
+ return response
+ .flash(
+ 'warning',
+ `Invalid server state. Dataset with id ${id} cannot be categorized. Dataset has server state ${dataset.server_state}.`,
+ )
+ .redirect()
+ .toRoute('editor.dataset.list');
+ }
+
+ let trx: TransactionClientContract | null = null;
+ try {
+ trx = await db.transaction();
+ // const user = (await User.find(auth.user?.id)) as User;
+ // await this.createDatasetAndAssociations(user, request, trx);
+
+ // Retrieve the selected collections from the request.
+ // This should be an array of collection ids.
+ const collections: number[] = request.input('collections', []);
+
+ // Synchronize the dataset collections using the transaction.
+ await dataset.useTransaction(trx).related('collections').sync(collections);
+
+ // Commit the transaction.await trx.commit()
+ await trx.commit();
+
+ // Redirect with a success flash message.
+ // return response.flash('success', 'Dataset collections updated successfully!').redirect().toRoute('dataset.list');
+
+ session.flash('message', 'Dataset collections updated successfully!');
+ return response.redirect().toRoute('editor.dataset.list');
+ } catch (error) {
+ if (trx !== null) {
+ await trx.rollback();
+ }
+ console.error('Failed tocatgorize dataset collections:', error);
+ // throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` });
+ throw error;
+ }
+ }
// public async update({}: HttpContextContract) {}
- public async update({ response }: HttpContext) {
+ public async updateOpensearch({ response }: HttpContext) {
const id = 273; //request.param('id');
const dataset = await Dataset.query().preload('xmlCache').where('id', id).firstOrFail();
// add xml elements
@@ -655,6 +1114,19 @@ export default class DatasetsController {
}
}
+ public async download({ params, response }: HttpContext) {
+ const id = params.id;
+ // Find the file by ID
+ const file = await File.findOrFail(id);
+ // const filePath = await drive.use('local').getUrl('/'+ file.filePath)
+ const filePath = file.filePath;
+ const fileExt = file.filePath.split('.').pop() || '';
+ // 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 destroy({}: HttpContext) {}
private async createXmlRecord(dataset: Dataset, datasetNode: XMLBuilder) {
diff --git a/app/Controllers/Http/Reviewer/DatasetController.ts b/app/Controllers/Http/Reviewer/DatasetController.ts
index 76ad4d8..6b54772 100644
--- a/app/Controllers/Http/Reviewer/DatasetController.ts
+++ b/app/Controllers/Http/Reviewer/DatasetController.ts
@@ -9,6 +9,7 @@ import vine from '@vinejs/vine';
import mail from '@adonisjs/mail/services/main';
import logger from '@adonisjs/core/services/logger';
import { validate } from 'deep-email-validator';
+import File from '#models/file';
interface Dictionary {
[index: string]: string;
@@ -38,13 +39,21 @@ export default class DatasetsController {
}
datasets.orderBy(attribute, sortOrder);
} else {
- // users.orderBy('created_at', 'desc');
- datasets.orderBy('id', 'asc');
+ // datasets.orderBy('id', 'asc');
+ // Custom ordering to prioritize rejected_editor state
+ datasets.orderByRaw(`
+ CASE
+ WHEN server_state = 'rejected_to_reviewer' THEN 0
+ ELSE 1
+ END ASC,
+ id ASC
+ `);
}
// const users = await User.query().orderBy('login').paginate(page, limit);
const myDatasets = await datasets
- .where('server_state', 'approved')
+ // .where('server_state', 'approved')
+ .whereIn('server_state', ['approved', 'rejected_to_reviewer'])
.where('reviewer_id', user.id)
.preload('titles')
@@ -62,7 +71,52 @@ export default class DatasetsController {
});
}
- public async review({ request, inertia, response }: HttpContext) {
+ public async review({ request, inertia, response, auth }: HttpContext) {
+ const id = request.param('id');
+ const datasetQuery = Dataset.query().where('id', id);
+
+ datasetQuery
+ .preload('titles', (query) => query.orderBy('id', 'asc'))
+ .preload('descriptions', (query) => query.orderBy('id', 'asc'))
+ .preload('coverage')
+ .preload('licenses')
+ .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc'))
+ .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc'))
+ // .preload('subjects')
+ .preload('subjects', (builder) => {
+ builder.orderBy('id', 'asc').withCount('datasets');
+ })
+ .preload('references')
+ .preload('project')
+ .preload('files', (query) => {
+ query.orderBy('sort_order', 'asc'); // Sort by sort_order column
+ });
+
+ const dataset = await datasetQuery.firstOrFail();
+
+ const validStates = ['approved', 'rejected_to_reviewer'];
+ if (!validStates.includes(dataset.server_state)) {
+ // session.flash('errors', 'Invalid server state!');
+ return response
+ .flash(
+ 'warning',
+ `Invalid server state. Dataset with id ${id} cannot be reviewed. Datset has server state ${dataset.server_state}.`,
+ )
+ .redirect()
+ .toRoute('reviewer.dataset.list');
+ }
+
+ return inertia.render('Reviewer/Dataset/Review', {
+ dataset,
+ can: {
+ review: await auth.user?.can(['dataset-review']),
+ reject: await auth.user?.can(['dataset-review-reject']),
+ },
+ });
+
+ }
+
+ public async review_old({ request, inertia, response, auth }: HttpContext) {
const id = request.param('id');
const dataset = await Dataset.query()
.where('id', id)
@@ -158,6 +212,10 @@ export default class DatasetsController {
return inertia.render('Reviewer/Dataset/Review', {
dataset,
fields: fields,
+ can: {
+ review: await auth.user?.can(['dataset-review']),
+ reject: await auth.user?.can(['dataset-review-reject']),
+ },
});
}
@@ -166,7 +224,7 @@ export default class DatasetsController {
// const { id } = params;
const dataset = await Dataset.findOrFail(id);
- const validStates = ['approved'];
+ const validStates = ['approved', 'rejected_to_reviewer'];
if (!validStates.includes(dataset.server_state)) {
// throw new Error('Invalid server state!');
// return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back();
@@ -180,6 +238,10 @@ export default class DatasetsController {
}
dataset.server_state = 'reviewed';
+ // if editor has rejected to reviewer:
+ if (dataset.reject_editor_note != null) {
+ dataset.reject_editor_note = null;
+ }
try {
// await dataset.related('editor').associate(user); // speichert schon ab
@@ -203,7 +265,7 @@ export default class DatasetsController {
})
.firstOrFail();
- const validStates = ['approved'];
+ const validStates = ['approved', 'rejected_to_reviewer'];
if (!validStates.includes(dataset.server_state)) {
// session.flash('errors', 'Invalid server state!');
return response
@@ -250,12 +312,12 @@ export default class DatasetsController {
throw error;
}
- const validStates = ['approved'];
+ const validStates = ['approved', 'rejected_to_reviewer'];
if (!validStates.includes(dataset.server_state)) {
// throw new Error('Invalid server state!');
// return response.flash('warning', 'Invalid server state. Dataset cannot be released to editor').redirect().back();
return response
- .flash(
+ .flash(
`Invalid server state. Dataset with id ${id} cannot be rejected. Datset has server state ${dataset.server_state}.`,
'warning',
)
@@ -307,4 +369,17 @@ export default class DatasetsController {
.toRoute('reviewer.dataset.list')
.flash(`You have rejected dataset ${dataset.id}! to editor ${dataset.editor.login}`, 'message');
}
+
+ public async download({ params, response }: HttpContext) {
+ const id = params.id;
+ // Find the file by ID
+ const file = await File.findOrFail(id);
+ // const filePath = await drive.use('local').getUrl('/'+ file.filePath)
+ const filePath = file.filePath;
+ const fileExt = file.filePath.split('.').pop() || '';
+ // Set the response headers and download the file
+ response.header('Content-Type', file.mime_type || 'application/octet-stream');
+ response.attachment(`${file.label}.${fileExt}`);
+ return response.download(filePath);
+ }
}
diff --git a/app/Controllers/Http/Submitter/DatasetController.ts b/app/Controllers/Http/Submitter/DatasetController.ts
index a1a6643..245b5d9 100644
--- a/app/Controllers/Http/Submitter/DatasetController.ts
+++ b/app/Controllers/Http/Submitter/DatasetController.ts
@@ -29,23 +29,30 @@ import {
} from '#contracts/enums';
import { ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
import DatasetReference from '#models/dataset_reference';
-import { cuid } from '@adonisjs/core/helpers';
import File from '#models/file';
import ClamScan from 'clamscan';
-// import { ValidationException } from '@adonisjs/validator';
-// import Drive from '@ioc:Adonis/Core/Drive';
-// import drive from '#services/drive';
import drive from '@adonisjs/drive/services/main';
import path from 'path';
import { Exception } from '@adonisjs/core/exceptions';
import { MultipartFile } from '@adonisjs/core/types/bodyparser';
import * as crypto from 'crypto';
+import { pipeline } from 'node:stream/promises';
+import { createWriteStream } from 'node:fs';
+import type { Multipart } from '@adonisjs/bodyparser';
+import * as fs from 'fs';
+import { parseBytesSize, getConfigFor, getTmpPath, formatBytes } from '#app/utils/utility-functions';
+
interface Dictionary {
[index: string]: string;
}
import vine, { SimpleMessagesProvider, errors } from '@vinejs/vine';
export default class DatasetController {
+ /**
+ * Bodyparser config
+ */
+ // config: BodyParserConfig = config.get('bodyparser');
+
public async index({ auth, request, inertia }: HttpContext) {
const user = (await User.find(auth.user?.id)) as User;
const page = request.input('page', 1);
@@ -69,8 +76,16 @@ export default class DatasetController {
}
datasets.orderBy(attribute, sortOrder);
} else {
- // users.orderBy('created_at', 'desc');
- datasets.orderBy('id', 'asc');
+ // datasets.orderBy('id', 'asc');
+ // Custom ordering to prioritize rejected_editor state
+ datasets.orderByRaw(`
+ CASE
+ WHEN server_state = 'rejected_editor' THEN 0
+ WHEN server_state = 'rejected_reviewer' THEN 1
+ ELSE 2
+ END ASC,
+ id ASC
+ `);
}
// const results = await Database
@@ -191,7 +206,8 @@ export default class DatasetController {
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(2)
+ .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }),
descriptions: vine
.array(
vine.object({
@@ -205,7 +221,8 @@ export default class DatasetController {
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(1),
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
authors: vine
.array(
vine.object({
@@ -280,7 +297,8 @@ export default class DatasetController {
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(2)
+ .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }),
descriptions: vine
.array(
vine.object({
@@ -294,7 +312,8 @@ export default class DatasetController {
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(1),
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
authors: vine
.array(
vine.object({
@@ -402,21 +421,99 @@ export default class DatasetController {
}
public async store({ auth, request, response, session }: HttpContext) {
- // node ace make:validator CreateDataset
+ // At the top of the store() method, declare an array to hold temporary file paths
+ const uploadedTmpFiles: string[] = [];
+ // Aggregated limit example (adjust as needed)
+ const multipartConfig = getConfigFor('multipart');
+ const aggregatedLimit = multipartConfig.limit ? parseBytesSize(multipartConfig.limit) : 100 * 1024 * 1024;
+ // const aggregatedLimit = 200 * 1024 * 1024;
+ let totalUploadedSize = 0;
+
+ // // Helper function to format bytes as human-readable text
+ // function formatBytes(bytes: number): string {
+ // if (bytes === 0) return '0 Bytes';
+ // const k = 1024;
+ // const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
+ // const i = Math.floor(Math.log(bytes) / Math.log(k));
+ // return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+ // }
+ // const enabledExtensions = await this.getEnabledExtensions();
+ const multipart: Multipart = request.multipart;
+
+ multipart.onFile('files', { deferValidations: true }, async (part) => {
+ // Attach an individual file size accumulator if needed
+ let fileUploadedSize = 0;
+
+ // Simply accumulate the size in on('data') without performing the expensive check per chunk
+ part.on('data', (chunk) => {
+ // reporter(chunk);
+ // Increase counters using the chunk length
+ fileUploadedSize += chunk.length;
+ });
+
+ // After the file is completely read, update the global counter and check aggregated limit
+ part.on('end', () => {
+ totalUploadedSize += fileUploadedSize;
+ part.file.size = fileUploadedSize;
+ // Record the temporary file path
+ if (part.file.tmpPath) {
+ uploadedTmpFiles.push(part.file.tmpPath);
+ }
+
+ if (totalUploadedSize > aggregatedLimit) {
+ // Clean up all temporary files if aggregate limit is exceeded
+ uploadedTmpFiles.forEach((tmpPath) => {
+ try {
+ fs.unlinkSync(tmpPath);
+ } catch (cleanupError) {
+ console.error('Error cleaning up temporary file:', cleanupError);
+ }
+ });
+ const error = new errors.E_VALIDATION_ERROR({
+ 'upload error': `Aggregated upload limit of ${formatBytes(aggregatedLimit)} exceeded. The total size of files being uploaded would exceed the limit.`,
+ });
+ request.multipart.abort(error);
+ }
+ });
+
+ part.on('error', (error) => {
+ // fileUploadError = error;
+ request.multipart.abort(error);
+ });
+
+ // await pipeline(part, createWriteStream(filePath));
+ // return { filePath };
+ // Process file with error handling
+ try {
+ // Extract extension from the client file name, e.g. "Tethys 5 - Ampflwang_dataset.zip"
+ const ext = path.extname(part.file.clientName).replace('.', '');
+ // Attach the extracted extension to the file object for later use
+ part.file.extname = ext;
+
+ // part.file.sortOrder = part.file.sortOrder;
+
+ const tmpPath = getTmpPath(multipartConfig);
+ (part.file as any).tmpPath = tmpPath;
+
+ const writeStream = createWriteStream(tmpPath);
+ await pipeline(part, writeStream);
+ } catch (error) {
+ request.multipart.abort(new errors.E_VALIDATION_ERROR({ 'upload error': error.message }));
+ }
+ });
+
try {
- // Step 2 - Validate request body against the schema
- // await request.validate({ schema: newDatasetSchema, messages: this.messages });
- // await request.validate(CreateDatasetValidator);
- await request.validateUsing(createDatasetValidator);
- // console.log({ payload });
+ await multipart.process();
+ // // Instead of letting an error abort the controller, check if any error occurred
} catch (error) {
- // Step 3 - Handle errors
- // return response.badRequest(error.messages);
- throw error;
+ // This is where you'd expect to catch any errors.
+ session.flash('errors', error.messages);
+ return response.redirect().back();
}
let trx: TransactionClientContract | null = null;
try {
+ await request.validateUsing(createDatasetValidator);
trx = await db.transaction();
const user = (await User.find(auth.user?.id)) as User;
@@ -425,6 +522,14 @@ export default class DatasetController {
await trx.commit();
console.log('Dataset and related models created successfully');
} catch (error) {
+ // Clean up temporary files if validation or later steps fail
+ uploadedTmpFiles.forEach((tmpPath) => {
+ try {
+ fs.unlinkSync(tmpPath);
+ } catch (cleanupError) {
+ console.error('Error cleaning up temporary file:', cleanupError);
+ }
+ });
if (trx !== null) {
await trx.rollback();
}
@@ -437,14 +542,19 @@ export default class DatasetController {
return response.redirect().toRoute('dataset.list');
// return response.redirect().back();
}
-
- private async createDatasetAndAssociations(user: User, request: HttpContext['request'], trx: TransactionClientContract) {
+ private async createDatasetAndAssociations(
+ user: User,
+ request: HttpContext['request'],
+ trx: TransactionClientContract,
+ // uploadedFiles: Array,
+ ) {
// Create a new instance of the Dataset model:
const dataset = new Dataset();
dataset.type = request.input('type');
dataset.creating_corporation = request.input('creating_corporation');
dataset.language = request.input('language');
dataset.embargo_date = request.input('embargo_date');
+ dataset.project_id = request.input('project_id');
//await dataset.related('user').associate(user); // speichert schon ab
// Dataset.$getRelation('user').boot();
// Dataset.$getRelation('user').setRelated(dataset, user);
@@ -553,7 +663,7 @@ export default class DatasetController {
newFile.fileSize = file.size;
newFile.mimeType = mimeType;
newFile.label = file.clientName;
- newFile.sortOrder = index;
+ newFile.sortOrder = index + 1;
newFile.visibleInFrontdoor = true;
newFile.visibleInOai = true;
// let path = coverImage.filePath;
@@ -704,6 +814,8 @@ export default class DatasetController {
'files.array.minLength': 'At least {{ min }} file upload is required.',
'files.*.size': 'file size is to big',
'files.*.extnames': 'file extension is not supported',
+
+ 'embargo_date.date.afterOrEqual': `Embargo date must be on or after ${dayjs().add(10, 'day').format('DD.MM.YYYY')}`,
};
// public async release({ params, view }) {
@@ -814,7 +926,7 @@ export default class DatasetController {
// throw new GeneralException(trans('exceptions.publish.release.update_error'));
}
- public async edit({ request, inertia, response }: HttpContext) {
+ public async edit({ request, inertia, response, auth }: HttpContext) {
const id = request.param('id');
const datasetQuery = Dataset.query().where('id', id);
datasetQuery
@@ -822,8 +934,8 @@ export default class DatasetController {
.preload('descriptions', (query) => query.orderBy('id', 'asc'))
.preload('coverage')
.preload('licenses')
- .preload('authors')
- .preload('contributors')
+ .preload('authors', (query) => query.orderBy('pivot_sort_order', 'asc'))
+ .preload('contributors', (query) => query.orderBy('pivot_sort_order', 'asc'))
// .preload('subjects')
.preload('subjects', (builder) => {
builder.orderBy('id', 'asc').withCount('datasets');
@@ -839,10 +951,9 @@ export default class DatasetController {
// session.flash('errors', 'Invalid server state!');
return response
.flash(
- 'warning',
`Invalid server state. Dataset with id ${id} cannot be edited. Datset has server state ${dataset.server_state}.`,
+ 'warning',
)
- .redirect()
.toRoute('dataset.list');
}
@@ -876,15 +987,15 @@ export default class DatasetController {
// 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',
- };
+ // 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,
@@ -903,25 +1014,95 @@ export default class DatasetController {
subjectTypes: SubjectTypes,
referenceIdentifierTypes: Object.entries(ReferenceIdentifierTypes).map(([key, value]) => ({ value: key, label: value })),
relationTypes: Object.entries(RelationTypes).map(([key, value]) => ({ value: key, label: value })),
- doctypes,
+ doctypes: DatasetTypes,
+ can: {
+ edit: await auth.user?.can(['dataset-edit']),
+ delete: await auth.user?.can(['dataset-delete']),
+ },
});
}
public async update({ request, response, session }: HttpContext) {
- try {
- // await request.validate(UpdateDatasetValidator);
- await request.validateUsing(updateDatasetValidator);
- } catch (error) {
- // - Handle errors
- // return response.badRequest(error.messages);
- throw error;
- // return response.badRequest(error.messages);
+ // 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);
+ await dataset.load('files');
+ // Accumulate the size of the already related files
+ // const preExistingFileSize = dataset.files.reduce((acc, file) => acc + file.fileSize, 0);
+ let preExistingFileSize = 0;
+ for (const file of dataset.files) {
+ preExistingFileSize += Number(file.fileSize);
}
- // await request.validate(UpdateDatasetValidator);
- const id = request.param('id');
+ const uploadedTmpFiles: string[] = [];
+ // Only process multipart if the request has a multipart content type
+ const contentType = request.request.headers['content-type'] || '';
+ if (contentType.includes('multipart/form-data')) {
+ const multipart: Multipart = request.multipart;
+ // Aggregated limit example (adjust as needed)
+ const multipartConfig = getConfigFor('multipart');
+ const aggregatedLimit = multipartConfig.limit ? parseBytesSize(multipartConfig.limit) : 100 * 1024 * 1024;
+ // Initialize totalUploadedSize with the size of existing files
+ let totalUploadedSize = preExistingFileSize;
+
+ multipart.onFile('files', { deferValidations: true }, async (part) => {
+ let fileUploadedSize = 0;
+
+ part.on('data', (chunk) => {
+ fileUploadedSize += chunk.length;
+ });
+
+ part.on('end', () => {
+ totalUploadedSize += fileUploadedSize;
+ part.file.size = fileUploadedSize;
+ if (part.file.tmpPath) {
+ uploadedTmpFiles.push(part.file.tmpPath);
+ }
+ if (totalUploadedSize > aggregatedLimit) {
+ uploadedTmpFiles.forEach((tmpPath) => {
+ try {
+ fs.unlinkSync(tmpPath);
+ } catch (cleanupError) {
+ console.error('Error cleaning up temporary file:', cleanupError);
+ }
+ });
+ const error = new errors.E_VALIDATION_ERROR({
+ 'upload error': `Aggregated upload limit of ${formatBytes(aggregatedLimit)} exceeded. The total size of files being uploaded would exceed the limit.`,
+ });
+ request.multipart.abort(error);
+ }
+ });
+
+ part.on('error', (error) => {
+ request.multipart.abort(error);
+ });
+
+ try {
+ const fileNameWithoutParams = part.file.clientName.split('?')[0];
+ const ext = path.extname(fileNameWithoutParams).replace('.', '');
+ part.file.extname = ext;
+ const tmpPath = getTmpPath(multipartConfig);
+ (part.file as any).tmpPath = tmpPath;
+ const writeStream = createWriteStream(tmpPath);
+ await pipeline(part, writeStream);
+ } catch (error) {
+ request.multipart.abort(new errors.E_VALIDATION_ERROR({ 'upload error': error.message }));
+ }
+ });
+
+ try {
+ await multipart.process();
+ } catch (error) {
+ session.flash('errors', error.messages);
+ return response.redirect().back();
+ }
+ }
+
+ const id = request.param('id');
let trx: TransactionClientContract | null = null;
try {
+ await request.validateUsing(updateDatasetValidator);
trx = await db.transaction();
// const user = (await User.find(auth.user?.id)) as User;
// await this.createDatasetAndAssociations(user, request, trx);
@@ -982,22 +1163,97 @@ export default class DatasetController {
}
}
- // await dataset.useTransaction(trx).related('subjects').sync([]);
- const keywords = request.input('subjects');
- for (const keywordData of keywords) {
- if (keywordData.id) {
- const subject = await Subject.findOrFail(keywordData.id);
- // await dataset.useTransaction(trx).related('subjects').attach([keywordData.id]);
- subject.value = keywordData.value;
- subject.type = keywordData.type;
- subject.external_key = keywordData.external_key;
- if (subject.$isDirty) {
- await subject.save();
+ // Process all subjects/keywords from the request
+ const subjects = request.input('subjects');
+ for (const subjectData of subjects) {
+ // Case 1: Subject already exists in the database (has an ID)
+ if (subjectData.id) {
+ // Retrieve the existing subject
+ const existingSubject = await Subject.findOrFail(subjectData.id);
+
+ // Update subject properties from the request data
+ existingSubject.value = subjectData.value;
+ existingSubject.type = subjectData.type;
+ existingSubject.external_key = subjectData.external_key;
+
+ // Only save if there are actual changes
+ if (existingSubject.$isDirty) {
+ await existingSubject.save();
+ }
+
+ // Note: The relationship between dataset and subject is already established,
+ // so we don't need to attach it again
+ }
+ // Case 2: New subject being added (no ID)
+ else {
+ // Check if a subject with the same value and type already exists in the database
+ const subject = await Subject.firstOrNew({ value: subjectData.value, type: subjectData.type }, subjectData);
+
+ if (subject.$isNew === true) {
+ // If it's a completely new subject, create and associate it with the dataset
+ await dataset.useTransaction(trx).related('subjects').save(subject);
+ } else {
+ // If the subject already exists, just create the relationship
+ await dataset.useTransaction(trx).related('subjects').attach([subject.id]);
+ }
+ }
+ }
+
+ const subjectsToDelete = request.input('subjectsToDelete', []);
+ for (const subjectData of subjectsToDelete) {
+ if (subjectData.id) {
+ // const subject = await Subject.findOrFail(subjectData.id);
+ const subject = await Subject.query()
+ .where('id', subjectData.id)
+ .preload('datasets', (builder) => {
+ builder.orderBy('id', 'asc');
+ })
+ .withCount('datasets')
+ .firstOrFail();
+
+ // Check if the subject is used by multiple datasets
+ if (subject.$extras.datasets_count > 1) {
+ // If used by multiple datasets, just detach it from the current dataset
+ await dataset.useTransaction(trx).related('subjects').detach([subject.id]);
+ } else {
+ // If only used by this dataset, delete the subject completely
+
+ await dataset.useTransaction(trx).related('subjects').detach([subject.id]);
+ await subject.useTransaction(trx).delete();
+ }
+ }
+ }
+
+ // Process references
+ const references = request.input('references', []);
+ // First, get existing references to determine which ones to update vs. create
+ const existingReferences = await dataset.related('references').query();
+ const existingReferencesMap: Map = new Map(existingReferences.map((ref) => [ref.id, ref]));
+
+ for (const referenceData of references) {
+ if (existingReferencesMap.has(referenceData.id) && referenceData.id) {
+ // Update existing reference
+ const reference = existingReferencesMap.get(referenceData.id);
+ if (reference) {
+ reference.merge(referenceData);
+ if (reference.$isDirty) {
+ await reference.useTransaction(trx).save();
+ }
}
} else {
- const keyword = new Subject();
- keyword.fill(keywordData);
- await dataset.useTransaction(trx).related('subjects').save(keyword, false);
+ // Create new reference
+ const dataReference = new DatasetReference();
+ dataReference.fill(referenceData);
+ await dataset.useTransaction(trx).related('references').save(dataReference);
+ }
+ }
+
+ // Handle references to delete if provided
+ const referencesToDelete = request.input('referencesToDelete', []);
+ for (const referenceData of referencesToDelete) {
+ if (referenceData.id) {
+ const reference = await DatasetReference.findOrFail(referenceData.id);
+ await reference.useTransaction(trx).delete();
}
}
@@ -1029,9 +1285,9 @@ export default class DatasetController {
// handle new uploaded files:
const uploadedFiles: MultipartFile[] = request.files('files');
if (Array.isArray(uploadedFiles) && uploadedFiles.length > 0) {
- for (const [index, fileData] of uploadedFiles.entries()) {
+ for (const [index, file] of uploadedFiles.entries()) {
try {
- await this.scanFileForViruses(fileData.tmpPath); //, 'gitea.lan', 3310);
+ await this.scanFileForViruses(file.tmpPath); //, 'gitea.lan', 3310);
// await this.scanFileForViruses("/tmp/testfile.txt");
} catch (error) {
// If the file is infected or there's an error scanning the file, throw a validation exception
@@ -1039,29 +1295,29 @@ export default class DatasetController {
}
// move to disk:
- const fileName = `file-${cuid()}.${fileData.extname}`; //'file-ls0jyb8xbzqtrclufu2z2e0c.pdf'
+ const fileName = this.generateFilename(file.extname as string);
const datasetFolder = `files/${dataset.id}`; // 'files/307'
const datasetFullPath = path.join(`${datasetFolder}`, fileName);
- // await fileData.moveToDisk(datasetFolder, { name: fileName, overwrite: true }, 'local');
- // await fileData.move(drive.makePath(datasetFolder), {
+ // await file.moveToDisk(datasetFolder, { name: fileName, overwrite: true }, 'local');
+ // await file.move(drive.makePath(datasetFolder), {
// name: fileName,
// overwrite: true, // overwrite in case of conflict
// });
- await fileData.moveToDisk(datasetFullPath, 'local', {
+ await file.moveToDisk(datasetFullPath, 'local', {
name: fileName,
overwrite: true, // overwrite in case of conflict
disk: 'local',
});
//save to db:
- const { clientFileName, sortOrder } = this.extractVariableNameAndSortOrder(fileData.clientName);
- const mimeType = fileData.headers['content-type'] || 'application/octet-stream'; // Fallback to a default MIME type
+ const { clientFileName, sortOrder } = this.extractVariableNameAndSortOrder(file.clientName);
+ const mimeType = file.headers['content-type'] || 'application/octet-stream'; // Fallback to a default MIME type
const newFile = await dataset
.useTransaction(trx)
.related('files')
.create({
pathName: `${datasetFolder}/${fileName}`,
- fileSize: fileData.size,
+ fileSize: file.size,
mimeType,
label: clientFileName,
sortOrder: sortOrder || index,
@@ -1101,16 +1357,24 @@ export default class DatasetController {
await dataset.useTransaction(trx).save();
await trx.commit();
- console.log('Dataset and related models created successfully');
+ console.log('Dataset has been updated successfully');
session.flash('message', 'Dataset has been updated successfully');
// return response.redirect().toRoute('user.index');
return response.redirect().toRoute('dataset.edit', [dataset.id]);
} catch (error) {
+ // Clean up temporary files if validation or later steps fail
+ uploadedTmpFiles.forEach((tmpPath) => {
+ try {
+ fs.unlinkSync(tmpPath);
+ } catch (cleanupError) {
+ console.error('Error cleaning up temporary file:', cleanupError);
+ }
+ });
if (trx !== null) {
await trx.rollback();
}
- console.error('Failed to create dataset and related models:', error);
+ console.error('Failed to update dataset and related models:', error);
// throw new ValidationException(true, { 'upload error': `failed to create dataset and related models. ${error}` });
throw error;
}
@@ -1236,6 +1500,7 @@ export default class DatasetController {
}
const collectionRoles = await CollectionRole.query()
+ .whereIn('name', ['ddc', 'ccs'])
.preload('collections', (coll: Collection) => {
// preloa only top level collection with noparent_id
coll.whereNull('parent_id').orderBy('number', 'asc');
@@ -1275,7 +1540,7 @@ export default class DatasetController {
// This should be an array of collection ids.
const collections: number[] = request.input('collections', []);
- // Synchronize the dataset collections using the transaction.
+ // Synchronize the dataset collections using the transaction.
await dataset.useTransaction(trx).related('collections').sync(collections);
// Commit the transaction.await trx.commit()
diff --git a/app/exceptions/db_handler.ts b/app/exceptions/db_handler.ts
new file mode 100644
index 0000000..868fec9
--- /dev/null
+++ b/app/exceptions/db_handler.ts
@@ -0,0 +1,43 @@
+// import { Exception } from '@adonisjs/core/exceptions'
+import { HttpContext, ExceptionHandler } from '@adonisjs/core/http';
+
+export default class DbHandlerException extends ExceptionHandler {
+ // constructor() {
+ // super(Logger)
+ // }
+
+ async handle(error: any, ctx: HttpContext) {
+ // Check for AggregateError type
+ if (error.type === 'AggregateError' && error.aggregateErrors) {
+ const dbErrors = error.aggregateErrors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432);
+
+ if (dbErrors) {
+ return ctx.response.status(503).json({
+ status: 'error',
+ message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
+ details: {
+ code: error.code,
+ type: error.type,
+ ports: error.aggregateErrors.map((err: any) => ({
+ port: err.port,
+ address: err.address,
+ })),
+ },
+ });
+ }
+ }
+
+ // Handle simple ECONNREFUSED errors
+ if (error.code === 'ECONNREFUSED') {
+ return ctx.response.status(503).json({
+ status: 'error',
+ message: 'Database connection failed. Please ensure PostgreSQL is running.',
+ code: error.code,
+ });
+ }
+
+ return super.handle(error, ctx);
+ }
+
+ static status = 500;
+}
diff --git a/app/exceptions/handler.ts b/app/exceptions/handler.ts
index d8f1c63..a460c3d 100644
--- a/app/exceptions/handler.ts
+++ b/app/exceptions/handler.ts
@@ -46,6 +46,7 @@ export default class HttpExceptionHandler extends ExceptionHandler {
// return view.render('./errors/server-error', { error });
// },
// };
+
protected statusPages: Record = {
'404': (error, { inertia }) => {
return inertia.render('Errors/ServerError', {
@@ -58,9 +59,47 @@ export default class HttpExceptionHandler extends ExceptionHandler {
return inertia.render('Errors/ServerError', {
error: error.message,
code: error.status,
- });
+ });
+ },
+ // '500': (error, { inertia }) => {
+ // return inertia.render('Errors/postgres_error', {
+ // status: 'error',
+ // message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
+ // details: {
+ // code: error.code,
+ // type: error.status,
+ // ports: error.errors.map((err: any) => ({
+ // port: err.port,
+ // address: err.address,
+ // })),
+ // },
+ // });
+ // },
+ '500..599': (error, { inertia }) => {
+ if (error.code === 'ECONNREFUSED') {
+ const dbErrors = error.errors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432);
+
+ if (dbErrors) {
+ return inertia.render('Errors/postgres_error', {
+ status: 'error',
+ message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
+ details: {
+ code: error.code,
+ type: error.status,
+ ports: error.errors.map((err: any) => ({
+ port: err.port,
+ address: err.address,
+ })),
+ },
+ });
+ }
+ } else {
+ return inertia.render('Errors/ServerError', {
+ error: error.message,
+ code: error.status,
+ });
+ }
},
- '500..599': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }),
};
// constructor() {
@@ -68,7 +107,7 @@ export default class HttpExceptionHandler extends ExceptionHandler {
// }
public async handle(error: any, ctx: HttpContext) {
- const { response, request, session } = ctx;
+ const { response, request, session, inertia } = ctx;
/**
* Handle failed authentication attempt
@@ -82,6 +121,47 @@ export default class HttpExceptionHandler extends ExceptionHandler {
// return response.redirect('/dashboard');
// }
+ // Handle Axios errors
+ if (error.code === 'ECONNREFUSED') {
+ const dbErrors = error.errors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432);
+
+ if (dbErrors) {
+ // return ctx.response.status(503).json({
+ // status: 'error',
+ // message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
+ // details: {
+ // code: error.code,
+ // type: error.status,
+ // ports: error.errors.map((err: any) => ({
+ // port: err.port,
+ // address: err.address,
+ // })),
+ // },
+ // });
+ // return inertia.render('Errors/postgres_error', {
+ // status: 'error',
+ // message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
+ // details: {
+ // code: error.code,
+ // type: error.status,
+ // ports: error.errors.map((err: any) => ({
+ // port: err.port,
+ // address: err.address,
+ // })),
+ // },
+ // });
+ }
+ }
+
+ // Handle simple ECONNREFUSED errors
+ // if (error.code === 'ECONNREFUSED') {
+ // return ctx.response.status(503).json({
+ // status: 'error',
+ // message: 'Database connection failed. Please ensure PostgreSQL is running.',
+ // code: error.code,
+ // });
+ // }
+
// https://github.com/inertiajs/inertia-laravel/issues/56
// let test = response.getStatus(); //200
// let header = request.header('X-Inertia'); // true
@@ -98,12 +178,21 @@ export default class HttpExceptionHandler extends ExceptionHandler {
// ->toResponse($request)
// ->setStatusCode($response->status());
}
+
+ // Handle simple ECONNREFUSED errors
+ // if (error.code === 'ECONNREFUSED') {
+ // return ctx.response.status(503).json({
+ // status: 'error',
+ // message: 'Database connection failed. Please ensure PostgreSQL is running.',
+ // code: error.code,
+ // });
+ // }
// Dynamically change the error templates based on the absence of X-Inertia header
// if (!ctx.request.header('X-Inertia')) {
// this.statusPages = {
- // '401..403': (error, { view }) => view.render('./errors/unauthorized', { error }),
- // '404': (error, { view }) => view.render('./errors/not-found', { error }),
- // '500..599': (error, { view }) => view.render('./errors/server-error', { error }),
+ // '401..403': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }),
+ // '404': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }),
+ // '500..599': (error, { inertia }) => inertia.render('Errors/ServerError', { error: error.message, code: error.status }),
// };
// }
diff --git a/app/models/person.ts b/app/models/person.ts
index 4e6b60b..cdc612d 100644
--- a/app/models/person.ts
+++ b/app/models/person.ts
@@ -3,7 +3,7 @@ import { DateTime } from 'luxon';
import dayjs from 'dayjs';
import Dataset from './dataset.js';
import BaseModel from './base_model.js';
-import type { ManyToMany } from "@adonisjs/lucid/types/relations";
+import type { ManyToMany } from '@adonisjs/lucid/types/relations';
export default class Person extends BaseModel {
public static namingStrategy = new SnakeCaseNamingStrategy();
@@ -64,9 +64,8 @@ export default class Person extends BaseModel {
// return '2023-03-21 08:45:00';
// }
-
@computed({
- serializeAs: 'dataset_count',
+ serializeAs: 'dataset_count',
})
public get datasetCount() {
const stock = this.$extras.datasets_count; //my pivot column name was "stock"
@@ -79,6 +78,16 @@ export default class Person extends BaseModel {
return contributor_type;
}
+ @computed({ serializeAs: 'allow_email_contact' })
+ public get allowEmailContact() {
+ // If the datasets relation is missing or empty, return false instead of null.
+ if (!this.datasets || this.datasets.length === 0) {
+ return false;
+ }
+ // Otherwise return the pivot attribute from the first related dataset.
+ return this.datasets[0].$extras?.pivot_allow_email_contact;
+ }
+
@manyToMany(() => Dataset, {
pivotForeignKey: 'person_id',
pivotRelatedForeignKey: 'document_id',
diff --git a/app/models/types.ts b/app/models/types.ts
new file mode 100644
index 0000000..1fda1e1
--- /dev/null
+++ b/app/models/types.ts
@@ -0,0 +1,57 @@
+/**
+ * Qs module config
+ */
+type QueryStringConfig = {
+ depth?: number
+ allowPrototypes?: boolean
+ plainObjects?: boolean
+ parameterLimit?: number
+ arrayLimit?: number
+ ignoreQueryPrefix?: boolean
+ delimiter?: RegExp | string
+ allowDots?: boolean
+ charset?: 'utf-8' | 'iso-8859-1' | undefined
+ charsetSentinel?: boolean
+ interpretNumericEntities?: boolean
+ parseArrays?: boolean
+ comma?: boolean
+ }
+/**
+ * Base config used by all types
+ */
+type BodyParserBaseConfig = {
+ encoding: string
+ limit: string | number
+ types: string[]
+ }
+
+ /**
+ * Body parser config for parsing JSON requests
+ */
+ export type BodyParserJSONConfig = BodyParserBaseConfig & {
+ strict: boolean
+ convertEmptyStringsToNull: boolean
+ }
+
+ /**
+ * Parser config for parsing form data
+ */
+ export type BodyParserFormConfig = BodyParserBaseConfig & {
+ queryString: QueryStringConfig
+ convertEmptyStringsToNull: boolean
+ }
+
+ /**
+ * Parser config for parsing raw body (untouched)
+ */
+ export type BodyParserRawConfig = BodyParserBaseConfig
+/**
+ * Body parser config for all supported form types
+ */
+export type BodyParserConfig = {
+ allowedMethods: string[]
+ json: BodyParserJSONConfig
+ form: BodyParserFormConfig
+ raw: BodyParserRawConfig
+ multipart: BodyParserMultipartConfig
+ }
\ No newline at end of file
diff --git a/app/utils/utility-functions.ts b/app/utils/utility-functions.ts
index 6afb2a0..a281f59 100644
--- a/app/utils/utility-functions.ts
+++ b/app/utils/utility-functions.ts
@@ -1,3 +1,16 @@
+import { join, isAbsolute } from 'node:path';
+import type { BodyParserConfig } from '#models/types';
+import { createId } from '@paralleldrive/cuid2';
+import { tmpdir } from 'node:os';
+import config from '@adonisjs/core/services/config';
+import Dataset from '#models/dataset';
+import { TransactionClientContract } from '@adonisjs/lucid/types/database';
+import Person from '#models/person';
+
+interface Dictionary {
+ [index: string]: string;
+}
+
export function sum(a: number, b: number): number {
return a + b;
}
@@ -24,3 +37,88 @@ export function preg_match(regex: RegExp, str: string) {
const result: boolean = regex.test(str);
return result;
}
+
+/**
+ * Returns the tmp path for storing the files temporarly
+ */
+export function getTmpPath(config: BodyParserConfig['multipart']): string {
+ if (typeof config.tmpFileName === 'function') {
+ const tmpPath = config.tmpFileName();
+ return isAbsolute(tmpPath) ? tmpPath : join(tmpdir(), tmpPath);
+ }
+
+ return join(tmpdir(), createId());
+}
+/**
+ * Returns config for a given type
+ */
+export function getConfigFor(type: K): BodyParserConfig[K] {
+ const bodyParserConfig: BodyParserConfig = config.get('bodyparser');
+ const configType = bodyParserConfig[type];
+ return configType;
+}
+
+export function parseBytesSize(size: string): number {
+ const units: Record = {
+ kb: 1024,
+ mb: 1024 * 1024,
+ gb: 1024 * 1024 * 1024,
+ tb: 1024 * 1024 * 1024 * 1024,
+ };
+
+ const match = size.match(/^(\d+)(kb|mb|gb|tb)$/i); // Regex to match size format
+
+ if (!match) {
+ throw new Error('Invalid size format');
+ }
+
+ const [, value, unit] = match;
+ return parseInt(value) * units[unit.toLowerCase()];
+}
+
+// Helper function to format bytes as human-readable text
+
+export function formatBytes(bytes: number): string {
+ if (bytes === 0) return '0 Bytes';
+ const k = 1024;
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+}
+
+export async function savePersons(dataset: Dataset, persons: any[], role: string, trx: TransactionClientContract) {
+ for (const [key, person] of persons.entries()) {
+ const pivotData = {
+ role: role,
+ sort_order: key + 1,
+ allow_email_contact: false,
+ ...extractPivotAttributes(person), // Merge pivot attributes here
+ };
+
+ if (person.id !== undefined) {
+ await dataset
+ .useTransaction(trx)
+ .related('persons')
+ .attach({
+ [person.id]: pivotData,
+ });
+ } else {
+ const dataPerson = new Person();
+ dataPerson.fill(person);
+ await dataset.useTransaction(trx).related('persons').save(dataPerson, false, pivotData);
+ }
+ }
+}
+
+// Helper function to extract pivot attributes from a person object
+function extractPivotAttributes(person: any) {
+ const pivotAttributes: Dictionary = {};
+ for (const key in person) {
+ if (key.startsWith('pivot_')) {
+ // pivotAttributes[key] = person[key];
+ const cleanKey = key.replace('pivot_', ''); // Remove 'pivot_' prefix
+ pivotAttributes[cleanKey] = person[key];
+ }
+ }
+ return pivotAttributes;
+}
diff --git a/app/validators/dataset.ts b/app/validators/dataset.ts
index cdd1fbf..5417463 100644
--- a/app/validators/dataset.ts
+++ b/app/validators/dataset.ts
@@ -40,7 +40,8 @@ export const createDatasetValidator = vine.compile(
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(2)
+ .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }),
descriptions: vine
.array(
vine.object({
@@ -54,7 +55,8 @@ export const createDatasetValidator = vine.compile(
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(1),
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
authors: vine
.array(
vine.object({
@@ -156,8 +158,7 @@ export const createDatasetValidator = vine.compile(
.fileScan({ removeInfected: true }),
)
.minLength(1),
- }),
-);
+ }),);
/**
* Validates the dataset's update action
@@ -187,7 +188,8 @@ export const updateDatasetValidator = vine.compile(
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ // .minLength(2)
+ .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }),
descriptions: vine
.array(
vine.object({
@@ -201,7 +203,7 @@ export const updateDatasetValidator = vine.compile(
.translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
}),
)
- .minLength(1),
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
authors: vine
.array(
vine.object({
@@ -312,12 +314,137 @@ export const updateDatasetValidator = vine.compile(
}),
);
-// files: schema.array([rules.minLength(1)]).members(
-// schema.file({
-// size: '512mb',
-// extnames: ['jpg', 'gif', 'png', 'tif', 'pdf', 'zip', 'fgb', 'nc', 'qml', 'ovr', 'gpkg', 'gml', 'gpx', 'kml', 'kmz', 'json'],
-// }),
-// ),
+export const updateEditorDatasetValidator = vine.compile(
+ vine.object({
+ // first step
+ language: vine
+ .string()
+ .trim()
+ .regex(/^[a-zA-Z0-9]+$/),
+ licenses: vine.array(vine.number()).minLength(1), // define at least one license for the new dataset
+ rights: vine.string().in(['true']),
+ // second step
+ type: vine.string().trim().minLength(3).maxLength(255),
+ creating_corporation: vine.string().trim().minLength(3).maxLength(255),
+ titles: vine
+ .array(
+ vine.object({
+ value: vine.string().trim().minLength(3).maxLength(255),
+ type: vine.enum(Object.values(TitleTypes)),
+ language: vine
+ .string()
+ .trim()
+ .minLength(2)
+ .maxLength(255)
+ .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
+ }),
+ )
+ // .minLength(2)
+ .arrayContainsTypes({ typeA: 'main', typeB: 'translated' }),
+ descriptions: vine
+ .array(
+ vine.object({
+ value: vine.string().trim().minLength(3).maxLength(2500),
+ type: vine.enum(Object.values(DescriptionTypes)),
+ language: vine
+ .string()
+ .trim()
+ .minLength(2)
+ .maxLength(255)
+ .translatedLanguage({ mainLanguageField: 'language', typeField: 'type' }),
+ }),
+ )
+ .arrayContainsTypes({ typeA: 'abstract', typeB: 'translated' }),
+ authors: vine
+ .array(
+ vine.object({
+ email: vine
+ .string()
+ .trim()
+ .maxLength(255)
+ .email()
+ .normalizeEmail()
+ .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }),
+ first_name: vine.string().trim().minLength(3).maxLength(255),
+ last_name: vine.string().trim().minLength(3).maxLength(255),
+ }),
+ )
+ .minLength(1)
+ .distinct('email'),
+ contributors: vine
+ .array(
+ vine.object({
+ email: vine
+ .string()
+ .trim()
+ .maxLength(255)
+ .email()
+ .normalizeEmail()
+ .isUniquePerson({ table: 'persons', column: 'email', idField: 'id' }),
+ first_name: vine.string().trim().minLength(3).maxLength(255),
+ last_name: vine.string().trim().minLength(3).maxLength(255),
+ pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)),
+ }),
+ )
+ .distinct('email')
+ .optional(),
+ // third step
+ project_id: vine.number().optional(),
+ // embargo_date: schema.date.optional({ format: 'yyyy-MM-dd' }, [rules.after(10, 'days')]),
+ embargo_date: vine
+ .date({
+ formats: ['YYYY-MM-DD'],
+ })
+ .afterOrEqual((_field) => {
+ return dayjs().add(10, 'day').format('YYYY-MM-DD');
+ })
+ .optional(),
+ coverage: vine.object({
+ x_min: vine.number(),
+ x_max: vine.number(),
+ y_min: vine.number(),
+ y_max: vine.number(),
+ elevation_absolut: vine.number().positive().optional(),
+ elevation_min: vine.number().positive().optional().requiredIfExists('elevation_max'),
+ elevation_max: vine.number().positive().optional().requiredIfExists('elevation_min'),
+ // type: vine.enum(Object.values(DescriptionTypes)),
+ depth_absolut: vine.number().negative().optional(),
+ depth_min: vine.number().negative().optional().requiredIfExists('depth_max'),
+ depth_max: vine.number().negative().optional().requiredIfExists('depth_min'),
+ time_abolute: vine.date({ formats: { utc: true } }).optional(),
+ time_min: vine
+ .date({ formats: { utc: true } })
+ .beforeField('time_max')
+ .optional()
+ .requiredIfExists('time_max'),
+ time_max: vine
+ .date({ formats: { utc: true } })
+ .afterField('time_min')
+ .optional()
+ .requiredIfExists('time_min'),
+ }),
+ references: vine
+ .array(
+ vine.object({
+ value: vine.string().trim().minLength(3).maxLength(255).validateReference({ typeField: 'type' }),
+ type: vine.enum(Object.values(ReferenceIdentifierTypes)),
+ relation: vine.enum(Object.values(RelationTypes)),
+ label: vine.string().trim().minLength(2).maxLength(255),
+ }),
+ )
+ .optional(),
+ subjects: vine
+ .array(
+ vine.object({
+ value: vine.string().trim().minLength(3).maxLength(255),
+ // pivot_contributor_type: vine.enum(Object.keys(ContributorTypes)),
+ language: vine.string().trim().minLength(2).maxLength(255),
+ }),
+ )
+ .minLength(3)
+ .distinct('value'),
+ }),
+);
let messagesProvider = new SimpleMessagesProvider({
'minLength': '{{ field }} must be at least {{ min }} characters long',
@@ -369,8 +496,10 @@ let messagesProvider = new SimpleMessagesProvider({
'files.array.minLength': 'At least {{ min }} file upload is required.',
'files.*.size': 'file size is to big',
'files.*.extnames': 'file extension is not supported',
+ 'embargo_date.date.afterOrEqual': `Embargo date must be on or after ${dayjs().add(10, 'day').format('DD.MM.YYYY')}`,
});
createDatasetValidator.messagesProvider = messagesProvider;
updateDatasetValidator.messagesProvider = messagesProvider;
+updateEditorDatasetValidator.messagesProvider = messagesProvider;
// export default createDatasetValidator;
diff --git a/app/validators/user.ts b/app/validators/user.ts
index c87d467..b7bbd70 100644
--- a/app/validators/user.ts
+++ b/app/validators/user.ts
@@ -16,7 +16,7 @@ export const createUserValidator = vine.compile(
first_name: vine.string().trim().minLength(3).maxLength(255),
last_name: vine.string().trim().minLength(3).maxLength(255),
email: vine.string().maxLength(255).email().normalizeEmail().isUnique({ table: 'accounts', column: 'email' }),
- password: vine.string().confirmed().trim().minLength(3).maxLength(60),
+ new_password: vine.string().confirmed({ confirmationField: 'password_confirmation' }).trim().minLength(3).maxLength(60),
roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user
}),
);
@@ -42,7 +42,7 @@ export const updateUserValidator = vine.withMetaData<{ objId: number }>().compil
.email()
.normalizeEmail()
.isUnique({ table: 'accounts', column: 'email', whereNot: (field) => field.meta.objId }),
- password: vine.string().confirmed().trim().minLength(3).maxLength(60).optional(),
+ new_password: vine.string().confirmed({ confirmationField: 'password_confirmation' }).trim().minLength(3).maxLength(60).optional(),
roles: vine.array(vine.number()).minLength(1), // define at least one role for the new user
}),
);
diff --git a/config/bodyparser.ts b/config/bodyparser.ts
index efc7dbb..b7c7d35 100644
--- a/config/bodyparser.ts
+++ b/config/bodyparser.ts
@@ -128,7 +128,7 @@ allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'],
| projects/:id/file
| ```
*/
- processManually: [],
+ processManually: ['/submitter/dataset/submit', '/submitter/dataset/:id/update'],
/*
|--------------------------------------------------------------------------
@@ -185,8 +185,8 @@ allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'],
| and fields data.
|
*/
- // limit: '20mb',
- limit: env.get('UPLOAD_LIMIT', '513mb'),
+ limit: '513mb',
+ //limit: env.get('UPLOAD_LIMIT', '513mb'),
/*
|--------------------------------------------------------------------------
diff --git a/contracts/enums.ts b/contracts/enums.ts
index 68ec4d9..5772570 100644
--- a/contracts/enums.ts
+++ b/contracts/enums.ts
@@ -21,6 +21,7 @@ export enum ServerStates {
rejected_reviewer = 'rejected_reviewer',
rejected_editor = 'rejected_editor',
reviewed = 'reviewed',
+ rejected_to_reviewer = 'rejected_to_reviewer',
}
// for table dataset_titles
diff --git a/database/factories/create_collections_data_ccs.sql b/database/factories/create_collections_data_ccs.sql
new file mode 100644
index 0000000..e6b14df
--- /dev/null
+++ b/database/factories/create_collections_data_ccs.sql
@@ -0,0 +1,1472 @@
+-- ACM Computing Classification System (CCS) — a widely used system for classifying academic literature in computer science and related disciplines.
+/* The main classes are: see number at db
+A. General Literature
+B. Hardware
+C. Computer Systems Organization
+D. Software
+E. Data
+F. Theory of Computation
+G. Mathematics of Computing
+H. Information Systems
+I. Computing Methodologies
+J. Computer Applications
+K. Computing Milieux
+
+These classes help in organizing research papers, indexing databases, and guiding publication categorization
+*/
+INSERT INTO collections (id, role_id, number, name, oai_subset, left_id, right_id, parent_id, visible, visible_publish) VALUES
+(1030,3,'A.','General Literature','A.',2,17,NULL,1,1),
+(1031,3,'B.','Hardware','B.',18,379,NULL,1,1),
+(1032,3,'C.','Computer Systems Organization','C.',380,567,NULL,1,1),
+(1033,3,'D.','Software','D.',568,1035,NULL,1,1),
+(1034,3,'E.','Data','E.',1036,1101,NULL,1,1),
+(1035,3,'F.','Theory of Computation','F.',1102,1291,NULL,1,1),
+(1036,3,'G.','Mathematics of Computing','G.',1292,1587,NULL,1,1),
+(1037,3,'H.','Information Systems','H.',1588,1919,NULL,1,1),
+(1038,3,'I.','Computing Methodologies','I.',1920,2537,NULL,1,1),
+(1039,3,'J.','Computer Applications','J.',2538,2637,NULL,1,1),
+(1040,3,'K.','Computing Milieux','K.',2638,2911,NULL,1,1),
+(1041,3,'A.0','GENERAL','A.0',3,10,1030,1,1),
+(1042,3,'A.1','INTRODUCTORY AND SURVEY','A.1',11,12,1030,1,1),
+(1043,3,'A.2','REFERENCE (e.g., dictionaries, encyclopedias, glossaries)','A.2',13,14,1030,1,1),
+(1044,3,'A.m','MISCELLANEOUS','A.m',15,16,1030,1,1),
+(1045,3,'B.0','GENERAL','B.0',19,20,1031,1,1),
+(1046,3,'B.1','CONTROL STRUCTURES AND MICROPROGRAMMING (D.3.2)','B.1',21,76,1031,1,1),
+(1047,3,'B.2','ARITHMETIC AND LOGIC STRUCTURES','B.2',77,114,1031,1,1),
+(1048,3,'B.3','MEMORY STRUCTURES','B.3',115,164,1031,1,1),
+(1049,3,'B.4','INPUT/OUTPUT AND DATA COMMUNICATIONS','B.4',165,226,1031,1,1),
+(1050,3,'B.5','REGISTER-TRANSFER-LEVEL IMPLEMENTATION','B.5',227,268,1031,1,1),
+(1051,3,'B.6','LOGIC DESIGN','B.6',269,316,1031,1,1),
+(1052,3,'B.7','INTEGRATED CIRCUITS','B.7',317,364,1031,1,1),
+(1053,3,'B.8','PERFORMANCE AND RELIABILITY (C.4) (NEW)','B.8',365,374,1031,1,1),
+(1054,3,'B.m','MISCELLANEOUS','B.m',375,378,1031,1,1),
+(1055,3,'C.0','GENERAL','C.0',381,382,1032,1,1),
+(1056,3,'C.1','PROCESSOR ARCHITECTURES','C.1',383,450,1032,1,1),
+(1057,3,'C.2','COMPUTER-COMMUNICATION NETWORKS','C.2',451,534,1032,1,1),
+(1058,3,'C.3','SPECIAL-PURPOSE AND APPLICATION-BASED SYSTEMS (J.7)','C.3',535,536,1032,1,1),
+(1059,3,'C.4','PERFORMANCE OF SYSTEMS','C.4',537,538,1032,1,1),
+(1060,3,'C.5','COMPUTER SYSTEM IMPLEMENTATION','C.5',539,564,1032,1,1),
+(1061,3,'C.m','MISCELLANEOUS','C.m',565,566,1032,1,1),
+(1062,3,'D.0','GENERAL','D.0',569,570,1033,1,1),
+(1063,3,'D.1','PROGRAMMING TECHNIQUES (E)','D.1',571,594,1033,1,1),
+(1064,3,'D.2','SOFTWARE ENGINEERING (K.6.3)','D.2',595,796,1033,1,1),
+(1065,3,'D.3','PROGRAMMING LANGUAGES','D.3',797,900,1033,1,1),
+(1066,3,'D.4','OPERATING SYSTEMS (C)','D.4',901,1030,1033,1,1),
+(1067,3,'D.m','MISCELLANEOUS','D.m',1031,1034,1033,1,1),
+(1068,3,'E.0','GENERAL','E.0',1037,1038,1034,1,1),
+(1069,3,'E.1','DATA STRUCTURES','E.1',1039,1054,1034,1,1),
+(1070,3,'E.2','DATA STORAGE REPRESENTATIONS','E.2',1055,1068,1034,1,1),
+(1071,3,'E.3','DATA ENCRYPTION','E.3',1069,1078,1034,1,1),
+(1072,3,'E.4','CODING AND INFORMATION THEORY (H.1.1)','E.4',1079,1088,1034,1,1),
+(1073,3,'E.5','FILES (D.4.3, F.2.2, H.2)','E.5',1089,1098,1034,1,1),
+(1074,3,'E.m','MISCELLANEOUS','E.m',1099,1100,1034,1,1),
+(1075,3,'F.0','GENERAL','F.0',1103,1104,1035,1,1),
+(1076,3,'F.1','COMPUTATION BY ABSTRACT DEVICES','F.1',1105,1152,1035,1,1),
+(1077,3,'F.2','ANALYSIS OF ALGORITHMS AND PROBLEM COMPLEXITY (B.6-7, F.1.3)','F.2',1153,1188,1035,1,1),
+(1078,3,'F.3','LOGICS AND MEANINGS OF PROGRAMS','F.3',1189,1234,1035,1,1),
+(1079,3,'F.4','MATHEMATICAL LOGIC AND FORMAL LANGUAGES','F.4',1235,1288,1035,1,1),
+(1080,3,'F.m','MISCELLANEOUS','F.m',1289,1290,1035,1,1),
+(1081,3,'G.0','GENERAL','G.0',1293,1294,1036,1,1),
+(1082,3,'G.1','NUMERICAL ANALYSIS','G.1',1295,1490,1036,1,1),
+(1083,3,'G.2','DISCRETE MATHEMATICS','G.2',1491,1524,1036,1,1),
+(1084,3,'G.3','PROBABILITY AND STATISTICS','G.3',1525,1562,1036,1,1),
+(1085,3,'G.4','MATHEMATICAL SOFTWARE','G.4',1563,1582,1036,1,1),
+(1086,3,'G.m','MISCELLANEOUS','G.m',1583,1586,1036,1,1),
+(1087,3,'H.0','GENERAL','H.0',1589,1590,1037,1,1),
+(1088,3,'H.1','MODELS AND PRINCIPLES','H.1',1591,1612,1037,1,1),
+(1089,3,'H.2','DATABASE MANAGEMENT (E.5)','H.2',1613,1700,1037,1,1),
+(1090,3,'H.3','INFORMATION STORAGE AND RETRIEVAL','H.3',1701,1778,1037,1,1),
+(1091,3,'H.4','INFORMATION SYSTEMS APPLICATIONS','H.4',1779,1818,1037,1,1),
+(1092,3,'H.5','INFORMATION INTERFACES AND PRESENTATION (e.g., HCI) (I.7)','H.5',1819,1916,1037,1,1),
+(1093,3,'H.m','MISCELLANEOUS','H.m',1917,1918,1037,1,1),
+(1094,3,'I.0','GENERAL','I.0',1921,1922,1038,1,1),
+(1095,3,'I.1','SYMBOLIC AND ALGEBRAIC MANIPULATION (REVISED)','I.1',1923,1956,1038,1,1),
+(1096,3,'I.2','ARTIFICIAL INTELLIGENCE','I.2',1957,2132,1038,1,1),
+(1097,3,'I.3','COMPUTER GRAPHICS','I.3',2133,2252,1038,1,1),
+(1098,3,'I.4','IMAGE PROCESSING AND COMPUTER VISION (REVISED)','I.4',2253,2382,1038,1,1),
+(1099,3,'I.5','PATTERN RECOGNITION','I.5',2383,2432,1038,1,1),
+(1100,3,'I.6','SIMULATION AND MODELING (G.3)','I.6',2433,2482,1038,1,1),
+(1101,3,'I.7','DOCUMENT AND TEXT PROCESSING (H.4-5) (REVISED)','I.7',2483,2534,1038,1,1),
+(1102,3,'I.m','MISCELLANEOUS','I.m',2535,2536,1038,1,1),
+(1103,3,'J.0','GENERAL','J.0',2539,2540,1039,1,1),
+(1104,3,'J.1','ADMINISTRATIVE DATA PROCESSING','J.1',2541,2558,1039,1,1),
+(1105,3,'J.2','PHYSICAL SCIENCES AND ENGINEERING','J.2',2559,2578,1039,1,1),
+(1106,3,'J.3','LIFE AND MEDICAL SCIENCES','J.3',2579,2586,1039,1,1),
+(1107,3,'J.4','SOCIAL AND BEHAVIORAL SCIENCES','J.4',2587,2594,1039,1,1),
+(1108,3,'J.5','ARTS AND HUMANITIES','J.5',2595,2612,1039,1,1),
+(1109,3,'J.6','COMPUTER-AIDED ENGINEERING','J.6',2613,2618,1039,1,1),
+(1110,3,'J.7','COMPUTERS IN OTHER SYSTEMS (C.3)','J.7',2619,2634,1039,1,1),
+(1111,3,'J.m','MISCELLANEOUS','J.m',2635,2636,1039,1,1),
+(1112,3,'K.0','GENERAL','K.0',2639,2640,1040,1,1),
+(1113,3,'K.1','THE COMPUTER INDUSTRY','K.1',2641,2650,1040,1,1),
+(1114,3,'K.2','HISTORY OF COMPUTING','K.2',2651,2662,1040,1,1),
+(1115,3,'K.3','COMPUTERS AND EDUCATION','K.3',2663,2696,1040,1,1),
+(1116,3,'K.4','COMPUTERS AND SOCIETY','K.4',2697,2756,1040,1,1),
+(1117,3,'K.5','LEGAL ASPECTS OF COMPUTING','K.5',2757,2786,1040,1,1),
+(1118,3,'K.6','MANAGEMENT OF COMPUTING AND INFORMATION SYSTEMS','K.6',2787,2856,1040,1,1),
+(1119,3,'K.7','THE COMPUTING PROFESSION','K.7',2857,2880,1040,1,1),
+(1120,3,'K.8','PERSONAL COMPUTING','K.8',2881,2908,1040,1,1),
+(1121,3,'K.m','MISCELLANEOUS','K.m',2909,2910,1040,1,1),
+(1122,3,NULL,'Biographies/autobiographies',NULL,4,5,1041,1,1),
+(1123,3,NULL,'Conference proceedings',NULL,6,7,1041,1,1),
+(1124,3,NULL,'General literary works (e.g., fiction, plays)',NULL,8,9,1041,1,1),
+(1125,3,'B.1.0','General','B.1.0',22,23,1046,1,1),
+(1126,3,'B.1.1','Control Design Styles','B.1.1',24,31,1046,1,1),
+(1127,3,NULL,'Hardwired control**',NULL,25,26,1126,1,1),
+(1128,3,NULL,'Microprogrammed logic arrays**',NULL,27,28,1126,1,1),
+(1129,3,NULL,'Writable control store**',NULL,29,30,1126,1,1),
+(1130,3,'B.1.2','Control Structure Performance Analysis and Design Aids','B.1.2',32,39,1046,1,1),
+(1131,3,NULL,'Automatic synthesis**',NULL,33,34,1130,1,1),
+(1132,3,NULL,'Formal models**',NULL,35,36,1130,1,1),
+(1133,3,NULL,'Simulation**',NULL,37,38,1130,1,1),
+(1134,3,'B.1.3','Control Structure Reliability, Testing, and Fault-Tolerance** (B.8)','B.1.3',40,49,1046,1,1),
+(1135,3,NULL,'Diagnostics**',NULL,41,42,1134,1,1),
+(1136,3,NULL,'Error-checking**',NULL,43,44,1134,1,1),
+(1137,3,NULL,'Redundant design**',NULL,45,46,1134,1,1),
+(1138,3,NULL,'Test generation**',NULL,47,48,1134,1,1),
+(1139,3,'B.1.4','Microprogram Design Aids (D.2.2, D.2.4, D.3.2, D.3.4)','B.1.4',50,61,1046,1,1),
+(1140,3,NULL,'Firmware engineering**',NULL,51,52,1139,1,1),
+(1141,3,NULL,'Languages and compilers',NULL,53,54,1139,1,1),
+(1142,3,NULL,'Machine-independent microcode generation**',NULL,55,56,1139,1,1),
+(1143,3,NULL,'Optimization',NULL,57,58,1139,1,1),
+(1144,3,NULL,'Verification**',NULL,59,60,1139,1,1),
+(1145,3,'B.1.5','Microcode Applications','B.1.5',62,73,1046,1,1),
+(1146,3,NULL,'Direct data manipulation**',NULL,63,64,1145,1,1),
+(1147,3,NULL,'Firmware support of operating systems/instruction sets**',NULL,65,66,1145,1,1),
+(1148,3,NULL,'Instruction set interpretation',NULL,67,68,1145,1,1),
+(1149,3,NULL,'Peripheral control**',NULL,69,70,1145,1,1),
+(1150,3,NULL,'Special-purpose**',NULL,71,72,1145,1,1),
+(1151,3,'B.1.m','Miscellaneous','B.1.m',74,75,1046,1,1),
+(1152,3,'B.2.0','General','B.2.0',78,79,1047,1,1),
+(1153,3,'B.2.1','Design Styles (C.1.1-2)','B.2.1',80,87,1047,1,1),
+(1154,3,NULL,'Calculator**',NULL,81,82,1153,1,1),
+(1155,3,NULL,'Parallel',NULL,83,84,1153,1,1),
+(1156,3,NULL,'Pipeline',NULL,85,86,1153,1,1),
+(1157,3,'B.2.2','Performance Analysis and Design Aids** (B.8)','B.2.2',88,95,1047,1,1),
+(1158,3,NULL,'Simulation**',NULL,89,90,1157,1,1),
+(1159,3,NULL,'Verification**',NULL,91,92,1157,1,1),
+(1160,3,NULL,'Worst-case analysis**',NULL,93,94,1157,1,1),
+(1161,3,'B.2.3','Reliability, Testing, and Fault-Tolerance** (B.8)','B.2.3',96,105,1047,1,1),
+(1162,3,NULL,'Diagnostics**',NULL,97,98,1161,1,1),
+(1163,3,NULL,'Error-checking**',NULL,99,100,1161,1,1),
+(1164,3,NULL,'Redundant design**',NULL,101,102,1161,1,1),
+(1165,3,NULL,'Test generation**',NULL,103,104,1161,1,1),
+(1166,3,'B.2.4','High-Speed Arithmetic (NEW)','B.2.4',106,111,1047,1,1),
+(1167,3,NULL,'Algorithms (NEW)',NULL,107,108,1166,1,1),
+(1168,3,NULL,'Cost/performance (NEW)',NULL,109,110,1166,1,1),
+(1169,3,'B.2.m','Miscellaneous','B.2.m',112,113,1047,1,1),
+(1170,3,'B.3.0','General','B.3.0',116,117,1048,1,1),
+(1171,3,'B.3.1','Semiconductor Memories (NEW) (B.7.1)','B.3.1',118,125,1048,1,1),
+(1172,3,NULL,'Dynamic memory (DRAM) (NEW)',NULL,119,120,1171,1,1),
+(1173,3,NULL,'Read-only memory (ROM) (NEW)',NULL,121,122,1171,1,1),
+(1174,3,NULL,'Static memory (SRAM) (NEW)',NULL,123,124,1171,1,1),
+(1175,3,'B.3.2','Design Styles (D.4.2)','B.3.2',126,143,1048,1,1),
+(1176,3,NULL,'Associative memories',NULL,127,128,1175,1,1),
+(1177,3,NULL,'Cache memories',NULL,129,130,1175,1,1),
+(1178,3,NULL,'Interleaved memories**',NULL,131,132,1175,1,1),
+(1179,3,NULL,'Mass storage (e.g., magnetic, optical, RAID) (REVISED)',NULL,133,134,1175,1,1),
+(1180,3,NULL,'Primary memory',NULL,135,136,1175,1,1),
+(1181,3,NULL,'Sequential-access memory**',NULL,137,138,1175,1,1),
+(1182,3,NULL,'Shared memory',NULL,139,140,1175,1,1),
+(1183,3,NULL,'Virtual memory',NULL,141,142,1175,1,1),
+(1184,3,'B.3.3','Performance Analysis and Design Aids** (B.8, C.4)','B.3.3',144,151,1048,1,1),
+(1185,3,NULL,'Formal models**',NULL,145,146,1184,1,1),
+(1186,3,NULL,'Simulation**',NULL,147,148,1184,1,1),
+(1187,3,NULL,'Worst-case analysis**',NULL,149,150,1184,1,1),
+(1188,3,'B.3.4','Reliability, Testing, and Fault-Tolerance** (B.8)','B.3.4',152,161,1048,1,1),
+(1189,3,NULL,'Diagnostics**',NULL,153,154,1188,1,1),
+(1190,3,NULL,'Error-checking**',NULL,155,156,1188,1,1),
+(1191,3,NULL,'Redundant design**',NULL,157,158,1188,1,1),
+(1192,3,NULL,'Test generation**',NULL,159,160,1188,1,1),
+(1193,3,'B.3.m','Miscellaneous','B.3.m',162,163,1048,1,1),
+(1194,3,'B.4.0','General','B.4.0',166,167,1049,1,1),
+(1195,3,'B.4.1','Data Communications Devices','B.4.1',168,175,1049,1,1),
+(1196,3,NULL,'Processors**',NULL,169,170,1195,1,1),
+(1197,3,NULL,'Receivers (e.g., voice, data, image)**',NULL,171,172,1195,1,1),
+(1198,3,NULL,'Transmitters**',NULL,173,174,1195,1,1),
+(1199,3,'B.4.2','Input/Output Devices','B.4.2',176,185,1049,1,1),
+(1200,3,NULL,'Channels and controllers',NULL,177,178,1199,1,1),
+(1201,3,NULL,'Data terminals and printers',NULL,179,180,1199,1,1),
+(1202,3,NULL,'Image display',NULL,181,182,1199,1,1),
+(1203,3,NULL,'Voice',NULL,183,184,1199,1,1),
+(1204,3,'B.4.3','Interconnections (Subsystems)','B.4.3',186,199,1049,1,1),
+(1205,3,NULL,'Asynchronous/synchronous operation',NULL,187,188,1204,1,1),
+(1206,3,NULL,'Fiber optics',NULL,189,190,1204,1,1),
+(1207,3,NULL,'Interfaces',NULL,191,192,1204,1,1),
+(1208,3,NULL,'Parallel I/O (NEW)',NULL,193,194,1204,1,1),
+(1209,3,NULL,'Physical structures (e.g., backplanes, cables, chip carriers)**',NULL,195,196,1204,1,1),
+(1210,3,NULL,'Topology (e.g., bus, point-to-point)',NULL,197,198,1204,1,1),
+(1211,3,'B.4.4','Performance Analysis and Design Aids** (B.8)','B.4.4',200,209,1049,1,1),
+(1212,3,NULL,'Formal models**',NULL,201,202,1211,1,1),
+(1213,3,NULL,'Simulation**',NULL,203,204,1211,1,1),
+(1214,3,NULL,'Verification**',NULL,205,206,1211,1,1),
+(1215,3,NULL,'Worst-case analysis**',NULL,207,208,1211,1,1),
+(1216,3,'B.4.5','Reliability, Testing, and Fault-Tolerance** (B.8)','B.4.5',210,223,1049,1,1),
+(1217,3,NULL,'Built-in tests**',NULL,211,212,1216,1,1),
+(1218,3,NULL,'Diagnostics**',NULL,213,214,1216,1,1),
+(1219,3,NULL,'Error-checking**',NULL,215,216,1216,1,1),
+(1220,3,NULL,'Hardware reliability**',NULL,217,218,1216,1,1),
+(1221,3,NULL,'Redundant design**',NULL,219,220,1216,1,1),
+(1222,3,NULL,'Test generation**',NULL,221,222,1216,1,1),
+(1223,3,'B.4.m','Miscellaneous','B.4.m',224,225,1049,1,1),
+(1224,3,'B.5.0','General','B.5.0',228,229,1050,1,1),
+(1225,3,'B.5.1','Design','B.5.1',230,241,1050,1,1),
+(1226,3,NULL,'Arithmetic and logic units',NULL,231,232,1225,1,1),
+(1227,3,NULL,'Control design',NULL,233,234,1225,1,1),
+(1228,3,NULL,'Data-path design',NULL,235,236,1225,1,1),
+(1229,3,NULL,'Memory design',NULL,237,238,1225,1,1),
+(1230,3,NULL,'Styles (e.g., parallel, pipeline, special-purpose)',NULL,239,240,1225,1,1),
+(1231,3,'B.5.2','Design Aids','B.5.2',242,253,1050,1,1),
+(1232,3,NULL,'Automatic synthesis',NULL,243,244,1231,1,1),
+(1233,3,NULL,'Hardware description languages',NULL,245,246,1231,1,1),
+(1234,3,NULL,'Optimization',NULL,247,248,1231,1,1),
+(1235,3,NULL,'Simulation',NULL,249,250,1231,1,1),
+(1236,3,NULL,'Verification',NULL,251,252,1231,1,1),
+(1237,3,'B.5.3','Reliability and Testing** (B.8)','B.5.3',254,265,1050,1,1),
+(1238,3,NULL,'Built-in tests**',NULL,255,256,1237,1,1),
+(1239,3,NULL,'Error-checking**',NULL,257,258,1237,1,1),
+(1240,3,NULL,'Redundant design**',NULL,259,260,1237,1,1),
+(1241,3,NULL,'Test generation**',NULL,261,262,1237,1,1),
+(1242,3,NULL,'Testability**',NULL,263,264,1237,1,1),
+(1243,3,'B.5.m','Miscellaneous','B.5.m',266,267,1050,1,1),
+(1244,3,'B.6.0','General','B.6.0',270,271,1051,1,1),
+(1245,3,'B.6.1','Design Styles','B.6.1',272,287,1051,1,1),
+(1246,3,NULL,'Cellular arrays and automata',NULL,273,274,1245,1,1),
+(1247,3,NULL,'Combinational logic',NULL,275,276,1245,1,1),
+(1248,3,NULL,'Logic arrays',NULL,277,278,1245,1,1),
+(1249,3,NULL,'Memory control and access**',NULL,279,280,1245,1,1),
+(1250,3,NULL,'Memory used as logic**',NULL,281,282,1245,1,1),
+(1251,3,NULL,'Parallel circuits',NULL,283,284,1245,1,1),
+(1252,3,NULL,'Sequential circuits',NULL,285,286,1245,1,1),
+(1253,3,'B.6.2','Reliability and Testing** (B.8)','B.6.2',288,299,1051,1,1),
+(1254,3,NULL,'Built-in tests**',NULL,289,290,1253,1,1),
+(1255,3,NULL,'Error-checking**',NULL,291,292,1253,1,1),
+(1256,3,NULL,'Redundant design**',NULL,293,294,1253,1,1),
+(1257,3,NULL,'Test generation**',NULL,295,296,1253,1,1),
+(1258,3,NULL,'Testability**',NULL,297,298,1253,1,1),
+(1259,3,'B.6.3','Design Aids','B.6.3',300,313,1051,1,1),
+(1260,3,NULL,'Automatic synthesis',NULL,301,302,1259,1,1),
+(1261,3,NULL,'Hardware description languages',NULL,303,304,1259,1,1),
+(1262,3,NULL,'Optimization',NULL,305,306,1259,1,1),
+(1263,3,NULL,'Simulation',NULL,307,308,1259,1,1),
+(1264,3,NULL,'Switching theory',NULL,309,310,1259,1,1),
+(1265,3,NULL,'Verification',NULL,311,312,1259,1,1),
+(1266,3,'B.6.m','Miscellaneous','B.6.m',314,315,1051,1,1),
+(1267,3,'B.7.0','General','B.7.0',318,319,1052,1,1),
+(1268,3,'B.7.1','Types and Design Styles','B.7.1',320,337,1052,1,1),
+(1269,3,NULL,'Advanced technologies',NULL,321,322,1268,1,1),
+(1270,3,NULL,'Algorithms implemented in hardware',NULL,323,324,1268,1,1),
+(1271,3,NULL,'Gate arrays',NULL,325,326,1268,1,1),
+(1272,3,NULL,'Input/output circuits',NULL,327,328,1268,1,1),
+(1273,3,NULL,'Memory technologies',NULL,329,330,1268,1,1),
+(1274,3,NULL,'Microprocessors and microcomputers',NULL,331,332,1268,1,1),
+(1275,3,NULL,'Standard cells**',NULL,333,334,1268,1,1),
+(1276,3,NULL,'VLSI (very large scale integration)',NULL,335,336,1268,1,1),
+(1277,3,'B.7.2','Design Aids','B.7.2',338,349,1052,1,1),
+(1278,3,NULL,'Graphics',NULL,339,340,1277,1,1),
+(1279,3,NULL,'Layout',NULL,341,342,1277,1,1),
+(1280,3,NULL,'Placement and routing',NULL,343,344,1277,1,1),
+(1281,3,NULL,'Simulation',NULL,345,346,1277,1,1),
+(1282,3,NULL,'Verification',NULL,347,348,1277,1,1),
+(1283,3,'B.7.3','Reliability and Testing** (B.8)','B.7.3',350,361,1052,1,1),
+(1284,3,NULL,'Built-in tests**',NULL,351,352,1283,1,1),
+(1285,3,NULL,'Error-checking**',NULL,353,354,1283,1,1),
+(1286,3,NULL,'Redundant design**',NULL,355,356,1283,1,1),
+(1287,3,NULL,'Test generation**',NULL,357,358,1283,1,1),
+(1288,3,NULL,'Testability**',NULL,359,360,1283,1,1),
+(1289,3,'B.7.m','Miscellaneous','B.7.m',362,363,1052,1,1),
+(1290,3,'B.8.0','General (NEW)','B.8.0',366,367,1053,1,1),
+(1291,3,'B.8.1','Reliability, Testing, and Fault-Tolerance (NEW)','B.8.1',368,369,1053,1,1),
+(1292,3,'B.8.2','Performance Analysis and Design Aids (NEW)','B.8.2',370,371,1053,1,1),
+(1293,3,'B.8.m','Miscellaneous (NEW)','B.8.m',372,373,1053,1,1),
+(1294,3,NULL,'Design management',NULL,376,377,1054,1,1),
+(1295,3,'C.1.0','General','C.1.0',384,385,1056,1,1),
+(1296,3,'C.1.1','Single Data Stream Architectures','C.1.1',386,397,1056,1,1),
+(1297,3,NULL,'Multiple-instruction-stream, single-data-stream processors (MISD)**',NULL,387,388,1296,1,1),
+(1298,3,NULL,'Pipeline processors**',NULL,389,390,1296,1,1),
+(1299,3,NULL,'RISC/CISC, VLIW architectures (NEW)',NULL,391,392,1296,1,1),
+(1300,3,NULL,'Single-instruction-stream, single-data-stream processors (SISD)**',NULL,393,394,1296,1,1),
+(1301,3,NULL,'Von Neumann architectures**',NULL,395,396,1296,1,1),
+(1302,3,'C.1.2','Multiple Data Stream Architectures (Multiprocessors)','C.1.2',398,415,1056,1,1),
+(1303,3,NULL,'Array and vector processors',NULL,399,400,1302,1,1),
+(1304,3,NULL,'Associative processors',NULL,401,402,1302,1,1),
+(1305,3,NULL,'Connection machines',NULL,403,404,1302,1,1),
+(1306,3,NULL,'Interconnection architectures (e.g., common bus, multiport memory, crossbar switch)',NULL,405,406,1302,1,1),
+(1307,3,NULL,'Multiple-instruction-stream, multiple-data-stream processors (MIMD)',NULL,407,408,1302,1,1),
+(1308,3,NULL,'Parallel processors**',NULL,409,410,1302,1,1),
+(1309,3,NULL,'Pipeline processors**',NULL,411,412,1302,1,1),
+(1310,3,NULL,'Single-instruction-stream, multiple-data-stream processors (SIMD)',NULL,413,414,1302,1,1),
+(1311,3,'C.1.3','Other Architecture Styles','C.1.3',416,437,1056,1,1),
+(1312,3,NULL,'Adaptable architectures',NULL,417,418,1311,1,1),
+(1313,3,NULL,'Analog computers (NEW)',NULL,419,420,1311,1,1),
+(1314,3,NULL,'Capability architectures**',NULL,421,422,1311,1,1),
+(1315,3,NULL,'Cellular architecture (e.g., mobile) (REVISED)',NULL,423,424,1311,1,1),
+(1316,3,NULL,'Data-flow architectures',NULL,425,426,1311,1,1),
+(1317,3,NULL,'Heterogeneous (hybrid) systems (NEW)',NULL,427,428,1311,1,1),
+(1318,3,NULL,'High-level language architectures**',NULL,429,430,1311,1,1),
+(1319,3,NULL,'Neural nets',NULL,431,432,1311,1,1),
+(1320,3,NULL,'Pipeline processors (NEW)',NULL,433,434,1311,1,1),
+(1321,3,NULL,'Stack-oriented processors**',NULL,435,436,1311,1,1),
+(1322,3,'C.1.4','Parallel Architectures (NEW)','C.1.4',438,443,1056,1,1),
+(1323,3,NULL,'Distributed architectures (NEW)',NULL,439,440,1322,1,1),
+(1324,3,NULL,'Mobile processors (NEW)',NULL,441,442,1322,1,1),
+(1325,3,'C.1.m','Miscellaneous','C.1.m',444,449,1056,1,1),
+(1326,3,NULL,'Analog computers**',NULL,445,446,1325,1,1),
+(1327,3,NULL,'Hybrid systems**',NULL,447,448,1325,1,1),
+(1328,3,'C.2.0','General','C.2.0',452,459,1057,1,1),
+(1329,3,NULL,'Data communications',NULL,453,454,1328,1,1),
+(1330,3,NULL,'Open Systems Interconnection reference model (OSI)',NULL,455,456,1328,1,1),
+(1331,3,NULL,'Security and protection (e.g., firewalls) (REVISED)',NULL,457,458,1328,1,1),
+(1332,3,'C.2.1','Network Architecture and Design','C.2.1',460,483,1057,1,1),
+(1333,3,NULL,'Asynchronous Transfer Mode (ATM) (NEW)',NULL,461,462,1332,1,1),
+(1334,3,NULL,'Centralized networks**',NULL,463,464,1332,1,1),
+(1335,3,NULL,'Circuit-switching networks',NULL,465,466,1332,1,1),
+(1336,3,NULL,'Distributed networks',NULL,467,468,1332,1,1),
+(1337,3,NULL,'Frame relay networks (NEW)',NULL,469,470,1332,1,1),
+(1338,3,NULL,'ISDN (Integrated Services Digital Network)',NULL,471,472,1332,1,1),
+(1339,3,NULL,'Network communications',NULL,473,474,1332,1,1),
+(1340,3,NULL,'Network topology',NULL,475,476,1332,1,1),
+(1341,3,NULL,'Packet-switching networks (REVISED)',NULL,477,478,1332,1,1),
+(1342,3,NULL,'Store and forward networks',NULL,479,480,1332,1,1),
+(1343,3,NULL,'Wireless communication (NEW)',NULL,481,482,1332,1,1),
+(1344,3,'C.2.2','Network Protocols','C.2.2',484,493,1057,1,1),
+(1345,3,NULL,'Applications (SMTP, FTP, etc.) (NEW)',NULL,485,486,1344,1,1),
+(1346,3,NULL,'Protocol architecture (OSI model) (REVISED)',NULL,487,488,1344,1,1),
+(1347,3,NULL,'Protocol verification',NULL,489,490,1344,1,1),
+(1348,3,NULL,'Routing protocols (NEW)',NULL,491,492,1344,1,1),
+(1349,3,'C.2.3','Network Operations','C.2.3',494,501,1057,1,1),
+(1350,3,NULL,'Network management',NULL,495,496,1349,1,1),
+(1351,3,NULL,'Network monitoring',NULL,497,498,1349,1,1),
+(1352,3,NULL,'Public networks',NULL,499,500,1349,1,1),
+(1353,3,'C.2.4','Distributed Systems','C.2.4',502,511,1057,1,1),
+(1354,3,NULL,'Client/server (NEW)',NULL,503,504,1353,1,1),
+(1355,3,NULL,'Distributed applications',NULL,505,506,1353,1,1),
+(1356,3,NULL,'Distributed databases',NULL,507,508,1353,1,1),
+(1357,3,NULL,'Network operating systems',NULL,509,510,1353,1,1),
+(1358,3,'C.2.5','Local and Wide-Area Networks (REVISED)','C.2.5',512,525,1057,1,1),
+(1359,3,NULL,'Access schemes',NULL,513,514,1358,1,1),
+(1360,3,NULL,'Buses',NULL,515,516,1358,1,1),
+(1361,3,NULL,'Ethernet (e.g., CSMA/CD) (NEW)',NULL,517,518,1358,1,1),
+(1362,3,NULL,'High-speed (e.g., FDDI, fiber channel, ATM) (NEW)',NULL,519,520,1358,1,1),
+(1363,3,NULL,'Internet (e.g., TCP/IP) (NEW)',NULL,521,522,1358,1,1),
+(1364,3,NULL,'Token rings (REVISED)',NULL,523,524,1358,1,1),
+(1365,3,'C.2.6','Internetworking (C.2.2) (NEW)','C.2.6',526,531,1057,1,1),
+(1366,3,NULL,'Routers (NEW)',NULL,527,528,1365,1,1),
+(1367,3,NULL,'Standards (e.g., TCP/IP) (NEW)',NULL,529,530,1365,1,1),
+(1368,3,'C.2.m','Miscellaneous','C.2.m',532,533,1057,1,1),
+(1369,3,'C.5.0','General','C.5.0',540,541,1060,1,1),
+(1370,3,'C.5.1','Large and Medium Mainframe Computers','C.5.1',542,545,1060,1,1),
+(1371,3,NULL,'Super (very large) computers',NULL,543,544,1370,1,1),
+(1372,3,'C.5.2','Minicomputers**','C.5.2',546,547,1060,1,1),
+(1373,3,'C.5.3','Microcomputers','C.5.3',548,557,1060,1,1),
+(1374,3,NULL,'Microprocessors',NULL,549,550,1373,1,1),
+(1375,3,NULL,'Personal computers',NULL,551,552,1373,1,1),
+(1376,3,NULL,'Portable devices (e.g., laptops, personal digital assistants) (NEW)',NULL,553,554,1373,1,1),
+(1377,3,NULL,'Workstations',NULL,555,556,1373,1,1),
+(1378,3,'C.5.4','VLSI Systems','C.5.4',558,559,1060,1,1),
+(1379,3,'C.5.5','Servers (NEW)','C.5.5',560,561,1060,1,1),
+(1380,3,'C.5.m','Miscellaneous','C.5.m',562,563,1060,1,1),
+(1381,3,'D.1.0','General','D.1.0',572,573,1063,1,1),
+(1382,3,'D.1.1','Applicative (Functional) Programming','D.1.1',574,575,1063,1,1),
+(1383,3,'D.1.2','Automatic Programming (I.2.2)','D.1.2',576,577,1063,1,1),
+(1384,3,'D.1.3','Concurrent Programming','D.1.3',578,583,1063,1,1),
+(1385,3,NULL,'Distributed programming',NULL,579,580,1384,1,1),
+(1386,3,NULL,'Parallel programming',NULL,581,582,1384,1,1),
+(1387,3,'D.1.4','Sequential Programming','D.1.4',584,585,1063,1,1),
+(1388,3,'D.1.5','Object-oriented Programming','D.1.5',586,587,1063,1,1),
+(1389,3,'D.1.6','Logic Programming','D.1.6',588,589,1063,1,1),
+(1390,3,'D.1.7','Visual Programming','D.1.7',590,591,1063,1,1),
+(1391,3,'D.1.m','Miscellaneous','D.1.m',592,593,1063,1,1),
+(1392,3,'D.2.0','General (K.5.1)','D.2.0',596,601,1064,1,1),
+(1393,3,NULL,'Protection mechanisms',NULL,597,598,1392,1,1),
+(1394,3,NULL,'Standards',NULL,599,600,1392,1,1),
+(1395,3,'D.2.1','Requirements/Specifications (D.3.1)','D.2.1',602,611,1064,1,1),
+(1396,3,NULL,'Elicitation methods (e.g., rapid prototyping, interviews, JAD) (NEW)',NULL,603,604,1395,1,1),
+(1397,3,NULL,'Languages',NULL,605,606,1395,1,1),
+(1398,3,NULL,'Methodologies (e.g., object-oriented, structured) (REVISED)',NULL,607,608,1395,1,1),
+(1399,3,NULL,'Tools',NULL,609,610,1395,1,1),
+(1400,3,'D.2.2','Design Tools and Techniques (REVISED)','D.2.2',612,639,1064,1,1),
+(1401,3,NULL,'Computer-aided software engineering (CASE)',NULL,613,614,1400,1,1),
+(1402,3,NULL,'Decision tables',NULL,615,616,1400,1,1),
+(1403,3,NULL,'Evolutionary prototyping (NEW)',NULL,617,618,1400,1,1),
+(1404,3,NULL,'Flow charts',NULL,619,620,1400,1,1),
+(1405,3,NULL,'Modules and interfaces',NULL,621,622,1400,1,1),
+(1406,3,NULL,'Object-oriented design methods (NEW)',NULL,623,624,1400,1,1),
+(1407,3,NULL,'Petri nets',NULL,625,626,1400,1,1),
+(1408,3,NULL,'Programmer workbench**',NULL,627,628,1400,1,1),
+(1409,3,NULL,'Software libraries',NULL,629,630,1400,1,1),
+(1410,3,NULL,'State diagrams (NEW)',NULL,631,632,1400,1,1),
+(1411,3,NULL,'Structured programming**',NULL,633,634,1400,1,1),
+(1412,3,NULL,'Top-down programming**',NULL,635,636,1400,1,1),
+(1413,3,NULL,'User interfaces',NULL,637,638,1400,1,1),
+(1414,3,'D.2.3','Coding Tools and Techniques (REVISED)','D.2.3',640,655,1064,1,1),
+(1415,3,NULL,'Object-oriented programming (NEW)',NULL,641,642,1414,1,1),
+(1416,3,NULL,'Pretty printers',NULL,643,644,1414,1,1),
+(1417,3,NULL,'Program editors',NULL,645,646,1414,1,1),
+(1418,3,NULL,'Reentrant code**',NULL,647,648,1414,1,1),
+(1419,3,NULL,'Standards',NULL,649,650,1414,1,1),
+(1420,3,NULL,'Structured programming (NEW)',NULL,651,652,1414,1,1),
+(1421,3,NULL,'Top-down programming (NEW)',NULL,653,654,1414,1,1),
+(1422,3,'D.2.4','Software/Program Verification (F.3.1) (REVISED)','D.2.4',656,675,1064,1,1),
+(1423,3,NULL,'Assertion checkers',NULL,657,658,1422,1,1),
+(1424,3,NULL,'Class invariants (NEW)',NULL,659,660,1422,1,1),
+(1425,3,NULL,'Correctness proofs',NULL,661,662,1422,1,1),
+(1426,3,NULL,'Formal methods (NEW)',NULL,663,664,1422,1,1),
+(1427,3,NULL,'Model checking (NEW)',NULL,665,666,1422,1,1),
+(1428,3,NULL,'Programming by contract (NEW)',NULL,667,668,1422,1,1),
+(1429,3,NULL,'Reliability',NULL,669,670,1422,1,1),
+(1430,3,NULL,'Statistical methods (NEW)',NULL,671,672,1422,1,1),
+(1431,3,NULL,'Validation',NULL,673,674,1422,1,1),
+(1432,3,'D.2.5','Testing and Debugging','D.2.5',676,697,1064,1,1),
+(1433,3,NULL,'Code inspections and walk-throughs',NULL,677,678,1432,1,1),
+(1434,3,NULL,'Debugging aids',NULL,679,680,1432,1,1),
+(1435,3,NULL,'Diagnostics',NULL,681,682,1432,1,1),
+(1436,3,NULL,'Distributed debugging (NEW)',NULL,683,684,1432,1,1),
+(1437,3,NULL,'Dumps**',NULL,685,686,1432,1,1),
+(1438,3,NULL,'Error handling and recovery',NULL,687,688,1432,1,1),
+(1439,3,NULL,'Monitors',NULL,689,690,1432,1,1),
+(1440,3,NULL,'Symbolic execution',NULL,691,692,1432,1,1),
+(1441,3,NULL,'Testing tools (e.g., data generators, coverage testing) (REVISED)',NULL,693,694,1432,1,1),
+(1442,3,NULL,'Tracing',NULL,695,696,1432,1,1),
+(1443,3,'D.2.6','Programming Environments','D.2.6',698,707,1064,1,1),
+(1444,3,NULL,'Graphical environments (NEW)',NULL,699,700,1443,1,1),
+(1445,3,NULL,'Integrated environments (NEW)',NULL,701,702,1443,1,1),
+(1446,3,NULL,'Interactive environments (REVISED)',NULL,703,704,1443,1,1),
+(1447,3,NULL,'Programmer workbench (NEW)',NULL,705,706,1443,1,1),
+(1448,3,'D.2.7','Distribution, Maintenance, and Enhancement (REVISED)','D.2.7',708,723,1064,1,1),
+(1449,3,NULL,'Corrections**',NULL,709,710,1448,1,1),
+(1450,3,NULL,'Documentation',NULL,711,712,1448,1,1),
+(1451,3,NULL,'Enhancement**',NULL,713,714,1448,1,1),
+(1452,3,NULL,'Extensibility**',NULL,715,716,1448,1,1),
+(1453,3,NULL,'Portability',NULL,717,718,1448,1,1),
+(1454,3,NULL,'Restructuring, reverse engineering, and reengineering (REVISED)',NULL,719,720,1448,1,1),
+(1455,3,NULL,'Version control',NULL,721,722,1448,1,1),
+(1456,3,'D.2.8','Metrics (D.4.8)','D.2.8',724,735,1064,1,1),
+(1457,3,NULL,'Complexity measures',NULL,725,726,1456,1,1),
+(1458,3,NULL,'Performance measures',NULL,727,728,1456,1,1),
+(1459,3,NULL,'Process metrics (NEW)',NULL,729,730,1456,1,1),
+(1460,3,NULL,'Product metrics (NEW)',NULL,731,732,1456,1,1),
+(1461,3,NULL,'Software science**',NULL,733,734,1456,1,1),
+(1462,3,'D.2.9','Management (K.6.3, K.6.4)','D.2.9',736,755,1064,1,1),
+(1463,3,NULL,'Copyrights**',NULL,737,738,1462,1,1),
+(1464,3,NULL,'Cost estimation',NULL,739,740,1462,1,1),
+(1465,3,NULL,'Life cycle',NULL,741,742,1462,1,1),
+(1466,3,NULL,'Productivity',NULL,743,744,1462,1,1),
+(1467,3,NULL,'Programming teams',NULL,745,746,1462,1,1),
+(1468,3,NULL,'Software configuration management',NULL,747,748,1462,1,1),
+(1469,3,NULL,'Software process models (e.g., CMM, ISO, PSP) (NEW)',NULL,749,750,1462,1,1),
+(1470,3,NULL,'Software quality assurance (SQA)',NULL,751,752,1462,1,1),
+(1471,3,NULL,'Time estimation',NULL,753,754,1462,1,1),
+(1472,3,'D.2.10','Design** (D.2.2)','D.2.10',756,761,1064,1,1),
+(1473,3,NULL,'Methodologies**',NULL,757,758,1472,1,1),
+(1474,3,NULL,'Representation**',NULL,759,760,1472,1,1),
+(1475,3,'D.2.11','Software Architectures (NEW)','D.2.11',762,773,1064,1,1),
+(1476,3,NULL,'Data abstraction (NEW)',NULL,763,764,1475,1,1),
+(1477,3,NULL,'Domain-specific architectures (NEW)',NULL,765,766,1475,1,1),
+(1478,3,NULL,'Information hiding (NEW)',NULL,767,768,1475,1,1),
+(1479,3,NULL,'Languages (e.g., description, interconnection, definition) (NEW)',NULL,769,770,1475,1,1),
+(1480,3,NULL,'Patterns (e.g., client/server, pipeline, blackboard) (NEW)',NULL,771,772,1475,1,1),
+(1481,3,'D.2.12','Interoperability (NEW)','D.2.12',774,781,1064,1,1),
+(1482,3,NULL,'Data mapping (NEW)',NULL,775,776,1481,1,1),
+(1483,3,NULL,'Distributed objects (NEW)',NULL,777,778,1481,1,1),
+(1484,3,NULL,'Interface definition languages (NEW)',NULL,779,780,1481,1,1),
+(1485,3,'D.2.13','Reusable Software (NEW)','D.2.13',782,789,1064,1,1),
+(1486,3,NULL,'Domain engineering (NEW)',NULL,783,784,1485,1,1),
+(1487,3,NULL,'Reusable libraries (NEW)',NULL,785,786,1485,1,1),
+(1488,3,NULL,'Reuse models (NEW)',NULL,787,788,1485,1,1),
+(1489,3,'D.2.m','Miscellaneous','D.2.m',790,795,1064,1,1),
+(1490,3,NULL,'Rapid prototyping**',NULL,791,792,1489,1,1),
+(1491,3,NULL,'Reusable software**',NULL,793,794,1489,1,1),
+(1492,3,'D.3.0','General','D.3.0',798,801,1065,1,1),
+(1493,3,NULL,'Standards',NULL,799,800,1492,1,1),
+(1494,3,'D.3.1','Formal Definitions and Theory (D.2.1, F.3.1-2, F.4.2-3)','D.3.1',802,807,1065,1,1),
+(1495,3,NULL,'Semantics',NULL,803,804,1494,1,1),
+(1496,3,NULL,'Syntax',NULL,805,806,1494,1,1),
+(1497,3,'D.3.2','Language Classifications','D.3.2',808,837,1065,1,1),
+(1498,3,NULL,'Applicative (functional) languages (REVISED)',NULL,809,810,1497,1,1),
+(1499,3,NULL,'Concurrent, distributed, and parallel languages',NULL,811,812,1497,1,1),
+(1500,3,NULL,'Constraint and logic languages (NEW)',NULL,813,814,1497,1,1),
+(1501,3,NULL,'Data-flow languages',NULL,815,816,1497,1,1),
+(1502,3,NULL,'Design languages',NULL,817,818,1497,1,1),
+(1503,3,NULL,'Extensible languages',NULL,819,820,1497,1,1),
+(1504,3,NULL,'Macro and assembly languages',NULL,821,822,1497,1,1),
+(1505,3,NULL,'Microprogramming languages**',NULL,823,824,1497,1,1),
+(1506,3,NULL,'Multiparadigm languages (NEW)',NULL,825,826,1497,1,1),
+(1507,3,NULL,'Nondeterministic languages**',NULL,827,828,1497,1,1),
+(1508,3,NULL,'Nonprocedural languages**',NULL,829,830,1497,1,1),
+(1509,3,NULL,'Object-oriented languages',NULL,831,832,1497,1,1),
+(1510,3,NULL,'Specialized application languages',NULL,833,834,1497,1,1),
+(1511,3,NULL,'Very high-level languages',NULL,835,836,1497,1,1),
+(1512,3,'D.3.3','Language Constructs and Features (E.2)','D.3.3',838,871,1065,1,1),
+(1513,3,NULL,'Abstract data types',NULL,839,840,1512,1,1),
+(1514,3,NULL,'Classes and objects (NEW)',NULL,841,842,1512,1,1),
+(1515,3,NULL,'Concurrent programming structures',NULL,843,844,1512,1,1),
+(1516,3,NULL,'Constraints (NEW)',NULL,845,846,1512,1,1),
+(1517,3,NULL,'Control structures',NULL,847,848,1512,1,1),
+(1518,3,NULL,'Coroutines',NULL,849,850,1512,1,1),
+(1519,3,NULL,'Data types and structures',NULL,851,852,1512,1,1),
+(1520,3,NULL,'Dynamic storage management',NULL,853,854,1512,1,1),
+(1521,3,NULL,'Frameworks (NEW)',NULL,855,856,1512,1,1),
+(1522,3,NULL,'Inheritance (NEW)',NULL,857,858,1512,1,1),
+(1523,3,NULL,'Input/output',NULL,859,860,1512,1,1),
+(1524,3,NULL,'Modules, packages',NULL,861,862,1512,1,1),
+(1525,3,NULL,'Patterns (NEW)',NULL,863,864,1512,1,1),
+(1526,3,NULL,'Polymorphism (NEW)',NULL,865,866,1512,1,1),
+(1527,3,NULL,'Procedures, functions, and subroutines',NULL,867,868,1512,1,1),
+(1528,3,NULL,'Recursion',NULL,869,870,1512,1,1),
+(1529,3,'D.3.4','Processors','D.3.4',872,897,1065,1,1),
+(1530,3,NULL,'Code generation',NULL,873,874,1529,1,1),
+(1531,3,NULL,'Compilers',NULL,875,876,1529,1,1),
+(1532,3,NULL,'Debuggers (NEW)',NULL,877,878,1529,1,1),
+(1533,3,NULL,'Incremental compilers (NEW)',NULL,879,880,1529,1,1),
+(1534,3,NULL,'Interpreters',NULL,881,882,1529,1,1),
+(1535,3,NULL,'Memory management (garbage collection) (NEW)',NULL,883,884,1529,1,1),
+(1536,3,NULL,'Optimization',NULL,885,886,1529,1,1),
+(1537,3,NULL,'Parsing',NULL,887,888,1529,1,1),
+(1538,3,NULL,'Preprocessors',NULL,889,890,1529,1,1),
+(1539,3,NULL,'Retargetable compilers (NEW)',NULL,891,892,1529,1,1),
+(1540,3,NULL,'Run-time environments',NULL,893,894,1529,1,1),
+(1541,3,NULL,'Translator writing systems and compiler generators',NULL,895,896,1529,1,1),
+(1542,3,'D.3.m','Miscellaneous','D.3.m',898,899,1065,1,1),
+(1543,3,'D.4.0','General','D.4.0',902,903,1066,1,1),
+(1544,3,'D.4.1','Process Management','D.4.1',904,919,1066,1,1),
+(1545,3,NULL,'Concurrency',NULL,905,906,1544,1,1),
+(1546,3,NULL,'Deadlocks',NULL,907,908,1544,1,1),
+(1547,3,NULL,'Multiprocessing/multiprogramming/multitasking (REVISED)',NULL,909,910,1544,1,1),
+(1548,3,NULL,'Mutual exclusion',NULL,911,912,1544,1,1),
+(1549,3,NULL,'Scheduling',NULL,913,914,1544,1,1),
+(1550,3,NULL,'Synchronization',NULL,915,916,1544,1,1),
+(1551,3,NULL,'Threads (NEW)',NULL,917,918,1544,1,1),
+(1552,3,'D.4.2','Storage Management','D.4.2',920,939,1066,1,1),
+(1553,3,NULL,'Allocation/deallocation strategies',NULL,921,922,1552,1,1),
+(1554,3,NULL,'Distributed memories',NULL,923,924,1552,1,1),
+(1555,3,NULL,'Garbage collection (NEW)',NULL,925,926,1552,1,1),
+(1556,3,NULL,'Main memory',NULL,927,928,1552,1,1),
+(1557,3,NULL,'Secondary storage',NULL,929,930,1552,1,1),
+(1558,3,NULL,'Segmentation**',NULL,931,932,1552,1,1),
+(1559,3,NULL,'Storage hierarchies',NULL,933,934,1552,1,1),
+(1560,3,NULL,'Swapping**',NULL,935,936,1552,1,1),
+(1561,3,NULL,'Virtual memory',NULL,937,938,1552,1,1),
+(1562,3,'D.4.3','File Systems Management (E.5)','D.4.3',940,951,1066,1,1),
+(1563,3,NULL,'Access methods',NULL,941,942,1562,1,1),
+(1564,3,NULL,'Directory structures',NULL,943,944,1562,1,1),
+(1565,3,NULL,'Distributed file systems',NULL,945,946,1562,1,1),
+(1566,3,NULL,'File organization',NULL,947,948,1562,1,1),
+(1567,3,NULL,'Maintenance**',NULL,949,950,1562,1,1),
+(1568,3,'D.4.4','Communications Management (C.2)','D.4.4',952,963,1066,1,1),
+(1569,3,NULL,'Buffering',NULL,953,954,1568,1,1),
+(1570,3,NULL,'Input/output',NULL,955,956,1568,1,1),
+(1571,3,NULL,'Message sending',NULL,957,958,1568,1,1),
+(1572,3,NULL,'Network communication',NULL,959,960,1568,1,1),
+(1573,3,NULL,'Terminal management**',NULL,961,962,1568,1,1),
+(1574,3,'D.4.5','Reliability','D.4.5',964,973,1066,1,1),
+(1575,3,NULL,'Backup procedures',NULL,965,966,1574,1,1),
+(1576,3,NULL,'Checkpoint/restart',NULL,967,968,1574,1,1),
+(1577,3,NULL,'Fault-tolerance',NULL,969,970,1574,1,1),
+(1578,3,NULL,'Verification',NULL,971,972,1574,1,1),
+(1579,3,'D.4.6','Security and Protection (K.6.5)','D.4.6',974,989,1066,1,1),
+(1580,3,NULL,'Access controls',NULL,975,976,1579,1,1),
+(1581,3,NULL,'Authentication',NULL,977,978,1579,1,1),
+(1582,3,NULL,'Cryptographic controls',NULL,979,980,1579,1,1),
+(1583,3,NULL,'Information flow controls',NULL,981,982,1579,1,1),
+(1584,3,NULL,'Invasive software (e.g., viruses, worms, Trojan horses)',NULL,983,984,1579,1,1),
+(1585,3,NULL,'Security kernels**',NULL,985,986,1579,1,1),
+(1586,3,NULL,'Verification**',NULL,987,988,1579,1,1),
+(1587,3,'D.4.7','Organization and Design','D.4.7',990,1001,1066,1,1),
+(1588,3,NULL,'Batch processing systems**',NULL,991,992,1587,1,1),
+(1589,3,NULL,'Distributed systems',NULL,993,994,1587,1,1),
+(1590,3,NULL,'Hierarchical design**',NULL,995,996,1587,1,1),
+(1591,3,NULL,'Interactive systems',NULL,997,998,1587,1,1),
+(1592,3,NULL,'Real-time systems and embedded systems',NULL,999,1000,1587,1,1),
+(1593,3,'D.4.8','Performance (C.4, D.2.8, I.6)','D.4.8',1002,1017,1066,1,1),
+(1594,3,NULL,'Measurements',NULL,1003,1004,1593,1,1),
+(1595,3,NULL,'Modeling and prediction',NULL,1005,1006,1593,1,1),
+(1596,3,NULL,'Monitors',NULL,1007,1008,1593,1,1),
+(1597,3,NULL,'Operational analysis',NULL,1009,1010,1593,1,1),
+(1598,3,NULL,'Queueing theory',NULL,1011,1012,1593,1,1),
+(1599,3,NULL,'Simulation',NULL,1013,1014,1593,1,1),
+(1600,3,NULL,'Stochastic analysis',NULL,1015,1016,1593,1,1),
+(1601,3,'D.4.9','Systems Programs and Utilities','D.4.9',1018,1027,1066,1,1),
+(1602,3,NULL,'Command and control languages',NULL,1019,1020,1601,1,1),
+(1603,3,NULL,'Linkers**',NULL,1021,1022,1601,1,1),
+(1604,3,NULL,'Loaders**',NULL,1023,1024,1601,1,1),
+(1605,3,NULL,'Window managers',NULL,1025,1026,1601,1,1),
+(1606,3,'D.4.m','Miscellaneous','D.4.m',1028,1029,1066,1,1),
+(1607,3,NULL,'Software psychology**',NULL,1032,1033,1067,1,1),
+(1608,3,NULL,'Arrays',NULL,1040,1041,1069,1,1),
+(1609,3,NULL,'Distributed data structures (NEW)',NULL,1042,1043,1069,1,1),
+(1610,3,NULL,'Graphs and networks (REVISED)',NULL,1044,1045,1069,1,1),
+(1611,3,NULL,'Lists, stacks, and queues (REVISED)',NULL,1046,1047,1069,1,1),
+(1612,3,NULL,'Records (NEW)',NULL,1048,1049,1069,1,1),
+(1613,3,NULL,'Tables**',NULL,1050,1051,1069,1,1),
+(1614,3,NULL,'Trees',NULL,1052,1053,1069,1,1),
+(1615,3,NULL,'Composite structures**',NULL,1056,1057,1070,1,1),
+(1616,3,NULL,'Contiguous representations**',NULL,1058,1059,1070,1,1),
+(1617,3,NULL,'Hash-table representations',NULL,1060,1061,1070,1,1),
+(1618,3,NULL,'Linked representations',NULL,1062,1063,1070,1,1),
+(1619,3,NULL,'Object representation (NEW)',NULL,1064,1065,1070,1,1),
+(1620,3,NULL,'Primitive data items**',NULL,1066,1067,1070,1,1),
+(1621,3,NULL,'Code breaking (NEW)',NULL,1070,1071,1071,1,1),
+(1622,3,NULL,'Data encryption standard (DES)**',NULL,1072,1073,1071,1,1),
+(1623,3,NULL,'Public key cryptosystems',NULL,1074,1075,1071,1,1),
+(1624,3,NULL,'Standards (e.g., DES, PGP, RSA) (NEW)',NULL,1076,1077,1071,1,1),
+(1625,3,NULL,'Data compaction and compression',NULL,1080,1081,1072,1,1),
+(1626,3,NULL,'Error control codes',NULL,1082,1083,1072,1,1),
+(1627,3,NULL,'Formal models of communication',NULL,1084,1085,1072,1,1),
+(1628,3,NULL,'Nonsecret encoding schemes**',NULL,1086,1087,1072,1,1),
+(1629,3,NULL,'Backup/recovery',NULL,1090,1091,1073,1,1),
+(1630,3,NULL,'Optimization**',NULL,1092,1093,1073,1,1),
+(1631,3,NULL,'Organization/structure',NULL,1094,1095,1073,1,1),
+(1632,3,NULL,'Sorting/searching',NULL,1096,1097,1073,1,1),
+(1633,3,'F.1.0','General','F.1.0',1106,1107,1076,1,1),
+(1634,3,'F.1.1','Models of Computation (F.4.1)','F.1.1',1108,1121,1076,1,1),
+(1635,3,NULL,'Automata (e.g., finite, push-down, resource-bounded)',NULL,1109,1110,1634,1,1),
+(1636,3,NULL,'Bounded-action devices (e.g., Turing machines, random access machines)',NULL,1111,1112,1634,1,1),
+(1637,3,NULL,'Computability theory',NULL,1113,1114,1634,1,1),
+(1638,3,NULL,'Relations between models',NULL,1115,1116,1634,1,1),
+(1639,3,NULL,'Self-modifying machines (e.g., neural networks)',NULL,1117,1118,1634,1,1),
+(1640,3,NULL,'Unbounded-action devices (e.g., cellular automata, circuits, networks of machines)',NULL,1119,1120,1634,1,1),
+(1641,3,'F.1.2','Modes of Computation','F.1.2',1122,1137,1076,1,1),
+(1642,3,NULL,'Alternation and nondeterminism',NULL,1123,1124,1641,1,1),
+(1643,3,NULL,'Interactive and reactive computation (REVISED)',NULL,1125,1126,1641,1,1),
+(1644,3,NULL,'Online computation',NULL,1127,1128,1641,1,1),
+(1645,3,NULL,'Parallelism and concurrency',NULL,1129,1130,1641,1,1),
+(1646,3,NULL,'Probabilistic computation',NULL,1131,1132,1641,1,1),
+(1647,3,NULL,'Relations among modes**',NULL,1133,1134,1641,1,1),
+(1648,3,NULL,'Relativized computation',NULL,1135,1136,1641,1,1),
+(1649,3,'F.1.3','Complexity Measures and Classes (F.2) (REVISED)','F.1.3',1138,1149,1076,1,1),
+(1650,3,NULL,'Complexity hierarchies',NULL,1139,1140,1649,1,1),
+(1651,3,NULL,'Machine-independent complexity**',NULL,1141,1142,1649,1,1),
+(1652,3,NULL,'Reducibility and completeness',NULL,1143,1144,1649,1,1),
+(1653,3,NULL,'Relations among complexity classes',NULL,1145,1146,1649,1,1),
+(1654,3,NULL,'Relations among complexity measures',NULL,1147,1148,1649,1,1),
+(1655,3,'F.1.m','Miscellaneous','F.1.m',1150,1151,1076,1,1),
+(1656,3,'F.2.0','General','F.2.0',1154,1155,1077,1,1),
+(1657,3,'F.2.1','Numerical Algorithms and Problems (G.1, G.4, I.1)','F.2.1',1156,1167,1077,1,1),
+(1658,3,NULL,'Computation of transforms (e.g., fast Fourier transform)',NULL,1157,1158,1657,1,1),
+(1659,3,NULL,'Computations in finite fields',NULL,1159,1160,1657,1,1),
+(1660,3,NULL,'Computations on matrices',NULL,1161,1162,1657,1,1),
+(1661,3,NULL,'Computations on polynomials',NULL,1163,1164,1657,1,1),
+(1662,3,NULL,'Number-theoretic computations (e.g., factoring, primality testing)',NULL,1165,1166,1657,1,1),
+(1663,3,'F.2.2','Nonnumerical Algorithms and Problems (E.2-5, G.2, H.2-3)','F.2.2',1168,1183,1077,1,1),
+(1664,3,NULL,'Complexity of proof procedures',NULL,1169,1170,1663,1,1),
+(1665,3,NULL,'Computations on discrete structures',NULL,1171,1172,1663,1,1),
+(1666,3,NULL,'Geometrical problems and computations',NULL,1173,1174,1663,1,1),
+(1667,3,NULL,'Pattern matching',NULL,1175,1176,1663,1,1),
+(1668,3,NULL,'Routing and layout',NULL,1177,1178,1663,1,1),
+(1669,3,NULL,'Sequencing and scheduling',NULL,1179,1180,1663,1,1),
+(1670,3,NULL,'Sorting and searching',NULL,1181,1182,1663,1,1),
+(1671,3,'F.2.3','Tradeoffs between Complexity Measures (F.1.3)','F.2.3',1184,1185,1077,1,1),
+(1672,3,'F.2.m','Miscellaneous','F.2.m',1186,1187,1077,1,1),
+(1673,3,'F.3.0','General','F.3.0',1190,1191,1078,1,1),
+(1674,3,'F.3.1','Specifying and Verifying and Reasoning about Programs (D.2.1, D.2.4, D.3.1, E.1)','F.3.1',1192,1205,1078,1,1),
+(1675,3,NULL,'Assertions',NULL,1193,1194,1674,1,1),
+(1676,3,NULL,'Invariants',NULL,1195,1196,1674,1,1),
+(1677,3,NULL,'Logics of programs',NULL,1197,1198,1674,1,1),
+(1678,3,NULL,'Mechanical verification',NULL,1199,1200,1674,1,1),
+(1679,3,NULL,'Pre- and post-conditions',NULL,1201,1202,1674,1,1),
+(1680,3,NULL,'Specification techniques',NULL,1203,1204,1674,1,1),
+(1681,3,'F.3.2','Semantics of Programming Languages (D.3.1)','F.3.2',1206,1219,1078,1,1),
+(1682,3,NULL,'Algebraic approaches to semantics',NULL,1207,1208,1681,1,1),
+(1683,3,NULL,'Denotational semantics',NULL,1209,1210,1681,1,1),
+(1684,3,NULL,'Operational semantics',NULL,1211,1212,1681,1,1),
+(1685,3,NULL,'Partial evaluation (NEW)',NULL,1213,1214,1681,1,1),
+(1686,3,NULL,'Process models (NEW)',NULL,1215,1216,1681,1,1),
+(1687,3,NULL,'Program analysis (NEW)',NULL,1217,1218,1681,1,1),
+(1688,3,'F.3.3','Studies of Program Constructs (D.3.2-3)','F.3.3',1220,1231,1078,1,1),
+(1689,3,NULL,'Control primitives',NULL,1221,1222,1688,1,1),
+(1690,3,NULL,'Functional constructs',NULL,1223,1224,1688,1,1),
+(1691,3,NULL,'Object-oriented constructs (NEW)',NULL,1225,1226,1688,1,1),
+(1692,3,NULL,'Program and recursion schemes',NULL,1227,1228,1688,1,1),
+(1693,3,NULL,'Type structure',NULL,1229,1230,1688,1,1),
+(1694,3,'F.3.m','Miscellaneous','F.3.m',1232,1233,1078,1,1),
+(1695,3,'F.4.0','General','F.4.0',1236,1237,1079,1,1),
+(1696,3,'F.4.1','Mathematical Logic (F.1.1, I.2.2-4)','F.4.1',1238,1261,1079,1,1),
+(1697,3,NULL,'Computability theory',NULL,1239,1240,1696,1,1),
+(1698,3,NULL,'Computational logic',NULL,1241,1242,1696,1,1),
+(1699,3,NULL,'Lambda calculus and related systems',NULL,1243,1244,1696,1,1),
+(1700,3,NULL,'Logic and constraint programming (REVISED)',NULL,1245,1246,1696,1,1),
+(1701,3,NULL,'Mechanical theorem proving',NULL,1247,1248,1696,1,1),
+(1702,3,NULL,'Modal logic (NEW)',NULL,1249,1250,1696,1,1),
+(1703,3,NULL,'Model theory',NULL,1251,1252,1696,1,1),
+(1704,3,NULL,'Proof theory',NULL,1253,1254,1696,1,1),
+(1705,3,NULL,'Recursive function theory',NULL,1255,1256,1696,1,1),
+(1706,3,NULL,'Set theory (NEW)',NULL,1257,1258,1696,1,1),
+(1707,3,NULL,'Temporal logic (NEW)',NULL,1259,1260,1696,1,1),
+(1708,3,'F.4.2','Grammars and Other Rewriting Systems (D.3.1)','F.4.2',1262,1273,1079,1,1),
+(1709,3,NULL,'Decision problems',NULL,1263,1264,1708,1,1),
+(1710,3,NULL,'Grammar types (e.g., context-free, context-sensitive)',NULL,1265,1266,1708,1,1),
+(1711,3,NULL,'Parallel rewriting systems (e.g., developmental systems, L-systems)',NULL,1267,1268,1708,1,1),
+(1712,3,NULL,'Parsing',NULL,1269,1270,1708,1,1),
+(1713,3,NULL,'Thue systems',NULL,1271,1272,1708,1,1),
+(1714,3,'F.4.3','Formal Languages (D.3.1)','F.4.3',1274,1285,1079,1,1),
+(1715,3,NULL,'Algebraic language theory',NULL,1275,1276,1714,1,1),
+(1716,3,NULL,'Classes defined by grammars or automata (e.g., context-free languages, regular sets, recursive sets)',NULL,1277,1278,1714,1,1),
+(1717,3,NULL,'Classes defined by resource-bounded automata**',NULL,1279,1280,1714,1,1),
+(1718,3,NULL,'Decision problems',NULL,1281,1282,1714,1,1),
+(1719,3,NULL,'Operations on languages',NULL,1283,1284,1714,1,1),
+(1720,3,'F.4.m','Miscellaneous','F.4.m',1286,1287,1079,1,1),
+(1721,3,'G.1.0','General','G.1.0',1296,1313,1082,1,1),
+(1722,3,NULL,'Computer arithmetic',NULL,1297,1298,1721,1,1),
+(1723,3,NULL,'Conditioning (and ill-conditioning) (REVISED)',NULL,1299,1300,1721,1,1),
+(1724,3,NULL,'Error analysis',NULL,1301,1302,1721,1,1),
+(1725,3,NULL,'Interval arithmetic (NEW)',NULL,1303,1304,1721,1,1),
+(1726,3,NULL,'Multiple precision arithmetic (NEW)',NULL,1305,1306,1721,1,1),
+(1727,3,NULL,'Numerical algorithms',NULL,1307,1308,1721,1,1),
+(1728,3,NULL,'Parallel algorithms',NULL,1309,1310,1721,1,1),
+(1729,3,NULL,'Stability (and instability)',NULL,1311,1312,1721,1,1),
+(1730,3,'G.1.1','Interpolation (I.3.5, I.3.7)','G.1.1',1314,1325,1082,1,1),
+(1731,3,NULL,'Difference formulas**',NULL,1315,1316,1730,1,1),
+(1732,3,NULL,'Extrapolation',NULL,1317,1318,1730,1,1),
+(1733,3,NULL,'Interpolation formulas',NULL,1319,1320,1730,1,1),
+(1734,3,NULL,'Smoothing',NULL,1321,1322,1730,1,1),
+(1735,3,NULL,'Spline and piecewise polynomial interpolation',NULL,1323,1324,1730,1,1),
+(1736,3,'G.1.2','Approximation','G.1.2',1326,1351,1082,1,1),
+(1737,3,NULL,'Approximation of surfaces and contours (NEW)',NULL,1327,1328,1736,1,1),
+(1738,3,NULL,'Chebyshev approximation and theory',NULL,1329,1330,1736,1,1),
+(1739,3,NULL,'Elementary function approximation',NULL,1331,1332,1736,1,1),
+(1740,3,NULL,'Fast Fourier transforms (FFT) (NEW)',NULL,1333,1334,1736,1,1),
+(1741,3,NULL,'Least squares approximation',NULL,1335,1336,1736,1,1),
+(1742,3,NULL,'Linear approximation',NULL,1337,1338,1736,1,1),
+(1743,3,NULL,'Minimax approximation and algorithms',NULL,1339,1340,1736,1,1),
+(1744,3,NULL,'Nonlinear approximation',NULL,1341,1342,1736,1,1),
+(1745,3,NULL,'Rational approximation',NULL,1343,1344,1736,1,1),
+(1746,3,NULL,'Special function approximations (NEW)',NULL,1345,1346,1736,1,1),
+(1747,3,NULL,'Spline and piecewise polynomial approximation',NULL,1347,1348,1736,1,1),
+(1748,3,NULL,'Wavelets and fractals (NEW)',NULL,1349,1350,1736,1,1),
+(1749,3,'G.1.3','Numerical Linear Algebra','G.1.3',1352,1371,1082,1,1),
+(1750,3,NULL,'Conditioning',NULL,1353,1354,1749,1,1),
+(1751,3,NULL,'Determinants**',NULL,1355,1356,1749,1,1),
+(1752,3,NULL,'Eigenvalues and eigenvectors (direct and iterative methods) (REVISED)',NULL,1357,1358,1749,1,1),
+(1753,3,NULL,'Error analysis',NULL,1359,1360,1749,1,1),
+(1754,3,NULL,'Linear systems (direct and iterative methods)',NULL,1361,1362,1749,1,1),
+(1755,3,NULL,'Matrix inversion',NULL,1363,1364,1749,1,1),
+(1756,3,NULL,'Pseudoinverses**',NULL,1365,1366,1749,1,1),
+(1757,3,NULL,'Singular value decomposition (NEW)',NULL,1367,1368,1749,1,1),
+(1758,3,NULL,'Sparse, structured, and very large systems (direct and iterative methods) (REVISED)',NULL,1369,1370,1749,1,1),
+(1759,3,'G.1.4','Quadrature and Numerical Differentiation (F.2.1)','G.1.4',1372,1389,1082,1,1),
+(1760,3,NULL,'Adaptive and iterative quadrature (REVISED)',NULL,1373,1374,1759,1,1),
+(1761,3,NULL,'Automatic differentiation (NEW)',NULL,1375,1376,1759,1,1),
+(1762,3,NULL,'Equal interval integration**',NULL,1377,1378,1759,1,1),
+(1763,3,NULL,'Error analysis',NULL,1379,1380,1759,1,1),
+(1764,3,NULL,'Finite difference methods',NULL,1381,1382,1759,1,1),
+(1765,3,NULL,'Gaussian quadrature',NULL,1383,1384,1759,1,1),
+(1766,3,NULL,'Iterative methods',NULL,1385,1386,1759,1,1),
+(1767,3,NULL,'Multidimensional (multiple) quadrature (REVISED)',NULL,1387,1388,1759,1,1),
+(1768,3,'G.1.5','Roots of Nonlinear Equations','G.1.5',1390,1403,1082,1,1),
+(1769,3,NULL,'Continuation (homotopy) methods (NEW)',NULL,1391,1392,1768,1,1),
+(1770,3,NULL,'Convergence',NULL,1393,1394,1768,1,1),
+(1771,3,NULL,'Error analysis',NULL,1395,1396,1768,1,1),
+(1772,3,NULL,'Iterative methods',NULL,1397,1398,1768,1,1),
+(1773,3,NULL,'Polynomials, methods for',NULL,1399,1400,1768,1,1),
+(1774,3,NULL,'Systems of equations',NULL,1401,1402,1768,1,1),
+(1775,3,'G.1.6','Optimization','G.1.6',1404,1429,1082,1,1),
+(1776,3,NULL,'Constrained optimization',NULL,1405,1406,1775,1,1),
+(1777,3,NULL,'Convex programming (NEW)',NULL,1407,1408,1775,1,1),
+(1778,3,NULL,'Global optimization (NEW)',NULL,1409,1410,1775,1,1),
+(1779,3,NULL,'Gradient methods',NULL,1411,1412,1775,1,1),
+(1780,3,NULL,'Integer programming',NULL,1413,1414,1775,1,1),
+(1781,3,NULL,'Least squares methods',NULL,1415,1416,1775,1,1),
+(1782,3,NULL,'Linear programming',NULL,1417,1418,1775,1,1),
+(1783,3,NULL,'Nonlinear programming',NULL,1419,1420,1775,1,1),
+(1784,3,NULL,'Quadratic programming methods (NEW)',NULL,1421,1422,1775,1,1),
+(1785,3,NULL,'Simulated annealing (NEW)',NULL,1423,1424,1775,1,1),
+(1786,3,NULL,'Stochastic programming (NEW)',NULL,1425,1426,1775,1,1),
+(1787,3,NULL,'Unconstrained optimization (NEW)',NULL,1427,1428,1775,1,1),
+(1788,3,'G.1.7','Ordinary Differential Equations','G.1.7',1430,1451,1082,1,1),
+(1789,3,NULL,'Boundary value problems',NULL,1431,1432,1788,1,1),
+(1790,3,NULL,'Chaotic systems (NEW)',NULL,1433,1434,1788,1,1),
+(1791,3,NULL,'Convergence and stability',NULL,1435,1436,1788,1,1),
+(1792,3,NULL,'Differential-algebraic equations (NEW)',NULL,1437,1438,1788,1,1),
+(1793,3,NULL,'Error analysis',NULL,1439,1440,1788,1,1),
+(1794,3,NULL,'Finite difference methods (NEW)',NULL,1441,1442,1788,1,1),
+(1795,3,NULL,'Initial value problems',NULL,1443,1444,1788,1,1),
+(1796,3,NULL,'Multistep and multivalue methods (REVISED)',NULL,1445,1446,1788,1,1),
+(1797,3,NULL,'One-step (single step) methods (REVISED)',NULL,1447,1448,1788,1,1),
+(1798,3,NULL,'Stiff equations',NULL,1449,1450,1788,1,1),
+(1799,3,'G.1.8','Partial Differential Equations','G.1.8',1452,1477,1082,1,1),
+(1800,3,NULL,'Domain decomposition methods (NEW)',NULL,1453,1454,1799,1,1),
+(1801,3,NULL,'Elliptic equations',NULL,1455,1456,1799,1,1),
+(1802,3,NULL,'Finite difference methods (REVISED)',NULL,1457,1458,1799,1,1),
+(1803,3,NULL,'Finite element methods',NULL,1459,1460,1799,1,1),
+(1804,3,NULL,'Finite volume methods (NEW)',NULL,1461,1462,1799,1,1),
+(1805,3,NULL,'Hyperbolic equations',NULL,1463,1464,1799,1,1),
+(1806,3,NULL,'Inverse problems (NEW)',NULL,1465,1466,1799,1,1),
+(1807,3,NULL,'Iterative solution techniques (NEW)',NULL,1467,1468,1799,1,1),
+(1808,3,NULL,'Method of lines',NULL,1469,1470,1799,1,1),
+(1809,3,NULL,'Multigrid and multilevel methods (NEW)',NULL,1471,1472,1799,1,1),
+(1810,3,NULL,'Parabolic equations',NULL,1473,1474,1799,1,1),
+(1811,3,NULL,'Spectral methods (NEW)',NULL,1475,1476,1799,1,1),
+(1812,3,'G.1.9','Integral Equations','G.1.9',1478,1487,1082,1,1),
+(1813,3,NULL,'Delay equations (NEW)',NULL,1479,1480,1812,1,1),
+(1814,3,NULL,'Fredholm equations',NULL,1481,1482,1812,1,1),
+(1815,3,NULL,'Integro-differential equations',NULL,1483,1484,1812,1,1),
+(1816,3,NULL,'Volterra equations',NULL,1485,1486,1812,1,1),
+(1817,3,'G.1.m','Miscellaneous','G.1.m',1488,1489,1082,1,1),
+(1818,3,'G.2.0','General','G.2.0',1492,1493,1083,1,1),
+(1819,3,'G.2.1','Combinatorics (F.2.2)','G.2.1',1494,1505,1083,1,1),
+(1820,3,NULL,'Combinatorial algorithms',NULL,1495,1496,1819,1,1),
+(1821,3,NULL,'Counting problems',NULL,1497,1498,1819,1,1),
+(1822,3,NULL,'Generating functions',NULL,1499,1500,1819,1,1),
+(1823,3,NULL,'Permutations and combinations',NULL,1501,1502,1819,1,1),
+(1824,3,NULL,'Recurrences and difference equations',NULL,1503,1504,1819,1,1),
+(1825,3,'G.2.2','Graph Theory (F.2.2)','G.2.2',1506,1519,1083,1,1),
+(1826,3,NULL,'Graph algorithms',NULL,1507,1508,1825,1,1),
+(1827,3,NULL,'Graph labeling (NEW)',NULL,1509,1510,1825,1,1),
+(1828,3,NULL,'Hypergraphs (NEW)',NULL,1511,1512,1825,1,1),
+(1829,3,NULL,'Network problems',NULL,1513,1514,1825,1,1),
+(1830,3,NULL,'Path and circuit problems',NULL,1515,1516,1825,1,1),
+(1831,3,NULL,'Trees',NULL,1517,1518,1825,1,1),
+(1832,3,'G.2.3','Applications (NEW)','G.2.3',1520,1521,1083,1,1),
+(1833,3,'G.2.m','Miscellaneous','G.2.m',1522,1523,1083,1,1),
+(1834,3,NULL,'Contingency table analysis (NEW)',NULL,1526,1527,1084,1,1),
+(1835,3,NULL,'Correlation and regression analysis (NEW)',NULL,1528,1529,1084,1,1),
+(1836,3,NULL,'Distribution functions (NEW)',NULL,1530,1531,1084,1,1),
+(1837,3,NULL,'Experimental design (NEW)',NULL,1532,1533,1084,1,1),
+(1838,3,NULL,'Markov processes (NEW)',NULL,1534,1535,1084,1,1),
+(1839,3,NULL,'Multivariate statistics (NEW)',NULL,1536,1537,1084,1,1),
+(1840,3,NULL,'Nonparametric statistics (NEW)',NULL,1538,1539,1084,1,1),
+(1841,3,NULL,'Probabilistic algorithms (including Monte Carlo)',NULL,1540,1541,1084,1,1),
+(1842,3,NULL,'Queueing theory (NEW)',NULL,1542,1543,1084,1,1),
+(1843,3,NULL,'Random number generation',NULL,1544,1545,1084,1,1),
+(1844,3,NULL,'Reliability and life testing (NEW)',NULL,1546,1547,1084,1,1),
+(1845,3,NULL,'Renewal theory (NEW)',NULL,1548,1549,1084,1,1),
+(1846,3,NULL,'Robust regression (NEW)',NULL,1550,1551,1084,1,1),
+(1847,3,NULL,'Statistical computing',NULL,1552,1553,1084,1,1),
+(1848,3,NULL,'Statistical software',NULL,1554,1555,1084,1,1),
+(1849,3,NULL,'Stochastic processes (NEW)',NULL,1556,1557,1084,1,1),
+(1850,3,NULL,'Survival analysis (NEW)',NULL,1558,1559,1084,1,1),
+(1851,3,NULL,'Time series analysis (NEW)',NULL,1560,1561,1084,1,1),
+(1852,3,NULL,'Algorithm design and analysis (REVISED)',NULL,1564,1565,1085,1,1),
+(1853,3,NULL,'Certification and testing',NULL,1566,1567,1085,1,1),
+(1854,3,NULL,'Documentation (NEW)',NULL,1568,1569,1085,1,1),
+(1855,3,NULL,'Efficiency',NULL,1570,1571,1085,1,1),
+(1856,3,NULL,'Parallel and vector implementations (NEW)',NULL,1572,1573,1085,1,1),
+(1857,3,NULL,'Portability**',NULL,1574,1575,1085,1,1),
+(1858,3,NULL,'Reliability and robustness',NULL,1576,1577,1085,1,1),
+(1859,3,NULL,'User interfaces (NEW)',NULL,1578,1579,1085,1,1),
+(1860,3,NULL,'Verification**',NULL,1580,1581,1085,1,1),
+(1861,3,NULL,'Queueing theory**',NULL,1584,1585,1086,1,1),
+(1862,3,'H.1.0','General','H.1.0',1592,1593,1088,1,1),
+(1863,3,'H.1.1','Systems and Information Theory (E.4)','H.1.1',1594,1601,1088,1,1),
+(1864,3,NULL,'General systems theory',NULL,1595,1596,1863,1,1),
+(1865,3,NULL,'Information theory',NULL,1597,1598,1863,1,1),
+(1866,3,NULL,'Value of information',NULL,1599,1600,1863,1,1),
+(1867,3,'H.1.2','User/Machine Systems','H.1.2',1602,1609,1088,1,1),
+(1868,3,NULL,'Human factors',NULL,1603,1604,1867,1,1),
+(1869,3,NULL,'Human information processing',NULL,1605,1606,1867,1,1),
+(1870,3,NULL,'Software psychology (NEW)',NULL,1607,1608,1867,1,1),
+(1871,3,'H.1.m','Miscellaneous','H.1.m',1610,1611,1088,1,1),
+(1872,3,'H.2.0','General','H.2.0',1614,1617,1089,1,1),
+(1873,3,NULL,'Security, integrity, and protection**',NULL,1615,1616,1872,1,1),
+(1874,3,'H.2.1','Logical Design','H.2.1',1618,1625,1089,1,1),
+(1875,3,NULL,'Data models',NULL,1619,1620,1874,1,1),
+(1876,3,NULL,'Normal forms',NULL,1621,1622,1874,1,1),
+(1877,3,NULL,'Schema and subschema',NULL,1623,1624,1874,1,1),
+(1878,3,'H.2.2','Physical Design','H.2.2',1626,1633,1089,1,1),
+(1879,3,NULL,'Access methods',NULL,1627,1628,1878,1,1),
+(1880,3,NULL,'Deadlock avoidance',NULL,1629,1630,1878,1,1),
+(1881,3,NULL,'Recovery and restart',NULL,1631,1632,1878,1,1),
+(1882,3,'H.2.3','Languages (D.3.2)','H.2.3',1634,1645,1089,1,1),
+(1883,3,NULL,'Data description languages (DDL)',NULL,1635,1636,1882,1,1),
+(1884,3,NULL,'Data manipulation languages (DML)',NULL,1637,1638,1882,1,1),
+(1885,3,NULL,'Database (persistent) programming languages',NULL,1639,1640,1882,1,1),
+(1886,3,NULL,'Query languages',NULL,1641,1642,1882,1,1),
+(1887,3,NULL,'Report writers',NULL,1643,1644,1882,1,1),
+(1888,3,'H.2.4','Systems','H.2.4',1646,1667,1089,1,1),
+(1889,3,NULL,'Concurrency',NULL,1647,1648,1888,1,1),
+(1890,3,NULL,'Distributed databases (REVISED)',NULL,1649,1650,1888,1,1),
+(1891,3,NULL,'Multimedia databases (NEW)',NULL,1651,1652,1888,1,1),
+(1892,3,NULL,'Object-oriented databases (NEW)',NULL,1653,1654,1888,1,1),
+(1893,3,NULL,'Parallel databases (NEW)',NULL,1655,1656,1888,1,1),
+(1894,3,NULL,'Query processing',NULL,1657,1658,1888,1,1),
+(1895,3,NULL,'Relational databases (NEW)',NULL,1659,1660,1888,1,1),
+(1896,3,NULL,'Rule-based databases (NEW)',NULL,1661,1662,1888,1,1),
+(1897,3,NULL,'Textual databases (NEW)',NULL,1663,1664,1888,1,1),
+(1898,3,NULL,'Transaction processing',NULL,1665,1666,1888,1,1),
+(1899,3,'H.2.5','Heterogeneous Databases','H.2.5',1668,1673,1089,1,1),
+(1900,3,NULL,'Data translation**',NULL,1669,1670,1899,1,1),
+(1901,3,NULL,'Program translation**',NULL,1671,1672,1899,1,1),
+(1902,3,'H.2.6','Database Machines','H.2.6',1674,1675,1089,1,1),
+(1903,3,'H.2.7','Database Administration','H.2.7',1676,1685,1089,1,1),
+(1904,3,NULL,'Data dictionary/directory',NULL,1677,1678,1903,1,1),
+(1905,3,NULL,'Data warehouse and repository (NEW)',NULL,1679,1680,1903,1,1),
+(1906,3,NULL,'Logging and recovery',NULL,1681,1682,1903,1,1),
+(1907,3,NULL,'Security, integrity, and protection (NEW)',NULL,1683,1684,1903,1,1),
+(1908,3,'H.2.8','Database Applications','H.2.8',1686,1697,1089,1,1),
+(1909,3,NULL,'Data mining (NEW)',NULL,1687,1688,1908,1,1),
+(1910,3,NULL,'Image databases (NEW)',NULL,1689,1690,1908,1,1),
+(1911,3,NULL,'Scientific databases (NEW)',NULL,1691,1692,1908,1,1),
+(1912,3,NULL,'Spatial databases and GIS (NEW)',NULL,1693,1694,1908,1,1),
+(1913,3,NULL,'Statistical databases (NEW)',NULL,1695,1696,1908,1,1),
+(1914,3,'H.2.m','Miscellaneous','H.2.m',1698,1699,1089,1,1),
+(1915,3,'H.3.0','General','H.3.0',1702,1703,1090,1,1),
+(1916,3,'H.3.1','Content Analysis and Indexing','H.3.1',1704,1715,1090,1,1),
+(1917,3,NULL,'Abstracting methods',NULL,1705,1706,1916,1,1),
+(1918,3,NULL,'Dictionaries',NULL,1707,1708,1916,1,1),
+(1919,3,NULL,'Indexing methods',NULL,1709,1710,1916,1,1),
+(1920,3,NULL,'Linguistic processing',NULL,1711,1712,1916,1,1),
+(1921,3,NULL,'Thesauruses',NULL,1713,1714,1916,1,1),
+(1922,3,'H.3.2','Information Storage','H.3.2',1716,1721,1090,1,1),
+(1923,3,NULL,'File organization',NULL,1717,1718,1922,1,1),
+(1924,3,NULL,'Record classification**',NULL,1719,1720,1922,1,1),
+(1925,3,'H.3.3','Information Search and Retrieval','H.3.3',1722,1737,1090,1,1),
+(1926,3,NULL,'Clustering',NULL,1723,1724,1925,1,1),
+(1927,3,NULL,'Information filtering (NEW)',NULL,1725,1726,1925,1,1),
+(1928,3,NULL,'Query formulation',NULL,1727,1728,1925,1,1),
+(1929,3,NULL,'Relevance feedback (NEW)',NULL,1729,1730,1925,1,1),
+(1930,3,NULL,'Retrieval models',NULL,1731,1732,1925,1,1),
+(1931,3,NULL,'Search process',NULL,1733,1734,1925,1,1),
+(1932,3,NULL,'Selection process',NULL,1735,1736,1925,1,1),
+(1933,3,'H.3.4','Systems and Software','H.3.4',1738,1751,1090,1,1),
+(1934,3,NULL,'Current awareness systems (selective dissemination of information--SDI)**',NULL,1739,1740,1933,1,1),
+(1935,3,NULL,'Distributed systems (NEW)',NULL,1741,1742,1933,1,1),
+(1936,3,NULL,'Information networks',NULL,1743,1744,1933,1,1),
+(1937,3,NULL,'Performance evaluation (efficiency and effectiveness) (NEW)',NULL,1745,1746,1933,1,1),
+(1938,3,NULL,'Question-answering (fact retrieval) systems**',NULL,1747,1748,1933,1,1),
+(1939,3,NULL,'User profiles and alert services (NEW)',NULL,1749,1750,1933,1,1),
+(1940,3,'H.3.5','Online Information Services','H.3.5',1752,1759,1090,1,1),
+(1941,3,NULL,'Commercial services (NEW)',NULL,1753,1754,1940,1,1),
+(1942,3,NULL,'Data sharing (REVISED)',NULL,1755,1756,1940,1,1),
+(1943,3,NULL,'Web-based services (NEW)',NULL,1757,1758,1940,1,1),
+(1944,3,'H.3.6','Library Automation','H.3.6',1760,1763,1090,1,1),
+(1945,3,NULL,'Large text archives',NULL,1761,1762,1944,1,1),
+(1946,3,'H.3.7','Digital Libraries (NEW)','H.3.7',1764,1775,1090,1,1),
+(1947,3,NULL,'Collection (NEW)',NULL,1765,1766,1946,1,1),
+(1948,3,NULL,'Dissemination (NEW)',NULL,1767,1768,1946,1,1),
+(1949,3,NULL,'Standards (NEW)',NULL,1769,1770,1946,1,1),
+(1950,3,NULL,'Systems issues (NEW)',NULL,1771,1772,1946,1,1),
+(1951,3,NULL,'User issues (NEW)',NULL,1773,1774,1946,1,1),
+(1952,3,'H.3.m','Miscellaneous','H.3.m',1776,1777,1090,1,1),
+(1953,3,'H.4.0','General','H.4.0',1780,1781,1091,1,1),
+(1954,3,'H.4.1','Office Automation (I.7)','H.4.1',1782,1797,1091,1,1),
+(1955,3,NULL,'Desktop publishing (NEW)',NULL,1783,1784,1954,1,1),
+(1956,3,NULL,'Equipment**',NULL,1785,1786,1954,1,1),
+(1957,3,NULL,'Groupware (NEW)',NULL,1787,1788,1954,1,1),
+(1958,3,NULL,'Spreadsheets',NULL,1789,1790,1954,1,1),
+(1959,3,NULL,'Time management (e.g., calendars, schedules)',NULL,1791,1792,1954,1,1),
+(1960,3,NULL,'Word processing',NULL,1793,1794,1954,1,1),
+(1961,3,NULL,'Workflow management (NEW)',NULL,1795,1796,1954,1,1),
+(1962,3,'H.4.2','Types of Systems','H.4.2',1798,1803,1091,1,1),
+(1963,3,NULL,'Decision support (e.g., MIS)',NULL,1799,1800,1962,1,1),
+(1964,3,NULL,'Logistics',NULL,1801,1802,1962,1,1),
+(1965,3,'H.4.3','Communications Applications','H.4.3',1804,1815,1091,1,1),
+(1966,3,NULL,'Bulletin boards',NULL,1805,1806,1965,1,1),
+(1967,3,NULL,'Computer conferencing, teleconferencing, and videoconferencing (REVISED)',NULL,1807,1808,1965,1,1),
+(1968,3,NULL,'Electronic mail',NULL,1809,1810,1965,1,1),
+(1969,3,NULL,'Information browsers (NEW)',NULL,1811,1812,1965,1,1),
+(1970,3,NULL,'Videotex',NULL,1813,1814,1965,1,1),
+(1971,3,'H.4.m','Miscellaneous','H.4.m',1816,1817,1091,1,1),
+(1972,3,'H.5.0','General','H.5.0',1820,1821,1092,1,1),
+(1973,3,'H.5.1','Multimedia Information Systems','H.5.1',1822,1835,1092,1,1),
+(1974,3,NULL,'Animations',NULL,1823,1824,1973,1,1),
+(1975,3,NULL,'Artificial, augmented, and virtual realities (REVISED)',NULL,1825,1826,1973,1,1),
+(1976,3,NULL,'Audio input/output',NULL,1827,1828,1973,1,1),
+(1977,3,NULL,'Evaluation/methodology',NULL,1829,1830,1973,1,1),
+(1978,3,NULL,'Hypertext navigation and maps**',NULL,1831,1832,1973,1,1),
+(1979,3,NULL,'Video (e.g., tape, disk, DVI)',NULL,1833,1834,1973,1,1),
+(1980,3,'H.5.2','User Interfaces (D.2.2, H.1.2, I.3.6)','H.5.2',1836,1875,1092,1,1),
+(1981,3,NULL,'Auditory (non-speech) feedback (NEW)',NULL,1837,1838,1980,1,1),
+(1982,3,NULL,'Benchmarking (NEW)',NULL,1839,1840,1980,1,1),
+(1983,3,NULL,'Ergonomics',NULL,1841,1842,1980,1,1),
+(1984,3,NULL,'Evaluation/methodology',NULL,1843,1844,1980,1,1),
+(1985,3,NULL,'Graphical user interfaces (GUI) (NEW)',NULL,1845,1846,1980,1,1),
+(1986,3,NULL,'Haptic I/O (NEW)',NULL,1847,1848,1980,1,1),
+(1987,3,NULL,'Input devices and strategies (e.g., mouse, touchscreen)',NULL,1849,1850,1980,1,1),
+(1988,3,NULL,'Interaction styles (e.g., commands, menus, forms, direct manipulation)',NULL,1851,1852,1980,1,1),
+(1989,3,NULL,'Natural language (NEW)',NULL,1853,1854,1980,1,1),
+(1990,3,NULL,'Prototyping (NEW)',NULL,1855,1856,1980,1,1),
+(1991,3,NULL,'Screen design (e.g., text, graphics, color)',NULL,1857,1858,1980,1,1),
+(1992,3,NULL,'Standardization (NEW)',NULL,1859,1860,1980,1,1),
+(1993,3,NULL,'Style guides (NEW)',NULL,1861,1862,1980,1,1),
+(1994,3,NULL,'Theory and methods',NULL,1863,1864,1980,1,1),
+(1995,3,NULL,'Training, help, and documentation',NULL,1865,1866,1980,1,1),
+(1996,3,NULL,'User-centered design (NEW)',NULL,1867,1868,1980,1,1),
+(1997,3,NULL,'User interface management systems (UIMS)',NULL,1869,1870,1980,1,1),
+(1998,3,NULL,'Voice I/O (NEW)',NULL,1871,1872,1980,1,1),
+(1999,3,NULL,'Windowing systems',NULL,1873,1874,1980,1,1),
+(2000,3,'H.5.3','Group and Organization Interfaces','H.5.3',1876,1893,1092,1,1),
+(2001,3,NULL,'Asynchronous interaction',NULL,1877,1878,2000,1,1),
+(2002,3,NULL,'Collaborative computing (NEW)',NULL,1879,1880,2000,1,1),
+(2003,3,NULL,'Computer-supported cooperative work (NEW)',NULL,1881,1882,2000,1,1),
+(2004,3,NULL,'Evaluation/methodology',NULL,1883,1884,2000,1,1),
+(2005,3,NULL,'Organizational design',NULL,1885,1886,2000,1,1),
+(2006,3,NULL,'Synchronous interaction',NULL,1887,1888,2000,1,1),
+(2007,3,NULL,'Theory and models',NULL,1889,1890,2000,1,1),
+(2008,3,NULL,'Web-based interaction (NEW)',NULL,1891,1892,2000,1,1),
+(2009,3,'H.5.4','Hypertext/Hypermedia (I.7, J.7) (NEW)','H.5.4',1894,1903,1092,1,1),
+(2010,3,NULL,'Architectures (NEW)',NULL,1895,1896,2009,1,1),
+(2011,3,NULL,'Navigation (NEW)',NULL,1897,1898,2009,1,1),
+(2012,3,NULL,'Theory (NEW)',NULL,1899,1900,2009,1,1),
+(2013,3,NULL,'User issues (NEW)',NULL,1901,1902,2009,1,1),
+(2014,3,'H.5.5','Sound and Music Computing (J.5) (NEW)','H.5.5',1904,1913,1092,1,1),
+(2015,3,NULL,'Methodologies and techniques (NEW)',NULL,1905,1906,2014,1,1),
+(2016,3,NULL,'Modeling (NEW)',NULL,1907,1908,2014,1,1),
+(2017,3,NULL,'Signal analysis, synthesis, and processing (NEW)',NULL,1909,1910,2014,1,1),
+(2018,3,NULL,'Systems (NEW)',NULL,1911,1912,2014,1,1),
+(2019,3,'H.5.m','Miscellaneous (NEW)','H.5.m',1914,1915,1092,1,1),
+(2020,3,'I.1.0','General','I.1.0',1924,1925,1095,1,1),
+(2021,3,'I.1.1','Expressions and Their Representation (E.1-2)','I.1.1',1926,1931,1095,1,1),
+(2022,3,NULL,'Representations (general and polynomial)',NULL,1927,1928,2021,1,1),
+(2023,3,NULL,'Simplification of expressions',NULL,1929,1930,2021,1,1),
+(2024,3,'I.1.2','Algorithms (F.2.1-2)','I.1.2',1932,1939,1095,1,1),
+(2025,3,NULL,'Algebraic algorithms',NULL,1933,1934,2024,1,1),
+(2026,3,NULL,'Analysis of algorithms',NULL,1935,1936,2024,1,1),
+(2027,3,NULL,'Nonalgebraic algorithms',NULL,1937,1938,2024,1,1),
+(2028,3,'I.1.3','Languages and Systems (D.3.2-3, F.2.2)','I.1.3',1940,1951,1095,1,1),
+(2029,3,NULL,'Evaluation strategies',NULL,1941,1942,2028,1,1),
+(2030,3,NULL,'Nonprocedural languages**',NULL,1943,1944,2028,1,1),
+(2031,3,NULL,'Special-purpose algebraic systems',NULL,1945,1946,2028,1,1),
+(2032,3,NULL,'Special-purpose hardware**',NULL,1947,1948,2028,1,1),
+(2033,3,NULL,'Substitution mechanisms**',NULL,1949,1950,2028,1,1),
+(2034,3,'I.1.4','Applications','I.1.4',1952,1953,1095,1,1),
+(2035,3,'I.1.m','Miscellaneous','I.1.m',1954,1955,1095,1,1),
+(2036,3,'I.2.0','General','I.2.0',1958,1963,1096,1,1),
+(2037,3,NULL,'Cognitive simulation',NULL,1959,1960,2036,1,1),
+(2038,3,NULL,'Philosophical foundations',NULL,1961,1962,2036,1,1),
+(2039,3,'I.2.1','Applications and Expert Systems (H.4, J)','I.2.1',1964,1979,1096,1,1),
+(2040,3,NULL,'Cartography',NULL,1965,1966,2039,1,1),
+(2041,3,NULL,'Games',NULL,1967,1968,2039,1,1),
+(2042,3,NULL,'Industrial automation',NULL,1969,1970,2039,1,1),
+(2043,3,NULL,'Law',NULL,1971,1972,2039,1,1),
+(2044,3,NULL,'Medicine and science',NULL,1973,1974,2039,1,1),
+(2045,3,NULL,'Natural language interfaces',NULL,1975,1976,2039,1,1),
+(2046,3,NULL,'Office automation',NULL,1977,1978,2039,1,1),
+(2047,3,'I.2.2','Automatic Programming (D.1.2, F.3.1, F.4.1)','I.2.2',1980,1991,1096,1,1),
+(2048,3,NULL,'Automatic analysis of algorithms',NULL,1981,1982,2047,1,1),
+(2049,3,NULL,'Program modification',NULL,1983,1984,2047,1,1),
+(2050,3,NULL,'Program synthesis',NULL,1985,1986,2047,1,1),
+(2051,3,NULL,'Program transformation',NULL,1987,1988,2047,1,1),
+(2052,3,NULL,'Program verification',NULL,1989,1990,2047,1,1),
+(2053,3,'I.2.3','Deduction and Theorem Proving (F.4.1)','I.2.3',1992,2009,1096,1,1),
+(2054,3,NULL,'Answer/reason extraction',NULL,1993,1994,2053,1,1),
+(2055,3,NULL,'Deduction (e.g., natural, rule-based)',NULL,1995,1996,2053,1,1),
+(2056,3,NULL,'Inference engines (NEW)',NULL,1997,1998,2053,1,1),
+(2057,3,NULL,'Logic programming',NULL,1999,2000,2053,1,1),
+(2058,3,NULL,'Mathematical induction',NULL,2001,2002,2053,1,1),
+(2059,3,NULL,'Metatheory**',NULL,2003,2004,2053,1,1),
+(2060,3,NULL,'Nonmonotonic reasoning and belief revision',NULL,2005,2006,2053,1,1),
+(2061,3,NULL,'Resolution',NULL,2007,2008,2053,1,1),
+(2062,3,'I.2.4','Knowledge Representation Formalisms and Methods (F.4.1)','I.2.4',2010,2027,1096,1,1),
+(2063,3,NULL,'Frames and scripts',NULL,2011,2012,2062,1,1),
+(2064,3,NULL,'Modal logic (NEW)',NULL,2013,2014,2062,1,1),
+(2065,3,NULL,'Predicate logic',NULL,2015,2016,2062,1,1),
+(2066,3,NULL,'Relation systems',NULL,2017,2018,2062,1,1),
+(2067,3,NULL,'Representation languages',NULL,2019,2020,2062,1,1),
+(2068,3,NULL,'Representations (procedural and rule-based)',NULL,2021,2022,2062,1,1),
+(2069,3,NULL,'Semantic networks',NULL,2023,2024,2062,1,1),
+(2070,3,NULL,'Temporal logic (NEW)',NULL,2025,2026,2062,1,1),
+(2071,3,'I.2.5','Programming Languages and Software (D.3.2)','I.2.5',2028,2031,1096,1,1),
+(2072,3,NULL,'Expert system tools and techniques',NULL,2029,2030,2071,1,1),
+(2073,3,'I.2.6','Learning (K.3.2)','I.2.6',2032,2047,1096,1,1),
+(2074,3,NULL,'Analogies',NULL,2033,2034,2073,1,1),
+(2075,3,NULL,'Concept learning',NULL,2035,2036,2073,1,1),
+(2076,3,NULL,'Connectionism and neural nets',NULL,2037,2038,2073,1,1),
+(2077,3,NULL,'Induction',NULL,2039,2040,2073,1,1),
+(2078,3,NULL,'Knowledge acquisition',NULL,2041,2042,2073,1,1),
+(2079,3,NULL,'Language acquisition',NULL,2043,2044,2073,1,1),
+(2080,3,NULL,'Parameter learning',NULL,2045,2046,2073,1,1),
+(2081,3,'I.2.7','Natural Language Processing','I.2.7',2048,2063,1096,1,1),
+(2082,3,NULL,'Discourse',NULL,2049,2050,2081,1,1),
+(2083,3,NULL,'Language generation',NULL,2051,2052,2081,1,1),
+(2084,3,NULL,'Language models',NULL,2053,2054,2081,1,1),
+(2085,3,NULL,'Language parsing and understanding',NULL,2055,2056,2081,1,1),
+(2086,3,NULL,'Machine translation',NULL,2057,2058,2081,1,1),
+(2087,3,NULL,'Speech recognition and synthesis',NULL,2059,2060,2081,1,1),
+(2088,3,NULL,'Text analysis',NULL,2061,2062,2081,1,1),
+(2089,3,'I.2.8','Problem Solving, Control Methods, and Search (F.2.2)','I.2.8',2064,2079,1096,1,1),
+(2090,3,NULL,'Backtracking',NULL,2065,2066,2089,1,1),
+(2091,3,NULL,'Control theory (NEW)',NULL,2067,2068,2089,1,1),
+(2092,3,NULL,'Dynamic programming',NULL,2069,2070,2089,1,1),
+(2093,3,NULL,'Graph and tree search strategies',NULL,2071,2072,2089,1,1),
+(2094,3,NULL,'Heuristic methods',NULL,2073,2074,2089,1,1),
+(2095,3,NULL,'Plan execution, formation, and generation',NULL,2075,2076,2089,1,1),
+(2096,3,NULL,'Scheduling (NEW)',NULL,2077,2078,2089,1,1),
+(2097,3,'I.2.9','Robotics','I.2.9',2080,2097,1096,1,1),
+(2098,3,NULL,'Autonomous vehicles (NEW)',NULL,2081,2082,2097,1,1),
+(2099,3,NULL,'Commercial robots and applications (NEW)',NULL,2083,2084,2097,1,1),
+(2100,3,NULL,'Kinematics and dynamics (NEW)',NULL,2085,2086,2097,1,1),
+(2101,3,NULL,'Manipulators',NULL,2087,2088,2097,1,1),
+(2102,3,NULL,'Operator interfaces (NEW)',NULL,2089,2090,2097,1,1),
+(2103,3,NULL,'Propelling mechanisms',NULL,2091,2092,2097,1,1),
+(2104,3,NULL,'Sensors',NULL,2093,2094,2097,1,1),
+(2105,3,NULL,'Workcell organization and planning (NEW)',NULL,2095,2096,2097,1,1),
+(2106,3,'I.2.10','Vision and Scene Understanding (I.4.8, I.5)','I.2.10',2098,2119,1096,1,1),
+(2107,3,NULL,'3D/stereo scene analysis (NEW)',NULL,2099,2100,2106,1,1),
+(2108,3,NULL,'Architecture and control structures**',NULL,2101,2102,2106,1,1),
+(2109,3,NULL,'Intensity, color, photometry, and thresholding',NULL,2103,2104,2106,1,1),
+(2110,3,NULL,'Modeling and recovery of physical attributes',NULL,2105,2106,2106,1,1),
+(2111,3,NULL,'Motion',NULL,2107,2108,2106,1,1),
+(2112,3,NULL,'Perceptual reasoning',NULL,2109,2110,2106,1,1),
+(2113,3,NULL,'Representations, data structures, and transforms',NULL,2111,2112,2106,1,1),
+(2114,3,NULL,'Shape',NULL,2113,2114,2106,1,1),
+(2115,3,NULL,'Texture',NULL,2115,2116,2106,1,1),
+(2116,3,NULL,'Video analysis (NEW)',NULL,2117,2118,2106,1,1),
+(2117,3,'I.2.11','Distributed Artificial Intelligence','I.2.11',2120,2129,1096,1,1),
+(2118,3,NULL,'Coherence and coordination',NULL,2121,2122,2117,1,1),
+(2119,3,NULL,'Intelligent agents (NEW)',NULL,2123,2124,2117,1,1),
+(2120,3,NULL,'Languages and structures',NULL,2125,2126,2117,1,1),
+(2121,3,NULL,'Multiagent systems (NEW)',NULL,2127,2128,2117,1,1),
+(2122,3,'I.2.m','Miscellaneous','I.2.m',2130,2131,1096,1,1),
+(2123,3,'I.3.0','General','I.3.0',2134,2135,1097,1,1),
+(2124,3,'I.3.1','Hardware Architecture (B.4.2)','I.3.1',2136,2153,1097,1,1),
+(2125,3,NULL,'Graphics processors',NULL,2137,2138,2124,1,1),
+(2126,3,NULL,'Hardcopy devices**',NULL,2139,2140,2124,1,1),
+(2127,3,NULL,'Input devices',NULL,2141,2142,2124,1,1),
+(2128,3,NULL,'Parallel processing',NULL,2143,2144,2124,1,1),
+(2129,3,NULL,'Raster display devices',NULL,2145,2146,2124,1,1),
+(2130,3,NULL,'Storage devices**',NULL,2147,2148,2124,1,1),
+(2131,3,NULL,'Three-dimensional displays**',NULL,2149,2150,2124,1,1),
+(2132,3,NULL,'Vector display devices**',NULL,2151,2152,2124,1,1),
+(2133,3,'I.3.2','Graphics Systems (C.2.1, C.2.4, C.3)','I.3.2',2154,2161,1097,1,1),
+(2134,3,NULL,'Distributed/network graphics',NULL,2155,2156,2133,1,1),
+(2135,3,NULL,'Remote systems**',NULL,2157,2158,2133,1,1),
+(2136,3,NULL,'Stand-alone systems**',NULL,2159,2160,2133,1,1),
+(2137,3,'I.3.3','Picture/Image Generation','I.3.3',2162,2175,1097,1,1),
+(2138,3,NULL,'Antialiasing**',NULL,2163,2164,2137,1,1),
+(2139,3,NULL,'Bitmap and framebuffer operations',NULL,2165,2166,2137,1,1),
+(2140,3,NULL,'Digitizing and scanning',NULL,2167,2168,2137,1,1),
+(2141,3,NULL,'Display algorithms',NULL,2169,2170,2137,1,1),
+(2142,3,NULL,'Line and curve generation',NULL,2171,2172,2137,1,1),
+(2143,3,NULL,'Viewing algorithms',NULL,2173,2174,2137,1,1),
+(2144,3,'I.3.4','Graphics Utilities','I.3.4',2176,2195,1097,1,1),
+(2145,3,NULL,'Application packages',NULL,2177,2178,2144,1,1),
+(2146,3,NULL,'Device drivers**',NULL,2179,2180,2144,1,1),
+(2147,3,NULL,'Graphics editors',NULL,2181,2182,2144,1,1),
+(2148,3,NULL,'Graphics packages',NULL,2183,2184,2144,1,1),
+(2149,3,NULL,'Meta files**',NULL,2185,2186,2144,1,1),
+(2150,3,NULL,'Paint systems',NULL,2187,2188,2144,1,1),
+(2151,3,NULL,'Picture description languages**',NULL,2189,2190,2144,1,1),
+(2152,3,NULL,'Software support',NULL,2191,2192,2144,1,1),
+(2153,3,NULL,'Virtual device interfaces',NULL,2193,2194,2144,1,1),
+(2154,3,'I.3.5','Computational Geometry and Object Modeling','I.3.5',2196,2215,1097,1,1),
+(2155,3,NULL,'Boundary representations',NULL,2197,2198,2154,1,1),
+(2156,3,NULL,'Constructive solid geometry (CSG)**',NULL,2199,2200,2154,1,1),
+(2157,3,NULL,'Curve, surface, solid, and object representations',NULL,2201,2202,2154,1,1),
+(2158,3,NULL,'Geometric algorithms, languages, and systems',NULL,2203,2204,2154,1,1),
+(2159,3,NULL,'Hierarchy and geometric transformations',NULL,2205,2206,2154,1,1),
+(2160,3,NULL,'Modeling packages',NULL,2207,2208,2154,1,1),
+(2161,3,NULL,'Object hierarchies',NULL,2209,2210,2154,1,1),
+(2162,3,NULL,'Physically based modeling',NULL,2211,2212,2154,1,1),
+(2163,3,NULL,'Splines',NULL,2213,2214,2154,1,1),
+(2164,3,'I.3.6','Methodology and Techniques','I.3.6',2216,2229,1097,1,1),
+(2165,3,NULL,'Device independence**',NULL,2217,2218,2164,1,1),
+(2166,3,NULL,'Ergonomics',NULL,2219,2220,2164,1,1),
+(2167,3,NULL,'Graphics data structures and data types',NULL,2221,2222,2164,1,1),
+(2168,3,NULL,'Interaction techniques',NULL,2223,2224,2164,1,1),
+(2169,3,NULL,'Languages',NULL,2225,2226,2164,1,1),
+(2170,3,NULL,'Standards',NULL,2227,2228,2164,1,1),
+(2171,3,'I.3.7','Three-Dimensional Graphics and Realism','I.3.7',2230,2247,1097,1,1),
+(2172,3,NULL,'Animation',NULL,2231,2232,2171,1,1),
+(2173,3,NULL,'Color, shading, shadowing, and texture',NULL,2233,2234,2171,1,1),
+(2174,3,NULL,'Fractals',NULL,2235,2236,2171,1,1),
+(2175,3,NULL,'Hidden line/surface removal',NULL,2237,2238,2171,1,1),
+(2176,3,NULL,'Radiosity',NULL,2239,2240,2171,1,1),
+(2177,3,NULL,'Raytracing',NULL,2241,2242,2171,1,1),
+(2178,3,NULL,'Virtual reality',NULL,2243,2244,2171,1,1),
+(2179,3,NULL,'Visible line/surface algorithms',NULL,2245,2246,2171,1,1),
+(2180,3,'I.3.8','Applications','I.3.8',2248,2249,1097,1,1),
+(2181,3,'I.3.m','Miscellaneous','I.3.m',2250,2251,1097,1,1),
+(2182,3,'I.4.0','General','I.4.0',2254,2259,1098,1,1),
+(2183,3,NULL,'Image displays',NULL,2255,2256,2182,1,1),
+(2184,3,NULL,'Image processing software',NULL,2257,2258,2182,1,1),
+(2185,3,'I.4.1','Digitization and Image Capture (REVISED)','I.4.1',2260,2275,1098,1,1),
+(2186,3,NULL,'Camera calibration (NEW)',NULL,2261,2262,2185,1,1),
+(2187,3,NULL,'Imaging geometry (NEW)',NULL,2263,2264,2185,1,1),
+(2188,3,NULL,'Quantization',NULL,2265,2266,2185,1,1),
+(2189,3,NULL,'Radiometry (NEW)',NULL,2267,2268,2185,1,1),
+(2190,3,NULL,'Reflectance (NEW)',NULL,2269,2270,2185,1,1),
+(2191,3,NULL,'Sampling',NULL,2271,2272,2185,1,1),
+(2192,3,NULL,'Scanning',NULL,2273,2274,2185,1,1),
+(2193,3,'I.4.2','Compression (Coding) (E.4)','I.4.2',2276,2281,1098,1,1),
+(2194,3,NULL,'Approximate methods',NULL,2277,2278,2193,1,1),
+(2195,3,NULL,'Exact coding**',NULL,2279,2280,2193,1,1),
+(2196,3,'I.4.3','Enhancement','I.4.3',2282,2295,1098,1,1),
+(2197,3,NULL,'Filtering',NULL,2283,2284,2196,1,1),
+(2198,3,NULL,'Geometric correction',NULL,2285,2286,2196,1,1),
+(2199,3,NULL,'Grayscale manipulation',NULL,2287,2288,2196,1,1),
+(2200,3,NULL,'Registration',NULL,2289,2290,2196,1,1),
+(2201,3,NULL,'Sharpening and deblurring**',NULL,2291,2292,2196,1,1),
+(2202,3,NULL,'Smoothing',NULL,2293,2294,2196,1,1),
+(2203,3,'I.4.4','Restoration','I.4.4',2296,2305,1098,1,1),
+(2204,3,NULL,'Inverse filtering**',NULL,2297,2298,2203,1,1),
+(2205,3,NULL,'Kalman filtering',NULL,2299,2300,2203,1,1),
+(2206,3,NULL,'Pseudoinverse restoration**',NULL,2301,2302,2203,1,1),
+(2207,3,NULL,'Wiener filtering**',NULL,2303,2304,2203,1,1),
+(2208,3,'I.4.5','Reconstruction','I.4.5',2306,2313,1098,1,1),
+(2209,3,NULL,'Series expansion methods',NULL,2307,2308,2208,1,1),
+(2210,3,NULL,'Summation methods**',NULL,2309,2310,2208,1,1),
+(2211,3,NULL,'Transform methods',NULL,2311,2312,2208,1,1),
+(2212,3,'I.4.6','Segmentation','I.4.6',2314,2323,1098,1,1),
+(2213,3,NULL,'Edge and feature detection',NULL,2315,2316,2212,1,1),
+(2214,3,NULL,'Pixel classification',NULL,2317,2318,2212,1,1),
+(2215,3,NULL,'Region growing, partitioning',NULL,2319,2320,2212,1,1),
+(2216,3,NULL,'Relaxation (NEW)',NULL,2321,2322,2212,1,1),
+(2217,3,'I.4.7','Feature Measurement','I.4.7',2324,2337,1098,1,1),
+(2218,3,NULL,'Feature representation (NEW)',NULL,2325,2326,2217,1,1),
+(2219,3,NULL,'Invariants',NULL,2327,2328,2217,1,1),
+(2220,3,NULL,'Moments',NULL,2329,2330,2217,1,1),
+(2221,3,NULL,'Projections',NULL,2331,2332,2217,1,1),
+(2222,3,NULL,'Size and shape',NULL,2333,2334,2217,1,1),
+(2223,3,NULL,'Texture',NULL,2335,2336,2217,1,1),
+(2224,3,'I.4.8','Scene Analysis','I.4.8',2338,2365,1098,1,1),
+(2225,3,NULL,'Color (NEW)',NULL,2339,2340,2224,1,1),
+(2226,3,NULL,'Depth cues',NULL,2341,2342,2224,1,1),
+(2227,3,NULL,'Motion (NEW)',NULL,2343,2344,2224,1,1),
+(2228,3,NULL,'Object recognition (NEW)',NULL,2345,2346,2224,1,1),
+(2229,3,NULL,'Photometry',NULL,2347,2348,2224,1,1),
+(2230,3,NULL,'Range data',NULL,2349,2350,2224,1,1),
+(2231,3,NULL,'Sensor fusion',NULL,2351,2352,2224,1,1),
+(2232,3,NULL,'Shading (NEW)',NULL,2353,2354,2224,1,1),
+(2233,3,NULL,'Shape (NEW)',NULL,2355,2356,2224,1,1),
+(2234,3,NULL,'Stereo',NULL,2357,2358,2224,1,1),
+(2235,3,NULL,'Surface fitting (NEW)',NULL,2359,2360,2224,1,1),
+(2236,3,NULL,'Time-varying imagery',NULL,2361,2362,2224,1,1),
+(2237,3,NULL,'Tracking (NEW)',NULL,2363,2364,2224,1,1),
+(2238,3,'I.4.9','Applications','I.4.9',2366,2367,1098,1,1),
+(2239,3,'I.4.10','Image Representation','I.4.10',2368,2379,1098,1,1),
+(2240,3,NULL,'Hierarchical',NULL,2369,2370,2239,1,1),
+(2241,3,NULL,'Morphological',NULL,2371,2372,2239,1,1),
+(2242,3,NULL,'Multidimensional',NULL,2373,2374,2239,1,1),
+(2243,3,NULL,'Statistical',NULL,2375,2376,2239,1,1),
+(2244,3,NULL,'Volumetric',NULL,2377,2378,2239,1,1),
+(2245,3,'I.4.m','Miscellaneous','I.4.m',2380,2381,1098,1,1),
+(2246,3,'I.5.0','General','I.5.0',2384,2385,1099,1,1),
+(2247,3,'I.5.1','Models','I.5.1',2386,2399,1099,1,1),
+(2248,3,NULL,'Deterministic**',NULL,2387,2388,2247,1,1),
+(2249,3,NULL,'Fuzzy set',NULL,2389,2390,2247,1,1),
+(2250,3,NULL,'Geometric',NULL,2391,2392,2247,1,1),
+(2251,3,NULL,'Neural nets',NULL,2393,2394,2247,1,1),
+(2252,3,NULL,'Statistical',NULL,2395,2396,2247,1,1),
+(2253,3,NULL,'Structural',NULL,2397,2398,2247,1,1),
+(2254,3,'I.5.2','Design Methodology','I.5.2',2400,2407,1099,1,1),
+(2255,3,NULL,'Classifier design and evaluation',NULL,2401,2402,2254,1,1),
+(2256,3,NULL,'Feature evaluation and selection',NULL,2403,2404,2254,1,1),
+(2257,3,NULL,'Pattern analysis',NULL,2405,2406,2254,1,1),
+(2258,3,'I.5.3','Clustering','I.5.3',2408,2413,1099,1,1),
+(2259,3,NULL,'Algorithms',NULL,2409,2410,2258,1,1),
+(2260,3,NULL,'Similarity measures',NULL,2411,2412,2258,1,1),
+(2261,3,'I.5.4','Applications','I.5.4',2414,2423,1099,1,1),
+(2262,3,NULL,'Computer vision',NULL,2415,2416,2261,1,1),
+(2263,3,NULL,'Signal processing',NULL,2417,2418,2261,1,1),
+(2264,3,NULL,'Text processing',NULL,2419,2420,2261,1,1),
+(2265,3,NULL,'Waveform analysis',NULL,2421,2422,2261,1,1),
+(2266,3,'I.5.5','Implementation (C.3)','I.5.5',2424,2429,1099,1,1),
+(2267,3,NULL,'Interactive systems',NULL,2425,2426,2266,1,1),
+(2268,3,NULL,'Special architectures',NULL,2427,2428,2266,1,1),
+(2269,3,'I.5.m','Miscellaneous','I.5.m',2430,2431,1099,1,1),
+(2270,3,'I.6.0','General','I.6.0',2434,2435,1100,1,1),
+(2271,3,'I.6.1','Simulation Theory','I.6.1',2436,2443,1100,1,1),
+(2272,3,NULL,'Model classification',NULL,2437,2438,2271,1,1),
+(2273,3,NULL,'Systems theory',NULL,2439,2440,2271,1,1),
+(2274,3,NULL,'Types of simulation (continuous and discrete)*',NULL,2441,2442,2271,1,1),
+(2275,3,'I.6.2','Simulation Languages','I.6.2',2444,2445,1100,1,1),
+(2276,3,'I.6.3','Applications','I.6.3',2446,2447,1100,1,1),
+(2277,3,'I.6.4','Model Validation and Analysis','I.6.4',2448,2449,1100,1,1),
+(2278,3,'I.6.5','Model Development','I.6.5',2450,2453,1100,1,1),
+(2279,3,NULL,'Modeling methodologies',NULL,2451,2452,2278,1,1),
+(2280,3,'I.6.6','Simulation Output Analysis','I.6.6',2454,2455,1100,1,1),
+(2281,3,'I.6.7','Simulation Support Systems','I.6.7',2456,2459,1100,1,1),
+(2282,3,NULL,'Environments',NULL,2457,2458,2281,1,1),
+(2283,3,'I.6.8','Types of Simulation','I.6.8',2460,2479,1100,1,1),
+(2284,3,NULL,'Animation',NULL,2461,2462,2283,1,1),
+(2285,3,NULL,'Combined',NULL,2463,2464,2283,1,1),
+(2286,3,NULL,'Continuous',NULL,2465,2466,2283,1,1),
+(2287,3,NULL,'Discrete event',NULL,2467,2468,2283,1,1),
+(2288,3,NULL,'Distributed',NULL,2469,2470,2283,1,1),
+(2289,3,NULL,'Gaming',NULL,2471,2472,2283,1,1),
+(2290,3,NULL,'Monte Carlo',NULL,2473,2474,2283,1,1),
+(2291,3,NULL,'Parallel',NULL,2475,2476,2283,1,1),
+(2292,3,NULL,'Visual',NULL,2477,2478,2283,1,1),
+(2293,3,'I.6.m','Miscellaneous','I.6.m',2480,2481,1100,1,1),
+(2294,3,'I.7.0','General','I.7.0',2484,2485,1101,1,1),
+(2295,3,'I.7.1','Document and Text Editing (REVISED)','I.7.1',2486,2495,1101,1,1),
+(2296,3,NULL,'Document management (NEW)',NULL,2487,2488,2295,1,1),
+(2297,3,NULL,'Languages**',NULL,2489,2490,2295,1,1),
+(2298,3,NULL,'Spelling**',NULL,2491,2492,2295,1,1),
+(2299,3,NULL,'Version control (NEW)',NULL,2493,2494,2295,1,1),
+(2300,3,'I.7.2','Document Preparation','I.7.2',2496,2517,1101,1,1),
+(2301,3,NULL,'Desktop publishing',NULL,2497,2498,2300,1,1),
+(2302,3,NULL,'Format and notation',NULL,2499,2500,2300,1,1),
+(2303,3,NULL,'Hypertext/hypermedia',NULL,2501,2502,2300,1,1),
+(2304,3,NULL,'Index generation (NEW)',NULL,2503,2504,2300,1,1),
+(2305,3,NULL,'Languages and systems',NULL,2505,2506,2300,1,1),
+(2306,3,NULL,'Markup languages (NEW)',NULL,2507,2508,2300,1,1),
+(2307,3,NULL,'Multi/mixed media',NULL,2509,2510,2300,1,1),
+(2308,3,NULL,'Photocomposition/typesetting',NULL,2511,2512,2300,1,1),
+(2309,3,NULL,'Scripting languages (NEW)',NULL,2513,2514,2300,1,1),
+(2310,3,NULL,'Standards',NULL,2515,2516,2300,1,1),
+(2311,3,'I.7.3','Index Generation**','I.7.3',2518,2519,1101,1,1),
+(2312,3,'I.7.4','Electronic Publishing (H.5.4, J.7) (NEW)','I.7.4',2520,2521,1101,1,1),
+(2313,3,'I.7.5','Document Capture (I.4.1) (NEW)','I.7.5',2522,2531,1101,1,1),
+(2314,3,NULL,'Document analysis (NEW)',NULL,2523,2524,2313,1,1),
+(2315,3,NULL,'Graphics recognition and interpretation (NEW)',NULL,2525,2526,2313,1,1),
+(2316,3,NULL,'Optical character recognition (OCR) (NEW)',NULL,2527,2528,2313,1,1),
+(2317,3,NULL,'Scanning (NEW)',NULL,2529,2530,2313,1,1),
+(2318,3,'I.7.m','Miscellaneous','I.7.m',2532,2533,1101,1,1),
+(2319,3,NULL,'Business',NULL,2542,2543,1104,1,1),
+(2320,3,NULL,'Education',NULL,2544,2545,1104,1,1),
+(2321,3,NULL,'Financial (e.g., EFTS)',NULL,2546,2547,1104,1,1),
+(2322,3,NULL,'Government',NULL,2548,2549,1104,1,1),
+(2323,3,NULL,'Law',NULL,2550,2551,1104,1,1),
+(2324,3,NULL,'Manufacturing',NULL,2552,2553,1104,1,1),
+(2325,3,NULL,'Marketing',NULL,2554,2555,1104,1,1),
+(2326,3,NULL,'Military',NULL,2556,2557,1104,1,1),
+(2327,3,NULL,'Aerospace',NULL,2560,2561,1105,1,1),
+(2328,3,NULL,'Archaeology (NEW)',NULL,2562,2563,1105,1,1),
+(2329,3,NULL,'Astronomy',NULL,2564,2565,1105,1,1),
+(2330,3,NULL,'Chemistry',NULL,2566,2567,1105,1,1),
+(2331,3,NULL,'Earth and atmospheric sciences',NULL,2568,2569,1105,1,1),
+(2332,3,NULL,'Electronics',NULL,2570,2571,1105,1,1),
+(2333,3,NULL,'Engineering',NULL,2572,2573,1105,1,1),
+(2334,3,NULL,'Mathematics and statistics',NULL,2574,2575,1105,1,1),
+(2335,3,NULL,'Physics',NULL,2576,2577,1105,1,1),
+(2336,3,NULL,'Biology and genetics (REVISED)',NULL,2580,2581,1106,1,1),
+(2337,3,NULL,'Health',NULL,2582,2583,1106,1,1),
+(2338,3,NULL,'Medical information systems',NULL,2584,2585,1106,1,1),
+(2339,3,NULL,'Economics',NULL,2588,2589,1107,1,1),
+(2340,3,NULL,'Psychology',NULL,2590,2591,1107,1,1),
+(2341,3,NULL,'Sociology',NULL,2592,2593,1107,1,1),
+(2342,3,NULL,'Architecture (NEW)',NULL,2596,2597,1108,1,1),
+(2343,3,NULL,'Arts, fine and performing**',NULL,2598,2599,1108,1,1),
+(2344,3,NULL,'Fine arts (NEW)',NULL,2600,2601,1108,1,1),
+(2345,3,NULL,'Language translation',NULL,2602,2603,1108,1,1),
+(2346,3,NULL,'Linguistics',NULL,2604,2605,1108,1,1),
+(2347,3,NULL,'Literature',NULL,2606,2607,1108,1,1),
+(2348,3,NULL,'Music**',NULL,2608,2609,1108,1,1),
+(2349,3,NULL,'Performing arts (e.g., dance, music) (NEW)',NULL,2610,2611,1108,1,1),
+(2350,3,NULL,'Computer-aided design (CAD)',NULL,2614,2615,1109,1,1),
+(2351,3,NULL,'Computer-aided manufacturing (CAM)',NULL,2616,2617,1109,1,1),
+(2352,3,NULL,'Command and control',NULL,2620,2621,1110,1,1),
+(2353,3,NULL,'Consumer products',NULL,2622,2623,1110,1,1),
+(2354,3,NULL,'Industrial control',NULL,2624,2625,1110,1,1),
+(2355,3,NULL,'Military',NULL,2626,2627,1110,1,1),
+(2356,3,NULL,'Process control',NULL,2628,2629,1110,1,1),
+(2357,3,NULL,'Publishing',NULL,2630,2631,1110,1,1),
+(2358,3,NULL,'Real time',NULL,2632,2633,1110,1,1),
+(2359,3,NULL,'Markets',NULL,2642,2643,1113,1,1),
+(2360,3,NULL,'Standards',NULL,2644,2645,1113,1,1),
+(2361,3,NULL,'Statistics',NULL,2646,2647,1113,1,1),
+(2362,3,NULL,'Suppliers',NULL,2648,2649,1113,1,1),
+(2363,3,NULL,'Hardware',NULL,2652,2653,1114,1,1),
+(2364,3,NULL,'People',NULL,2654,2655,1114,1,1),
+(2365,3,NULL,'Software',NULL,2656,2657,1114,1,1),
+(2366,3,NULL,'Systems',NULL,2658,2659,1114,1,1),
+(2367,3,NULL,'Theory',NULL,2660,2661,1114,1,1),
+(2368,3,'K.3.0','General','K.3.0',2664,2665,1115,1,1),
+(2369,3,'K.3.1','Computer Uses in Education','K.3.1',2666,2675,1115,1,1),
+(2370,3,NULL,'Collaborative learning (NEW)',NULL,2667,2668,2369,1,1),
+(2371,3,NULL,'Computer-assisted instruction (CAI)',NULL,2669,2670,2369,1,1),
+(2372,3,NULL,'Computer-managed instruction (CMI)',NULL,2671,2672,2369,1,1),
+(2373,3,NULL,'Distance learning (NEW)',NULL,2673,2674,2369,1,1),
+(2374,3,'K.3.2','Computer and Information Science Education','K.3.2',2676,2689,1115,1,1),
+(2375,3,NULL,'Accreditation (NEW)',NULL,2677,2678,2374,1,1),
+(2376,3,NULL,'Computer science education',NULL,2679,2680,2374,1,1),
+(2377,3,NULL,'Curriculum',NULL,2681,2682,2374,1,1),
+(2378,3,NULL,'Information systems education',NULL,2683,2684,2374,1,1),
+(2379,3,NULL,'Literacy (NEW)',NULL,2685,2686,2374,1,1),
+(2380,3,NULL,'Self-assessment',NULL,2687,2688,2374,1,1),
+(2381,3,'K.3.m','Miscellaneous','K.3.m',2690,2695,1115,1,1),
+(2382,3,NULL,'Accreditation**',NULL,2691,2692,2381,1,1),
+(2383,3,NULL,'Computer literacy**',NULL,2693,2694,2381,1,1),
+(2384,3,'K.4.0','General','K.4.0',2698,2699,1116,1,1),
+(2385,3,'K.4.1','Public Policy Issues','K.4.1',2700,2719,1116,1,1),
+(2386,3,NULL,'Abuse and crime involving computers (NEW)',NULL,2701,2702,2385,1,1),
+(2387,3,NULL,'Computer-related health issues (NEW)',NULL,2703,2704,2385,1,1),
+(2388,3,NULL,'Ethics (NEW)',NULL,2705,2706,2385,1,1),
+(2389,3,NULL,'Human safety',NULL,2707,2708,2385,1,1),
+(2390,3,NULL,'Intellectual property rights (NEW)',NULL,2709,2710,2385,1,1),
+(2391,3,NULL,'Privacy',NULL,2711,2712,2385,1,1),
+(2392,3,NULL,'Regulation',NULL,2713,2714,2385,1,1),
+(2393,3,NULL,'Transborder data flow',NULL,2715,2716,2385,1,1),
+(2394,3,NULL,'Use/abuse of power (NEW)',NULL,2717,2718,2385,1,1),
+(2395,3,'K.4.2','Social Issues','K.4.2',2720,2729,1116,1,1),
+(2396,3,NULL,'Abuse and crime involving computers**',NULL,2721,2722,2395,1,1),
+(2397,3,NULL,'Assistive technologies for persons with disabilities (NEW)',NULL,2723,2724,2395,1,1),
+(2398,3,NULL,'Employment',NULL,2725,2726,2395,1,1),
+(2399,3,NULL,'Handicapped persons/special needs**',NULL,2727,2728,2395,1,1),
+(2400,3,'K.4.3','Organizational Impacts','K.4.3',2730,2739,1116,1,1),
+(2401,3,NULL,'Automation (NEW)',NULL,2731,2732,2400,1,1),
+(2402,3,NULL,'Computer-supported collaborative work (NEW)',NULL,2733,2734,2400,1,1),
+(2403,3,NULL,'Employment (NEW)',NULL,2735,2736,2400,1,1),
+(2404,3,NULL,'Reengineering (NEW)',NULL,2737,2738,2400,1,1),
+(2405,3,'K.4.4','Electronic Commerce (J.1) (NEW)','K.4.4',2740,2753,1116,1,1),
+(2406,3,NULL,'Cybercash, digital cash (NEW)',NULL,2741,2742,2405,1,1),
+(2407,3,NULL,'Distributed commercial transactions (NEW)',NULL,2743,2744,2405,1,1),
+(2408,3,NULL,'Electronic data interchange (EDI) (NEW)',NULL,2745,2746,2405,1,1),
+(2409,3,NULL,'Intellectual property (NEW)',NULL,2747,2748,2405,1,1),
+(2410,3,NULL,'Payment schemes (NEW)',NULL,2749,2750,2405,1,1),
+(2411,3,NULL,'Security (NEW)',NULL,2751,2752,2405,1,1),
+(2412,3,'K.4.m','Miscellaneous','K.4.m',2754,2755,1116,1,1),
+(2413,3,'K.5.0','General','K.5.0',2758,2759,1117,1,1),
+(2414,3,'K.5.1','Hardware/Software Protection (REVISED)','K.5.1',2760,2771,1117,1,1),
+(2415,3,NULL,'Copyrights',NULL,2761,2762,2414,1,1),
+(2416,3,NULL,'Licensing (NEW)',NULL,2763,2764,2414,1,1),
+(2417,3,NULL,'Patents',NULL,2765,2766,2414,1,1),
+(2418,3,NULL,'Proprietary rights',NULL,2767,2768,2414,1,1),
+(2419,3,NULL,'Trade secrets**',NULL,2769,2770,2414,1,1),
+(2420,3,'K.5.2','Governmental Issues','K.5.2',2772,2779,1117,1,1),
+(2421,3,NULL,'Censorship (NEW)',NULL,2773,2774,2420,1,1),
+(2422,3,NULL,'Regulation',NULL,2775,2776,2420,1,1),
+(2423,3,NULL,'Taxation',NULL,2777,2778,2420,1,1),
+(2424,3,'K.5.m','Miscellaneous','K.5.m',2780,2785,1117,1,1),
+(2425,3,NULL,'Contracts**',NULL,2781,2782,2424,1,1),
+(2426,3,NULL,'Hardware patents**',NULL,2783,2784,2424,1,1),
+(2427,3,'K.6.0','General','K.6.0',2788,2791,1118,1,1),
+(2428,3,NULL,'Economics',NULL,2789,2790,2427,1,1),
+(2429,3,'K.6.1','Project and People Management','K.6.1',2792,2807,1118,1,1),
+(2430,3,NULL,'Life cycle',NULL,2793,2794,2429,1,1),
+(2431,3,NULL,'Management techniques (e.g., PERT/CPM)',NULL,2795,2796,2429,1,1),
+(2432,3,NULL,'Staffing',NULL,2797,2798,2429,1,1),
+(2433,3,NULL,'Strategic information systems planning (NEW)',NULL,2799,2800,2429,1,1),
+(2434,3,NULL,'Systems analysis and design',NULL,2801,2802,2429,1,1),
+(2435,3,NULL,'Systems development',NULL,2803,2804,2429,1,1),
+(2436,3,NULL,'Training',NULL,2805,2806,2429,1,1),
+(2437,3,'K.6.2','Installation Management','K.6.2',2808,2819,1118,1,1),
+(2438,3,NULL,'Benchmarks',NULL,2809,2810,2437,1,1),
+(2439,3,NULL,'Computer selection',NULL,2811,2812,2437,1,1),
+(2440,3,NULL,'Computing equipment management',NULL,2813,2814,2437,1,1),
+(2441,3,NULL,'Performance and usage measurement',NULL,2815,2816,2437,1,1),
+(2442,3,NULL,'Pricing and resource allocation',NULL,2817,2818,2437,1,1),
+(2443,3,'K.6.3','Software Management (D.2.9)','K.6.3',2820,2829,1118,1,1),
+(2444,3,NULL,'Software development',NULL,2821,2822,2443,1,1),
+(2445,3,NULL,'Software maintenance',NULL,2823,2824,2443,1,1),
+(2446,3,NULL,'Software process (NEW)',NULL,2825,2826,2443,1,1),
+(2447,3,NULL,'Software selection',NULL,2827,2828,2443,1,1),
+(2448,3,'K.6.4','System Management','K.6.4',2830,2837,1118,1,1),
+(2449,3,NULL,'Centralization/decentralization',NULL,2831,2832,2448,1,1),
+(2450,3,NULL,'Management audit',NULL,2833,2834,2448,1,1),
+(2451,3,NULL,'Quality assurance',NULL,2835,2836,2448,1,1),
+(2452,3,'K.6.5','Security and Protection (D.4.6, K.4.2)','K.6.5',2838,2849,1118,1,1),
+(2453,3,NULL,'Authentication',NULL,2839,2840,2452,1,1),
+(2454,3,NULL,'Insurance**',NULL,2841,2842,2452,1,1),
+(2455,3,NULL,'Invasive software (e.g., viruses, worms, Trojan horses)',NULL,2843,2844,2452,1,1),
+(2456,3,NULL,'Physical security**',NULL,2845,2846,2452,1,1),
+(2457,3,NULL,'Unauthorized access (e.g., hacking, phreaking) (NEW)',NULL,2847,2848,2452,1,1),
+(2458,3,'K.6.m','Miscellaneous','K.6.m',2850,2855,1118,1,1),
+(2459,3,NULL,'Insurance*',NULL,2851,2852,2458,1,1),
+(2460,3,NULL,'Security*',NULL,2853,2854,2458,1,1),
+(2461,3,'K.7.0','General','K.7.0',2858,2859,1119,1,1),
+(2462,3,'K.7.1','Occupations','K.7.1',2860,2861,1119,1,1),
+(2463,3,'K.7.2','Organizations','K.7.2',2862,2863,1119,1,1),
+(2464,3,'K.7.3','Testing, Certification, and Licensing','K.7.3',2864,2865,1119,1,1),
+(2465,3,'K.7.4','Professional Ethics (K.4) (NEW)','K.7.4',2866,2873,1119,1,1),
+(2466,3,NULL,'Codes of ethics (NEW)',NULL,2867,2868,2465,1,1),
+(2467,3,NULL,'Codes of good practice (NEW)',NULL,2869,2870,2465,1,1),
+(2468,3,NULL,'Ethical dilemmas (NEW)',NULL,2871,2872,2465,1,1),
+(2469,3,'K.7.m','Miscellaneous','K.7.m',2874,2879,1119,1,1),
+(2470,3,NULL,'Codes of good practice**',NULL,2875,2876,2469,1,1),
+(2471,3,NULL,'Ethics**',NULL,2877,2878,2469,1,1),
+(2472,3,NULL,'Games*',NULL,2882,2883,1120,1,1),
+(2473,3,'K.8.0','General','K.8.0',2884,2887,1120,1,1),
+(2474,3,NULL,'Games',NULL,2885,2886,2473,1,1),
+(2475,3,'K.8.1','Application Packages','K.8.1',2888,2901,1120,1,1),
+(2476,3,NULL,'Data communications',NULL,2889,2890,2475,1,1),
+(2477,3,NULL,'Database processing',NULL,2891,2892,2475,1,1),
+(2478,3,NULL,'Freeware/shareware (NEW)',NULL,2893,2894,2475,1,1),
+(2479,3,NULL,'Graphics',NULL,2895,2896,2475,1,1),
+(2480,3,NULL,'Spreadsheets',NULL,2897,2898,2475,1,1),
+(2481,3,NULL,'Word processing',NULL,2899,2900,2475,1,1),
+(2482,3,'K.8.2','Hardware','K.8.2',2902,2903,1120,1,1),
+(2483,3,'K.8.3','Management/Maintenance','K.8.3',2904,2905,1120,1,1),
+(2484,3,'K.8.m','Miscellaneous (NEW)','K.8.m',2906,2907,1120,1,1);
\ No newline at end of file
diff --git a/database/factories/create_collections_data_ddc.sql b/database/factories/create_collections_data_ddc.sql
new file mode 100644
index 0000000..38e789c
--- /dev/null
+++ b/database/factories/create_collections_data_ddc.sql
@@ -0,0 +1,1044 @@
+-- Dewey classification
+/* The ten main classes are: see number at db below
+0 Computer science, information & general works
+1 Philosophy & psychology
+2 Religion
+3 Social sciences
+4 Language
+5 Science
+6 Technology
+7 Arts & recreation
+8 Literature
+9 History & geography
+*/
+
+INSERT INTO collections (id, role_id, number, name, oai_subset, left_id, right_id, parent_id, visible, visible_publish) VALUES
+(3,2,'0','Informatik, Informationswissenschaft, allgemeine Werke','0',2,189,NULL,1,1),
+(4,2,'1','Philosophie und Psychologie','1',190,389,NULL,1,1),
+(5,2,'2','Religion','2',390,589,NULL,1,1),
+(6,2,'3','Sozialwissenschaften','3',590,791,NULL,1,1),
+(7,2,'4','Sprache','4',792,983,NULL,1,1),
+(8,2,'5','Naturwissenschaften und Mathematik','5',984,1191,NULL,1,1),
+(9,2,'6','Technik, Medizin, angewandte Wissenschaften','6',1192,1399,NULL,1,1),
+(10,2,'7','Künste und Unterhaltung','7',1400,1613,NULL,1,1),
+(11,2,'8','Literatur','8',1614,1833,NULL,1,1),
+(12,2,'9','Geschichte und Geografie','9',1834,2053,NULL,1,1),
+(13,2,'00','Informatik, Wissen, Systeme','00',3,18,3,1,1),
+(14,2,'01','Bibliografien','01',19,38,3,1,1),
+(15,2,'02','Bibliotheks- und Informationswissenschaften','02',39,56,3,1,1),
+(16,2,'03','Enzyklopädien, Faktenbücher','03',57,78,3,1,1),
+(17,2,'05','Zeitschriften, fortlaufende Sammelwerke','05',79,100,3,1,1),
+(18,2,'06','Verbände, Organisationen, Museen','06',101,122,3,1,1),
+(19,2,'07','Publizistische Medien, Journalismus, Verlagswesen','07',123,144,3,1,1),
+(20,2,'08','Allgemeine Sammelwerke, Zitatensammlungen','08',145,166,3,1,1),
+(21,2,'09','Handschriften, seltene Bücher','09',167,188,3,1,1),
+(22,2,'10','Philosophie','10',191,210,4,1,1),
+(23,2,'11','Metaphysik','11',211,230,4,0,1),
+(24,2,'12','Epistemologie','12',231,250,4,0,1),
+(25,2,'13','Parapsychologie, Okkultismus','13',251,266,4,1,1),
+(26,2,'14','Philosophische Schulen','14',267,288,4,0,1),
+(27,2,'15','Psychologie','15',289,304,4,1,1),
+(28,2,'16','Logik','16',305,322,4,0,1),
+(29,2,'17','Ethik','17',323,344,4,0,1),
+(30,2,'18','Antike, mittelalterliche und östliche Philosophie','18',345,366,4,0,1),
+(31,2,'19','Neuzeitliche westliche Philosophie','19',367,388,4,0,1),
+(32,2,'20','Religion','20',391,412,5,1,1),
+(33,2,'21','Religionsphilosophie, Religionstheorie','21',413,428,5,0,1),
+(34,2,'22','Bibel','22',429,450,5,1,1),
+(35,2,'23','Christentum, Christliche Theologie','23',451,470,5,1,1),
+(36,2,'24','Christliche Erfahrung, christliches Leben','24',471,488,5,0,1),
+(37,2,'25','Christliche Pastoraltheologie, Ordensgemeinschaften','25',489,504,5,0,1),
+(38,2,'26','Kirchenorganisation, Sozialarbeit, Religionsausübung','26',505,526,5,0,1),
+(39,2,'27','Geschichte des Christentums','27',527,548,5,0,1),
+(40,2,'28','Christliche Konfessionen','28',549,568,5,0,1),
+(41,2,'29','Andere Religionen','29',569,588,5,1,1),
+(42,2,'30','Sozialwissenschaften, Soziologie','30',591,608,6,1,1),
+(43,2,'31','Statistiken','31',609,624,6,1,1),
+(44,2,'32','Politikwissenschaft','32',625,644,6,1,1),
+(45,2,'33','Wirtschaft','33',645,666,6,1,1),
+(46,2,'34','Recht','34',667,688,6,1,1),
+(47,2,'35','Öffentliche Verwaltung, Militärwissenschaft','35',689,710,6,1,1),
+(48,2,'36','Soziale Probleme, Sozialdienste','36',711,732,6,1,1),
+(49,2,'37','Bildung und Erziehung','37',733,750,6,1,1),
+(50,2,'38','Handel, Kommunikation, Verkehr','38',751,772,6,1,1),
+(51,2,'39','Bräuche, Etikette, Folklore','39',773,790,6,1,1),
+(52,2,'40','Sprache','40',793,814,7,1,1),
+(53,2,'41','Linguistik','41',815,834,7,0,1),
+(54,2,'42','Englisch, Altenglisch','42',835,852,7,1,1),
+(55,2,'43','Deutsch, germanische Sprachen allgemein','43',853,870,7,1,1),
+(56,2,'44','Französisch, romanische Sprachen allgemein','44',871,888,7,1,1),
+(57,2,'45','Italienisch, Rumänisch, Rätoromanisch','45',889,906,7,1,1),
+(58,2,'46','Spanisch, Portugiesisch','46',907,924,7,1,1),
+(59,2,'47','Latein, italische Sprachen','47',925,942,7,1,1),
+(60,2,'48','Griechisch','48',943,960,7,1,1),
+(61,2,'49','Andere Sprachen','49',961,982,7,1,1),
+(62,2,'50','Naturwissenschaften','50',985,1004,8,1,1),
+(63,2,'51','Mathematik','51',1005,1024,8,1,1),
+(64,2,'52','Astronomie','52',1025,1044,8,1,1),
+(65,2,'53','Physik','53',1045,1066,8,1,1),
+(66,2,'54','Chemie','54',1067,1084,8,1,1),
+(67,2,'55','Geowissenschaften, Geologie','55',1085,1106,8,1,1),
+(68,2,'56','Fossilien, Paläontologie','56',1107,1128,8,1,1),
+(69,2,'57','Biowissenschaften, Biologie','57',1129,1148,8,1,1),
+(70,2,'58','Pflanzen (Botanik)','58',1149,1168,8,1,1),
+(71,2,'59','Tiere (Zoologie)','59',1169,1190,8,1,1),
+(72,2,'60','Technik','60',1193,1214,9,1,1),
+(73,2,'61','Medizin und Gesundheit','61',1215,1234,9,1,1),
+(74,2,'62','Ingenieurwissenschaften','62',1235,1254,9,1,1),
+(75,2,'63','Landwirtschaft','63',1255,1276,9,1,1),
+(76,2,'64','Hauswirtschaft und Familie','64',1277,1298,9,1,1),
+(77,2,'65','Management, Öffentlichkeitsarbeit','65',1299,1314,9,1,1),
+(78,2,'66','Chemische Verfahrenstechnik','66',1315,1336,9,1,1),
+(79,2,'67','Industrielle Fertigung','67',1337,1358,9,1,1),
+(80,2,'68','Industrielle Fertigung für einzelne Verwendungszwecke','68',1359,1378,9,0,1),
+(81,2,'69','Hausbau, Bauhandwerk','69',1379,1398,9,1,1),
+(82,2,'70','Künste','70',1401,1422,10,1,1),
+(83,2,'71','Landschaftsgestaltung, Raumplanung','71',1423,1444,10,1,1),
+(84,2,'72','Architektur','72',1445,1466,10,1,1),
+(85,2,'73','Bildhauerkunst, Keramik, Metallkunst','73',1467,1488,10,1,1),
+(86,2,'74','Zeichnung, angewandte Kunst','74',1489,1510,10,1,1),
+(87,2,'75','Malerei','75',1511,1530,10,1,1),
+(88,2,'76','Grafik','76',1531,1548,10,1,1),
+(89,2,'77','Fotografie, Computerkunst','77',1549,1568,10,1,1),
+(90,2,'78','Musik','78',1569,1590,10,1,1),
+(91,2,'79','Sport, Spiele, Unterhaltung','79',1591,1612,10,1,1),
+(92,2,'80','Literatur, Rhetorik, Literaturwissenschaft','80',1615,1634,11,1,1),
+(93,2,'81','Amerikanische Literatur in Englisch','81',1635,1656,11,1,1),
+(94,2,'82','Englische, altenglische Literaturen','82',1657,1678,11,1,1),
+(95,2,'83','Deutsche und verwandte Literaturen','83',1679,1700,11,1,1),
+(96,2,'84','Französische und verwandte Literaturen','84',1701,1722,11,1,1),
+(97,2,'85','Italienische, rumänische, rätoromanische Literaturen','85',1723,1744,11,1,1),
+(98,2,'86','Spanische, portugiesische Literaturen','86',1745,1766,11,1,1),
+(99,2,'87','Lateinische, italische Literaturen','87',1767,1788,11,1,1),
+(100,2,'88','Griechische Literaturen','88',1789,1810,11,1,1),
+(101,2,'89','Andere Literaturen','89',1811,1832,11,1,1),
+(102,2,'90','Geschichte','90',1835,1856,12,1,1),
+(103,2,'91','Geografie, Reisen','91',1857,1880,12,1,1),
+(104,2,'92','Biografie, Genealogie','92',1881,1902,12,1,1),
+(105,2,'93','Geschichte des Altertums (bis ca. 499), Archäologie','93',1903,1924,12,1,1),
+(106,2,'94','Geschichte Europas','94',1925,1946,12,1,1),
+(107,2,'95','Geschichte Asiens','95',1947,1968,12,1,1),
+(108,2,'96','Geschichte Afrikas','96',1969,1990,12,1,1),
+(109,2,'97','Geschichte Nordamerikas','97',1991,2012,12,1,1),
+(110,2,'98','Geschichte Südamerikas','98',2013,2034,12,1,1),
+(111,2,'99','Geschichte anderer Gebiete','99',2035,2052,12,1,1),
+(112,2,'000','Informatik, Informationswissenschaft, allgemeine Werke','000',4,5,13,1,1),
+(113,2,'001','Wissen','001',6,7,13,0,1),
+(114,2,'002','Das Buch','002',8,9,13,0,1),
+(115,2,'003','Systeme','003',10,11,13,0,1),
+(116,2,'004','Datenverarbeitung, Informatik','004',12,13,13,1,1),
+(117,2,'005','Computerprogrammierung, Programme, Daten','005',14,15,13,0,1),
+(118,2,'006','Spezielle Computerverfahren','006',16,17,13,0,1),
+(119,2,'010','Bibliografie','010',20,21,14,0,1),
+(120,2,'011','Bibliografien','011',22,23,14,0,1),
+(121,2,'012','Bibliografien von Einzelpersonen','012',24,25,14,0,1),
+(122,2,'014','Bibliografien anonymer und pseudonymer Werke','014',26,27,14,0,1),
+(123,2,'015','Bibliografien von Werken aus einzelnen Orten','015',28,29,14,0,1),
+(124,2,'016','Bibliografien von Werken über einzelne Themen','016',30,31,14,0,1),
+(125,2,'017','Allgemeine Sachkataloge','017',32,33,14,0,1),
+(126,2,'018','Kataloge nach Autor, Erscheinungsjahr usw.','018',34,35,14,0,1),
+(127,2,'019','Kreuzkataloge','019',36,37,14,0,1),
+(128,2,'020','Bibliotheks- und Informationswissenschaften','020',40,41,15,0,1),
+(129,2,'021','Beziehungen zwischen Bibliotheken','021',42,43,15,0,1),
+(130,2,'022','Verwaltung von Bibliotheksgebäuden','022',44,45,15,0,1),
+(131,2,'023','Personalmanagement','023',46,47,15,0,1),
+(132,2,'025','Bibliothekarische Tätigkeiten','025',48,49,15,0,1),
+(133,2,'026','Spezialbibliotheken','026',50,51,15,0,1),
+(134,2,'027','Allgemeinbibliotheken','027',52,53,15,0,1),
+(135,2,'028','Lesen und Nutzung anderer Informationsmedien','028',54,55,15,0,1),
+(136,2,'030','Allgemeinenzyklopädien','030',58,59,16,0,1),
+(137,2,'031','Enzyklopädien in amerikanischem Englisch','031',60,61,16,0,1),
+(138,2,'032','Enzyklopädien in Englisch','032',62,63,16,0,1),
+(139,2,'033','Enzyklopädien in Deutsch und Niederländisch','033',64,65,16,0,1),
+(140,2,'034','Enzyklopädien in Französisch, Okzitanisch und Katalanisch','034',66,67,16,0,1),
+(141,2,'035','Enzyklopädien in Italienisch, Rumänisch und Rätoromanisch','035',68,69,16,0,1),
+(142,2,'036','Enzyklopädien in Spanisch und Portugiesisch','036',70,71,16,0,1),
+(143,2,'037','Enzyklopädien in slawischen Sprachen','037',72,73,16,0,1),
+(144,2,'038','Enzyklopädien in skandinavischen Sprachen','038',74,75,16,0,1),
+(145,2,'039','Enzyklopädien in anderen Sprachen','039',76,77,16,0,1),
+(146,2,'050','Zeitschriften, allgemeine fortlaufende Sammelwerke','050',80,81,17,0,1),
+(147,2,'051','Fortlaufende Sammelwerke in amerikanischem Englisch','051',82,83,17,0,1),
+(148,2,'052','Fortlaufende Sammelwerke in Englisch','052',84,85,17,0,1),
+(149,2,'053','Fortlaufende Sammelwerke in Deutsch und Niederländisch','053',86,87,17,0,1),
+(150,2,'054','Fortlaufende Sammelwerke in Französisch, Okzitanisch und Katalanisch','054',88,89,17,0,1),
+(151,2,'055','Fortlaufende Sammelwerke in Italienisch, Rumänisch und Rätoromanisch','055',90,91,17,0,1),
+(152,2,'056','Fortlaufende Sammelwerke in Spanisch und Portugiesisch','056',92,93,17,0,1),
+(153,2,'057','Fortlaufende Sammelwerke in slawischen Sprachen','057',94,95,17,0,1),
+(154,2,'058','Fortlaufende Sammelwerke in skandinavischen Sprachen','058',96,97,17,0,1),
+(155,2,'059','Fortlaufende Sammelwerke in anderen Sprachen','059',98,99,17,0,1),
+(156,2,'060','Allgemeine Organisationen, Museumswissenschaft','060',102,103,18,0,1),
+(157,2,'061','Allgemeine Organisationen in Nordamerika','061',104,105,18,0,1),
+(158,2,'062','Allgemeine Organisationen auf den Britischen Inseln, in England','062',106,107,18,0,1),
+(159,2,'063','Allgemeine Organisationen in Mitteleuropa, in Deutschland','063',108,109,18,0,1),
+(160,2,'064','Allgemeine Organisationen in Frankreich und Monaco','064',110,111,18,0,1),
+(161,2,'065','Allgemeine Organisationen in Italien und auf benachbarten Inseln','065',112,113,18,0,1),
+(162,2,'066','Allgemeine Organisationen auf der Iberischen Halbinsel und benachbarten Inseln','066',114,115,18,0,1),
+(163,2,'067','Allgemeine Organisationen in Osteuropa, in Russland','067',116,117,18,0,1),
+(164,2,'068','Allgemeine Organisationen in anderen geografischen Gebieten','068',118,119,18,0,1),
+(165,2,'069','Museumswissenschaft','069',120,121,18,0,1),
+(166,2,'070','Publizistische Medien, Journalismus, Verlagswesen','070',124,125,19,0,1),
+(167,2,'071','Journalismus und Zeitungen in Nordamerika','071',126,127,19,0,1),
+(168,2,'072','Journalismus und Zeitungen auf den Britischen Inseln, in England','072',128,129,19,0,1),
+(169,2,'073','Journalismus und Zeitungen in Mitteleuropa, in Deutschland','073',130,131,19,0,1),
+(170,2,'074','Journalismus und Zeitungen in Frankreich und Monaco','074',132,133,19,0,1),
+(171,2,'075','Journalismus und Zeitungen in Italien und auf benachbarten Inseln','075',134,135,19,0,1),
+(172,2,'076','Journalismus und Zeitungen auf der Iberischen Halbinsel und benachbarten Inseln','076',136,137,19,0,1),
+(173,2,'077','Journalismus und Zeitungen in Osteuropa, in Russland','077',138,139,19,0,1),
+(174,2,'078','Journalismus und Zeitungen in Skandinavien','078',140,141,19,0,1),
+(175,2,'079','Journalismus und Zeitungen in anderen geografischen Gebieten','079',142,143,19,0,1),
+(176,2,'080','Allgemeine Sammelwerke, Zitatensammlungen','080',146,147,20,0,1),
+(177,2,'081','Sammelwerke in amerikanischem Englisch','081',148,149,20,0,1),
+(178,2,'082','Sammelwerke in Englisch','082',150,151,20,0,1),
+(179,2,'083','Sammelwerke in Deutsch und Niederländisch','083',152,153,20,0,1),
+(180,2,'084','Sammelwerke in Französisch, Okzitanisch und Katalanisch','084',154,155,20,0,1),
+(181,2,'085','Sammelwerke in Italienisch, Rumänisch und Rätoromanisch','085',156,157,20,0,1),
+(182,2,'086','Sammelwerke in Spanisch und Portugiesisch','086',158,159,20,0,1),
+(183,2,'087','Sammelwerke in slawischen Sprachen','087',160,161,20,0,1),
+(184,2,'088','Sammelwerke in skandinavischen Sprachen','088',162,163,20,0,1),
+(185,2,'089','Sammelwerke in anderen Sprachen','089',164,165,20,0,1),
+(186,2,'090','Handschriften, seltene Bücher','090',168,169,21,0,1),
+(187,2,'091','Handschriften','091',170,171,21,0,1),
+(188,2,'092','Blockbücher','092',172,173,21,0,1),
+(189,2,'093','Inkunabeln','093',174,175,21,0,1),
+(190,2,'094','Gedruckte Bücher','094',176,177,21,0,1),
+(191,2,'095','Bücher mit besonderem Einband','095',178,179,21,0,1),
+(192,2,'096','Bücher mit besonderen Illustrationen','096',180,181,21,0,1),
+(193,2,'097','Bücher aus besonderem Besitz oder besonderer Herkunft','097',182,183,21,0,1),
+(194,2,'098','Verbotene Werke, Fälschungen, Scherzdrucke','098',184,185,21,0,1),
+(195,2,'099','Bücher mit besonderem Format','099',186,187,21,0,1),
+(196,2,'100','Philosophie und Psychologie','100',192,193,22,0,1),
+(197,2,'101','Theorie der Philosophie','101',194,195,22,0,1),
+(198,2,'102','Verschiedenes','102',196,197,22,0,1),
+(199,2,'103','Wörterbücher, Enzyklopädien','103',198,199,22,0,1),
+(200,2,'105','Fortlaufende Sammelwerke','105',200,201,22,0,1),
+(201,2,'106','Organisationen, Management','106',202,203,22,0,1),
+(202,2,'107','Ausbildung, Forschung, verwandte Themen','107',204,205,22,0,1),
+(203,2,'108','Behandlung nach Personengruppen','108',206,207,22,0,1),
+(204,2,'109','Histor. Behandlung, Behandlung mehrerer Einzelpersonen','109',208,209,22,0,1),
+(205,2,'110','Metaphysik','110',212,213,23,1,1),
+(206,2,'111','Ontologie','111',214,215,23,1,1),
+(207,2,'113','Kosmologie','113',216,217,23,1,1),
+(208,2,'114','Raum','114',218,219,23,1,1),
+(209,2,'115','Zeit','115',220,221,23,1,1),
+(210,2,'116','Veränderung','116',222,223,23,1,1),
+(211,2,'117','Struktur','117',224,225,23,1,1),
+(212,2,'118','Kraft und Energie','118',226,227,23,1,1),
+(213,2,'119','Zahl und Quantität','119',228,229,23,1,1),
+(214,2,'120','Epistemologie, Kausalität, Menschheit','120',232,233,24,1,1),
+(215,2,'121','Epistemologie','121',234,235,24,1,1),
+(216,2,'122','Kausalität','122',236,237,24,1,1),
+(217,2,'123','Determinismus, Indeterminismus','123',238,239,24,1,1),
+(218,2,'124','Teleologie','124',240,241,24,1,1),
+(219,2,'126','Das Selbst','126',242,243,24,1,1),
+(220,2,'127','Das Unbewusste, das Unterbewusste','127',244,245,24,1,1),
+(221,2,'128','Menschheit','128',246,247,24,1,1),
+(222,2,'129','Ursprung und Schicksal individueller Seelen','129',248,249,24,1,1),
+(223,2,'130','Parapsychologie und Okkultismus','130',252,253,25,0,1),
+(224,2,'131','Parapsychologische und okkulte Techniken','131',254,255,25,0,1),
+(225,2,'133','Einzelne Themen der Parapsychologie und des Okkultismus','133',256,257,25,0,1),
+(226,2,'135','Träume, Mysterien','135',258,259,25,0,1),
+(227,2,'137','Divinatorische Graphologie','137',260,261,25,0,1),
+(228,2,'138','Physiognomie','138',262,263,25,0,1),
+(229,2,'139','Phrenologie','139',264,265,25,0,1),
+(230,2,'140','Einzelne philosophische Schulen','140',268,269,26,1,1),
+(231,2,'141','Idealismus und verwandte Systeme','141',270,271,26,1,1),
+(232,2,'142','Kritizismus','142',272,273,26,1,1),
+(233,2,'143','Bergsonismus, Intuitionismus','143',274,275,26,1,1),
+(234,2,'144','Humanismus und verwandte Systeme','144',276,277,26,1,1),
+(235,2,'145','Sensualismus','145',278,279,26,1,1),
+(236,2,'146','Naturalismus und verwandte Systeme','146',280,281,26,1,1),
+(237,2,'147','Pantheismus und verwandte Systeme','147',282,283,26,1,1),
+(238,2,'148','Eklektizismus, Liberalismus, Traditionalismus','148',284,285,26,1,1),
+(239,2,'149','Andere philosophische Systeme','149',286,287,26,1,1),
+(240,2,'150','Psychologie','150',290,291,27,0,1),
+(241,2,'152','Sinneswahrnehmung, Bewegung, Emotionen, Triebe','152',292,293,27,0,1),
+(242,2,'153','Kognitive Prozesse, Intelligenz','153',294,295,27,0,1),
+(243,2,'154','Unterbewusste und bewusstseinsveränderte Zustände','154',296,297,27,0,1),
+(244,2,'155','Differentielle Psychologie, Entwicklungspsychologie','155',298,299,27,0,1),
+(245,2,'156','Vergleichende Psychologie','156',300,301,27,0,1),
+(246,2,'158','Angewandte Psychologie','158',302,303,27,0,1),
+(247,2,'160','Logik','160',306,307,28,1,1),
+(248,2,'161','Induktion','161',308,309,28,1,1),
+(249,2,'162','Deduktion','162',310,311,28,1,1),
+(250,2,'165','Fehlschlüsse, Fehlerquellen','165',312,313,28,1,1),
+(251,2,'166','Syllogismen','166',314,315,28,1,1),
+(252,2,'167','Hypothesen','167',316,317,28,1,1),
+(253,2,'168','Argument, Überzeugungung','168',318,319,28,1,1),
+(254,2,'169','Analogie','169',320,321,28,1,1),
+(255,2,'170','Ethik','170',324,325,29,1,1),
+(256,2,'171','Ethische Systeme','171',326,327,29,1,1),
+(257,2,'172','Politische Ethik','172',328,329,29,1,1),
+(258,2,'173','Familienethik','173',330,331,29,1,1),
+(259,2,'174','Berufsethik','174',332,333,29,1,1),
+(260,2,'175','Ethik von Freizeit und Erholung','175',334,335,29,1,1),
+(261,2,'176','Sexual- und Reproduktionsethik','176',336,337,29,1,1),
+(262,2,'177','Ethik sozialer Beziehungen','177',338,339,29,1,1),
+(263,2,'178','Konsumethik','178',340,341,29,1,1),
+(264,2,'179','Andere ethische Normen','179',342,343,29,1,1),
+(265,2,'180','Antike, mittelalterliche und östliche Philosophie','180',346,347,30,1,1),
+(266,2,'181','Östliche Philosophie','181',348,349,30,1,1),
+(267,2,'182','Vorsokratische griechische Philosophien','182',350,351,30,1,1),
+(268,2,'183','Sokratische und verwandte Philosophien','183',352,353,30,1,1),
+(269,2,'184','Platonische Philosophie','184',354,355,30,1,1),
+(270,2,'185','Aristotelische Philosophie','185',356,357,30,1,1),
+(271,2,'186','Skeptische und neuplatonische Philosophien','186',358,359,30,1,1),
+(272,2,'187','Epikureische Philosophie','187',360,361,30,1,1),
+(273,2,'188','Stoische Philosophie','188',362,363,30,1,1),
+(274,2,'189','Mittelalterliche westliche Philosophie','189',364,365,30,1,1),
+(275,2,'190','Neuzeitliche westliche Philosophie','190',368,369,31,1,1),
+(276,2,'191','Philosophie in den USA und Kanada','191',370,371,31,1,1),
+(277,2,'192','Philosophie auf den Britischen Inseln','192',372,373,31,1,1),
+(278,2,'193','Philosophie in Deutschland und Österreich','193',374,375,31,1,1),
+(279,2,'194','Philosophie in Frankreich','194',376,377,31,1,1),
+(280,2,'195','Philosophie in Italien','195',378,379,31,1,1),
+(281,2,'196','Philosophie in Spanien und Portugal','196',380,381,31,1,1),
+(282,2,'197','Philosophie in Russland und der früheren Sowjetunion','197',382,383,31,1,1),
+(283,2,'198','Philosophie in Skandinavien','198',384,385,31,1,1),
+(284,2,'199','Philosophie in anderen geografischen Gebieten','199',386,387,31,1,1),
+(285,2,'200','Religion','200',392,393,32,0,1),
+(286,2,'201','Religiöse Mythologie, Soziallehre','201',394,395,32,0,1),
+(287,2,'202','Lehren','202',396,397,32,0,1),
+(288,2,'203','Gottesdienst und andere Formen der öffentlichen Religionsausübung','203',398,399,32,0,1),
+(289,2,'204','Religiöse Erfahrung, religiöses Leben, religiöse Praxis','204',400,401,32,0,1),
+(290,2,'205','Religiöse Ethik','205',402,403,32,0,1),
+(291,2,'206','Religiöse Führer und Organisation','206',404,405,32,0,1),
+(292,2,'207','Mission, religiöse Erziehung','207',406,407,32,0,1),
+(293,2,'208','Quellen','208',408,409,32,0,1),
+(294,2,'209','Sekten, Reformbewegungen','209',410,411,32,0,1),
+(295,2,'210','Religionsphilosophie, Religionstheorie','210',414,415,33,1,1),
+(296,2,'211','Gottesvorstellungen','211',416,417,33,1,1),
+(297,2,'212','Gottesfrage, Gotteserkenntnis, Eigenschaften Gottes','212',418,419,33,1,1),
+(298,2,'213','Schöpfung','213',420,421,33,1,1),
+(299,2,'214','Theodizee','214',422,423,33,1,1),
+(300,2,'215','Naturwissenschaft und Religion','215',424,425,33,1,1),
+(301,2,'218','Der Mensch','218',426,427,33,1,1),
+(302,2,'220','Bibel','220',430,431,34,0,1),
+(303,2,'221','Altes Testament (Tenach)','221',432,433,34,0,1),
+(304,2,'222','Geschichtsbücher des Alten Testaments','222',434,435,34,0,1),
+(305,2,'223','Poetische Bücher des Alten Testaments','223',436,437,34,0,1),
+(306,2,'224','Prophetische Bücher des Alten Testaments','224',438,439,34,0,1),
+(307,2,'225','Neues Testament','225',440,441,34,0,1),
+(308,2,'226','Evangelien, Apostelgeschichte','226',442,443,34,0,1),
+(309,2,'227','Briefe','227',444,445,34,0,1),
+(310,2,'228','Johannes-Apokalypse (Offenbarung des Johannes)','228',446,447,34,0,1),
+(311,2,'229','Apokryphen, Pseudepigraphen','229',448,449,34,0,1),
+(312,2,'230','Christentum, Christliche Theologie','230',452,453,35,0,1),
+(313,2,'231','Gott','231',454,455,35,0,1),
+(314,2,'232','Jesus Christus und seine Familie','232',456,457,35,0,1),
+(315,2,'233','Der Mensch','233',458,459,35,0,1),
+(316,2,'234','Erlösung, Gnade','234',460,461,35,0,1),
+(317,2,'235','Geistliche Wesen','235',462,463,35,0,1),
+(318,2,'236','Eschatologie','236',464,465,35,0,1),
+(319,2,'238','Glaubensbekenntnisse, Katechismen','238',466,467,35,0,1),
+(320,2,'239','Apologetik, Polemik','239',468,469,35,0,1),
+(321,2,'240','Christliche Ethik, spirituelle Theologie','240',472,473,36,1,1),
+(322,2,'241','Christliche Ethik','241',474,475,36,1,1),
+(323,2,'242','Erbauungsliteratur','242',476,477,36,1,1),
+(324,2,'243','Evangelistisches Schrifttum für Einzelpersonen','243',478,479,36,1,1),
+(325,2,'246','Kunst im Christentum','246',480,481,36,1,1),
+(326,2,'247','Kirchenausstattung, liturgisches Gerät','247',482,483,36,1,1),
+(327,2,'248','Christliche Erfahrung, christliche Praxis, christliches Leben','248',484,485,36,1,1),
+(328,2,'249','Christliches Leben in der Familie','249',486,487,36,1,1),
+(329,2,'250','Christliche Orden und Ortskirchen','250',490,491,37,1,1),
+(330,2,'251','Homiletik','251',492,493,37,1,1),
+(331,2,'252','Predigttexte','252',494,495,37,1,1),
+(332,2,'253','Pastoraltheologie','253',496,497,37,1,1),
+(333,2,'254','Gemeindeverwaltung','254',498,499,37,1,1),
+(334,2,'255','Religiöse Kongregationen und Orden','255',500,501,37,1,1),
+(335,2,'259','Familienseelsorge, Kategorialseelsorge','259',502,503,37,1,1),
+(336,2,'260','Soziallehre, Ekklesiologie','260',506,507,38,1,1),
+(337,2,'261','Soziallehre','261',508,509,38,1,1),
+(338,2,'262','Ekklesiologie','262',510,511,38,1,1),
+(339,2,'263','Heilige Tage, Zeiten und Orte','263',512,513,38,1,1),
+(340,2,'264','Öffentliche Religionsausübung','264',514,515,38,1,1),
+(341,2,'265','Sakramente, andere Riten und Handlungen','265',516,517,38,1,1),
+(342,2,'266','Mission','266',518,519,38,1,1),
+(343,2,'267','Religiöse Verbände','267',520,521,38,1,1),
+(344,2,'268','Religiöse Erziehung','268',522,523,38,1,1),
+(345,2,'269','Geistliche Erneuerung','269',524,525,38,1,1),
+(346,2,'270','Geschichte des Christentums, Kirchengeschichte','270',528,529,39,1,1),
+(347,2,'271','Religiöse Orden in der Kirchengeschichte','271',530,531,39,1,1),
+(348,2,'272','Verfolgung in der Kirchengeschichte','272',532,533,39,1,1),
+(349,2,'273','Dogmatische Kontroversen, Häresie','273',534,535,39,1,1),
+(350,2,'274','Geschichte des Christentums in Europa','274',536,537,39,1,1),
+(351,2,'275','Geschichte des Christentums in Asien','275',538,539,39,1,1),
+(352,2,'276','Geschichte des Christentums in Afrika','276',540,541,39,1,1),
+(353,2,'277','Geschichte des Christentums in Nordamerika','277',542,543,39,1,1),
+(354,2,'278','Geschichte des Christentums in Südamerika','278',544,545,39,1,1),
+(355,2,'279','Geschichte des Christentums in anderen Gebieten','279',546,547,39,1,1),
+(356,2,'280','Christliche Konfessionen und Sekten','280',550,551,40,1,1),
+(357,2,'281','Alte Kirche, Ostkirchen','281',552,553,40,1,1),
+(358,2,'282','Römisch-Katholische Kirche','282',554,555,40,1,1),
+(359,2,'283','Anglikanische Kirchen','283',556,557,40,1,1),
+(360,2,'284','Protestanten kontinentaleuropäischen Ursprungs','284',558,559,40,1,1),
+(361,2,'285','Presbyterianer, Reformierte, Kongregationalisten','285',560,561,40,1,1),
+(362,2,'286','Baptisten, Disciples of Christ, Adventisten','286',562,563,40,1,1),
+(363,2,'287','Methodisten und verwandte Kirchen','287',564,565,40,1,1),
+(364,2,'289','Andere Konfessionen und Sekten','289',566,567,40,1,1),
+(365,2,'290','Andere Religionen','290',570,571,41,0,1),
+(366,2,'292','Griechische und römische Religion','292',572,573,41,0,1),
+(367,2,'293','Germanische Religion','293',574,575,41,0,1),
+(368,2,'294','Religionen indischen Ursprungs','294',576,577,41,0,1),
+(369,2,'295','Parsismus','295',578,579,41,0,1),
+(370,2,'296','Judentum','296',580,581,41,0,1),
+(371,2,'297','Islam, Babismus, Bahaismus','297',582,583,41,0,1),
+(372,2,'298','(Optionale Notation)','298',584,585,41,0,1),
+(373,2,'299','An anderer Stelle nicht vorgesehene Religionen','299',586,587,41,0,1),
+(374,2,'300','Sozialwissenschaften','300',592,593,42,0,1),
+(375,2,'301','Soziologie, Anthropologie','301',594,595,42,0,1),
+(376,2,'302','Soziale Interaktion','302',596,597,42,0,1),
+(377,2,'303','Gesellschaftliche Prozesse','303',598,599,42,0,1),
+(378,2,'304','Das Sozialverhalten beeinflussende Faktoren','304',600,601,42,0,1),
+(379,2,'305','Soziale Gruppen','305',602,603,42,0,1),
+(380,2,'306','Kultur und Institutionen','306',604,605,42,0,1),
+(381,2,'307','Gemeinschaften','307',606,607,42,0,1),
+(382,2,'310','Sammlungen allgemeiner Statistiken','310',610,611,43,0,1),
+(383,2,'314','Allgemeine Statistiken zu Europa','314',612,613,43,0,1),
+(384,2,'315','Allgemeine Statistiken zu Asien','315',614,615,43,0,1),
+(385,2,'316','Allgemeine Statistiken zu Afrika','316',616,617,43,0,1),
+(386,2,'317','Allgemeine Statistiken zu Nordamerika','317',618,619,43,0,1),
+(387,2,'318','Allgemeine Statistiken zu Südamerika','318',620,621,43,0,1),
+(388,2,'319','Allgemeine Statistiken zu anderen Gebieten','319',622,623,43,0,1),
+(389,2,'320','Politikwissenschaft','320',626,627,44,0,1),
+(390,2,'321','Staatsformen und Regierungssysteme','321',628,629,44,0,1),
+(391,2,'322','Beziehungen des Staats zu organisierten Gruppen','322',630,631,44,0,1),
+(392,2,'323','Grundrechte und politische Rechte','323',632,633,44,0,1),
+(393,2,'324','Der politische Prozess','324',634,635,44,0,1),
+(394,2,'325','Internationale Migration, Kolonisation','325',636,637,44,0,1),
+(395,2,'326','Sklaverei und Sklavenbefreiung','326',638,639,44,0,1),
+(396,2,'327','Internationale Beziehungen','327',640,641,44,0,1),
+(397,2,'328','Der Gesetzgebungsprozess','328',642,643,44,0,1),
+(398,2,'330','Wirtschaft','330',646,647,45,0,1),
+(399,2,'331','Arbeitsökonomie','331',648,649,45,0,1),
+(400,2,'332','Finanzwirtschaft','332',650,651,45,0,1),
+(401,2,'333','Boden- und Energiewirtschaft','333',652,653,45,0,1),
+(402,2,'334','Genossenschaften','334',654,655,45,0,1),
+(403,2,'335','Sozialismus und verwandte Systeme','335',656,657,45,0,1),
+(404,2,'336','Öffentliche Finanzen','336',658,659,45,0,1),
+(405,2,'337','Weltwirtschaft','337',660,661,45,0,1),
+(406,2,'338','Produktion','338',662,663,45,0,1),
+(407,2,'339','Makroökonomie und verwandte Themen','339',664,665,45,0,1),
+(408,2,'340','Recht','340',668,669,46,0,1),
+(409,2,'341','Völkerrecht','341',670,671,46,0,1),
+(410,2,'342','Verfassungs- und Verwaltungsrecht','342',672,673,46,0,1),
+(411,2,'343','Wehrrecht, Steuerrecht, Wirtschaftsrecht','343',674,675,46,0,1),
+(412,2,'344','Arbeitsrecht, Sozialrecht, Bildungsrecht, Kulturrecht','344',676,677,46,0,1),
+(413,2,'345','Strafrecht','345',678,679,46,0,1),
+(414,2,'346','Privatrecht','346',680,681,46,0,1),
+(415,2,'347','Zivilprozessrecht, Zivilgerichte','347',682,683,46,0,1),
+(416,2,'348','Gesetze, Verordnungen, Rechtsfälle','348',684,685,46,0,1),
+(417,2,'349','Recht einzelner Gebietskörperschaften und Gebiete','349',686,687,46,0,1),
+(418,2,'350','Öffentliche Verwaltung, Militärwissenschaft','350',690,691,47,1,1),
+(419,2,'351','Öffentliche Verwaltung','351',692,693,47,0,1),
+(420,2,'352','Allgemeines zur öffentlichen Verwaltung','352',694,695,47,0,1),
+(421,2,'353','Einzelne Bereiche der öffentlichen Verwaltung','353',696,697,47,0,1),
+(422,2,'354','Verwaltung von Wirtschaft und Umwelt','354',698,699,47,0,1),
+(423,2,'355','Militärwissenschaft','355',700,701,47,1,1),
+(424,2,'356','Infanterie und Kampfführung','356',702,703,47,0,1),
+(425,2,'357','Kavalleriestreitkräfte und Kampfführung','357',704,705,47,0,1),
+(426,2,'358','Luftstreitkräfte und andere spezialisierte Streitkräfte','358',706,707,47,0,1),
+(427,2,'359','Seestreitkräfte und Kampfführung','359',708,709,47,0,1),
+(428,2,'360','Soziale Probleme und Sozialdienste, Verbände','360',712,713,48,0,1),
+(429,2,'361','Soziale Probleme und Sozialhilfe im Allgemeinen','361',714,715,48,0,1),
+(430,2,'362','Probleme und Dienste der Sozialhilfe','362',716,717,48,0,1),
+(431,2,'363','Andere soziale Probleme und Sozialdienste','363',718,719,48,0,1),
+(432,2,'364','Kriminologie','364',720,721,48,0,1),
+(433,2,'365','Justizvollzugsanstalten und verwandte Einrichtungen','365',722,723,48,0,1),
+(434,2,'366','Verbände','366',724,725,48,0,1),
+(435,2,'367','Allgemeine Klubs','367',726,727,48,0,1),
+(436,2,'368','Versicherungen','368',728,729,48,0,1),
+(437,2,'369','Verschiedene Arten von Verbänden','369',730,731,48,0,1),
+(438,2,'370','Bildung und Erziehung','370',734,735,49,0,1),
+(439,2,'371','Schulen, schulische Tätigkeiten, Sonderpädagogik','371',736,737,49,0,1),
+(440,2,'372','Primar- und Elementarbildung','372',738,739,49,0,1),
+(441,2,'373','Sekundarbildung','373',740,741,49,0,1),
+(442,2,'374','Erwachsenenbildung','374',742,743,49,0,1),
+(443,2,'375','Curricula','375',744,745,49,0,1),
+(444,2,'378','Hochschulbildung','378',746,747,49,0,1),
+(445,2,'379','Bildungspolitik','379',748,749,49,0,1),
+(446,2,'380','Handel, Kommunikation, Verkehr','380',752,753,50,0,1),
+(447,2,'381','Handel','381',754,755,50,0,1),
+(448,2,'382','Internationaler Handel','382',756,757,50,0,1),
+(449,2,'383','Postverkehr','383',758,759,50,0,1),
+(450,2,'384','Kommunikation, Telekommunikation','384',760,761,50,0,1),
+(451,2,'385','Schienenverkehr','385',762,763,50,0,1),
+(452,2,'386','Binnenschifffahrt, Fährverkehr','386',764,765,50,0,1),
+(453,2,'387','Schifffahrt, Luft-, Weltraumverkehr','387',766,767,50,0,1),
+(454,2,'388','Verkehr, Landverkehr','388',768,769,50,0,1),
+(455,2,'389','Metrologie, Normung','389',770,771,50,0,1),
+(456,2,'390','Bräuche, Etikette, Folklore','390',774,775,51,0,1),
+(457,2,'391','Kleidung, äußeres Erscheinungsbild','391',776,777,51,0,1),
+(458,2,'392','Bräuche im Lebenslauf und im häuslichen Leben','392',778,779,51,0,1),
+(459,2,'393','Sterbe- und Bestattungsriten','393',780,781,51,0,1),
+(460,2,'394','Allgemeine Bräuche','394',782,783,51,0,1),
+(461,2,'395','Etikette (Manieren)','395',784,785,51,0,1),
+(462,2,'398','Folklore','398',786,787,51,0,1),
+(463,2,'399','Bräuche des Krieges und der Diplomatie','399',788,789,51,0,1),
+(464,2,'400','Sprache','400',794,795,52,0,1),
+(465,2,'401','Sprachphilosophie, Sprachtheorie','401',796,797,52,0,1),
+(466,2,'402','Verschiedenes','402',798,799,52,0,1),
+(467,2,'403','Wörterbücher, Enzyklopädien','403',800,801,52,0,1),
+(468,2,'404','Spezielle Themen','404',802,803,52,0,1),
+(469,2,'405','Fortlaufende Sammelwerke','405',804,805,52,0,1),
+(470,2,'406','Organisationen, Management','406',806,807,52,0,1),
+(471,2,'407','Ausbildung, Forschung, verwandte Themen','407',808,809,52,0,1),
+(472,2,'408','Behandlung nach Personengruppen','408',810,811,52,0,1),
+(473,2,'409','Geografische, personenbezogene Behandlung','409',812,813,52,0,1),
+(474,2,'410','Linguistik','410',816,817,53,1,1),
+(475,2,'411','Schriftsysteme','411',818,819,53,1,1),
+(476,2,'412','Etymologie','412',820,821,53,1,1),
+(477,2,'413','Wörterbücher','413',822,823,53,1,1),
+(478,2,'414','Phonologie, Phonetik','414',824,825,53,1,1),
+(479,2,'415','Grammatik','415',826,827,53,1,1),
+(480,2,'417','Dialektologie, historische Linguistik','417',828,829,53,1,1),
+(481,2,'418','Standardsprache, Angewandte Linguistik','418',830,831,53,1,1),
+(482,2,'419','Gebärdensprachen','419',832,833,53,1,1),
+(483,2,'420','Englisch, Altenglisch','420',836,837,54,0,1),
+(484,2,'421','Schriftsystem und Phonologie des Englischen','421',838,839,54,0,1),
+(485,2,'422','Etymologie des Englischen','422',840,841,54,0,1),
+(486,2,'423','Englische Wörterbücher','423',842,843,54,0,1),
+(487,2,'425','Englische Grammatik','425',844,845,54,0,1),
+(488,2,'427','Varianten des Englischen, Mittelenglisch','427',846,847,54,0,1),
+(489,2,'428','Gebrauch des Standard-Englisch','428',848,849,54,0,1),
+(490,2,'429','Altenglisch (Angelsächsisch)','429',850,851,54,0,1),
+(491,2,'430','Germanische Sprachen, Deutsch','430',854,855,55,1,1),
+(492,2,'431','Schriftsysteme und Phonologie des Deutschen','431',856,857,55,0,1),
+(493,2,'432','Etymologie des Deutschen','432',858,859,55,0,1),
+(494,2,'433','Deutsche Wörterbücher','433',860,861,55,0,1),
+(495,2,'435','Deutsche Grammatik','435',862,863,55,0,1),
+(496,2,'437','Varianten des Deutschen','437',864,865,55,0,1),
+(497,2,'438','Gebrauch des Standard-Deutsch','438',866,867,55,0,1),
+(498,2,'439','Andere germanische Sprachen','439',868,869,55,1,1),
+(499,2,'440','Romanische Sprachen, Französisch','440',872,873,56,0,1),
+(500,2,'441','Schriftsysteme und Phonologie des Französischen','441',874,875,56,0,1),
+(501,2,'442','Etymologie des Französischen','442',876,877,56,0,1),
+(502,2,'443','Französische Wörterbücher','443',878,879,56,0,1),
+(503,2,'445','Französische Grammatik','445',880,881,56,0,1),
+(504,2,'447','Varianten des Französischen','447',882,883,56,0,1),
+(505,2,'448','Gebrauch des Standard-Französisch','448',884,885,56,0,1),
+(506,2,'449','Okzitanisch, Katalanisch','449',886,887,56,0,1),
+(507,2,'450','Italienisch, Rumänisch, Rätoromanisch','450',890,891,57,0,1),
+(508,2,'451','Schriftsysteme und Phonologie des Italienischen','451',892,893,57,0,1),
+(509,2,'452','Etymologie des Italienischen','452',894,895,57,0,1),
+(510,2,'453','Italienische Wörterbücher','453',896,897,57,0,1),
+(511,2,'455','Italienische Grammatik','455',898,899,57,0,1),
+(512,2,'457','Varianten des Italienischen','457',900,901,57,0,1),
+(513,2,'458','Gebrauch des Standard-Italienisch','458',902,903,57,0,1),
+(514,2,'459','Rumänisch, Rätoromanisch','459',904,905,57,0,1),
+(515,2,'460','Spanisch, Portugiesisch','460',908,909,58,0,1),
+(516,2,'461','Schriftsysteme und Phonologie des Spanischen','461',910,911,58,0,1),
+(517,2,'462','Etymologie des Spanischen','462',912,913,58,0,1),
+(518,2,'463','Spanische Wörterbücher','463',914,915,58,0,1),
+(519,2,'465','Spanische Grammatik','465',916,917,58,0,1),
+(520,2,'467','Varianten des Spanischen','467',918,919,58,0,1),
+(521,2,'468','Gebrauch des Standard-Spanisch','468',920,921,58,0,1),
+(522,2,'469','Portugiesisch','469',922,923,58,0,1),
+(523,2,'470','Italische Sprachen, Latein','470',926,927,59,0,1),
+(524,2,'471','Schriftsysteme und Phonologie des klassischen Latein','471',928,929,59,0,1),
+(525,2,'472','Etymologie des klassischen Latein','472',930,931,59,0,1),
+(526,2,'473','Wörterbücher des klassischen Latein','473',932,933,59,0,1),
+(527,2,'475','Grammatik des klassischen Latein','475',934,935,59,0,1),
+(528,2,'477','Altlatein, Mittellatein, Neulatein, Kirchenlatein, Vulgärlatein','477',936,937,59,0,1),
+(529,2,'478','Gebrauch des klassischen Latein','478',938,939,59,0,1),
+(530,2,'479','Andere italische Sprachen','479',940,941,59,0,1),
+(531,2,'480','Hellenische Sprachen, klassisches Griechisch','480',944,945,60,0,1),
+(532,2,'481','Schriftsysteme und Phonologie des klassischen Griechisch','481',946,947,60,0,1),
+(533,2,'482','Etymologie des klassischen Griechisch','482',948,949,60,0,1),
+(534,2,'483','Wörterbücher des klassischen Griechisch','483',950,951,60,0,1),
+(535,2,'485','Grammatik des klassischen Griechisch','485',952,953,60,0,1),
+(536,2,'487','Vorklassisches Griechisch, Mittelgriechisch','487',954,955,60,0,1),
+(537,2,'488','Gebrauch des klassischen Griechisch','488',956,957,60,0,1),
+(538,2,'489','Andere hellenische Sprachen, Neugriechisch','489',958,959,60,0,1),
+(539,2,'490','Andere Sprachen','490',962,963,61,0,1),
+(540,2,'491','Ostindoeuropäische und keltische Sprachen','491',964,965,61,0,1),
+(541,2,'492','Afroasiatische Sprachen, semitische Sprachen','492',966,967,61,0,1),
+(542,2,'493','Nichtsemitische afroasiatische Sprachen','493',968,969,61,0,1),
+(543,2,'494','Altaische, uralische, paläosibirische, drawidische Sprachen','494',970,971,61,0,1),
+(544,2,'495','Ost- und südostasiatische Sprachen','495',972,973,61,0,1),
+(545,2,'496','Afrikanische Sprachen','496',974,975,61,0,1),
+(546,2,'497','Nordamerikanische Indianersprachen','497',976,977,61,0,1),
+(547,2,'498','Südamerikanische Indianersprachen','498',978,979,61,0,1),
+(548,2,'499','Austronesische und andere Sprachen','499',980,981,61,0,1),
+(549,2,'500','Naturwissenschaften und Mathematik','500',986,987,62,0,1),
+(550,2,'501','Philosophie, Theorie','501',988,989,62,0,1),
+(551,2,'502','Verschiedenes','502',990,991,62,0,1),
+(552,2,'503','Wörterbücher, Enzyklopädien','503',992,993,62,0,1),
+(553,2,'505','Fortlaufende Sammelwerke','505',994,995,62,0,1),
+(554,2,'506','Organisationen, Management','506',996,997,62,0,1),
+(555,2,'507','Ausbildung, Forschung, verwandte Themen','507',998,999,62,0,1),
+(556,2,'508','Naturgeschichte','508',1000,1001,62,0,1),
+(557,2,'509','Histor., geogr., personenbezogene Behandlung','509',1002,1003,62,0,1),
+(558,2,'510','Mathematik','510',1006,1007,63,0,1),
+(559,2,'511','Allgemeine mathematische Prinzipien','511',1008,1009,63,0,1),
+(560,2,'512','Algebra','512',1010,1011,63,0,1),
+(561,2,'513','Arithmetik','513',1012,1013,63,0,1),
+(562,2,'514','Topologie','514',1014,1015,63,0,1),
+(563,2,'515','Analysis','515',1016,1017,63,0,1),
+(564,2,'516','Geometrie','516',1018,1019,63,0,1),
+(565,2,'518','Numerische Analysis','518',1020,1021,63,0,1),
+(566,2,'519','Wahrscheinlichkeiten, angewandte Mathematik','519',1022,1023,63,0,1),
+(567,2,'520','Astronomie und zugeordnete Wissenschaften','520',1026,1027,64,0,1),
+(568,2,'521','Himmelsmechanik','521',1028,1029,64,0,1),
+(569,2,'522','Techniken, Ausstattung, Materialien','522',1030,1031,64,0,1),
+(570,2,'523','Einzelne Himmelskörper und Himmelsphänomene','523',1032,1033,64,0,1),
+(571,2,'525','Erde (Astronomische Geografie)','525',1034,1035,64,0,1),
+(572,2,'526','Mathematische Geografie','526',1036,1037,64,0,1),
+(573,2,'527','Astronavigation','527',1038,1039,64,0,1),
+(574,2,'528','Ephemeriden','528',1040,1041,64,0,1),
+(575,2,'529','Chronologie','529',1042,1043,64,0,1),
+(576,2,'530','Physik','530',1046,1047,65,0,1),
+(577,2,'531','Klassische Mechanik, Festkörpermechanik','531',1048,1049,65,0,1),
+(578,2,'532','Mechanik der Fluide, Mechanik der Flüssigkeiten','532',1050,1051,65,0,1),
+(579,2,'533','Gasmechanik','533',1052,1053,65,0,1),
+(580,2,'534','Schall und verwandte Schwingungen','534',1054,1055,65,0,1),
+(581,2,'535','Licht, Infrarot- und Ultraviolettphänomene','535',1056,1057,65,0,1),
+(582,2,'536','Wärme','536',1058,1059,65,0,1),
+(583,2,'537','Elektrizität, Elektronik','537',1060,1061,65,0,1),
+(584,2,'538','Magnetismus','538',1062,1063,65,0,1),
+(585,2,'539','Moderne Physik','539',1064,1065,65,0,1),
+(586,2,'540','Chemie und zugeordnete Wissenschaften','540',1068,1069,66,0,1),
+(587,2,'541','Physikalische Chemie','541',1070,1071,66,0,1),
+(588,2,'542','Techniken, Ausstattung, Materialien','542',1072,1073,66,0,1),
+(589,2,'543','Analytische Chemie','543',1074,1075,66,0,1),
+(590,2,'546','Anorganische Chemie','546',1076,1077,66,0,1),
+(591,2,'547','Organische Chemie','547',1078,1079,66,0,1),
+(592,2,'548','Kristallografie','548',1080,1081,66,0,1),
+(593,2,'549','Mineralogie','549',1082,1083,66,0,1),
+(594,2,'550','Geowissenschaften','550',1086,1087,67,0,1),
+(595,2,'551','Geologie, Hydrologie, Meteorologie','551',1088,1089,67,0,1),
+(596,2,'552','Petrologie','552',1090,1091,67,0,1),
+(597,2,'553','Lagerstättenkunde','553',1092,1093,67,0,1),
+(598,2,'554','Geowissenschaften Europas','554',1094,1095,67,0,1),
+(599,2,'555','Geowissenschaften Asiens','555',1096,1097,67,0,1),
+(600,2,'556','Geowissenschaften Afrikas','556',1098,1099,67,0,1),
+(601,2,'557','Geowissenschaften Nordamerikas','557',1100,1101,67,0,1),
+(602,2,'558','Geowissenschaften Südamerikas','558',1102,1103,67,0,1),
+(603,2,'559','Geowissenschaften anderer Gebiete','559',1104,1105,67,0,1),
+(604,2,'560','Paläontologie, Paläozoologie','560',1108,1109,68,0,1),
+(605,2,'561','Paläobotanik, fossile Mikroorganismen','561',1110,1111,68,0,1),
+(606,2,'562','Fossile Evertebrata (Wirbellose)','562',1112,1113,68,0,1),
+(607,2,'563','Fossile Wirbellose des Meeres und der Meeresküste','563',1114,1115,68,0,1),
+(608,2,'564','Fossile Mollusca (Weichtiere), Tentaculata (Kranzfühler)','564',1116,1117,68,0,1),
+(609,2,'565','Fossile Arthropoden (Gliederfüßer)','565',1118,1119,68,0,1),
+(610,2,'566','Fossile Chordata (Chordatiere)','566',1120,1121,68,0,1),
+(611,2,'567','Fossile wechselwarme Wirbeltiere, fossile Pisces (Fische)','567',1122,1123,68,0,1),
+(612,2,'568','Fossile Aves (Vögel)','568',1124,1125,68,0,1),
+(613,2,'569','Fossile Mammalia (Säugetiere)','569',1126,1127,68,0,1),
+(614,2,'570','Biowissenschaften, Biologie','570',1130,1131,69,0,1),
+(615,2,'571','Physiologie und verwandte Themen','571',1132,1133,69,0,1),
+(616,2,'572','Biochemie','572',1134,1135,69,0,1),
+(617,2,'573','Einzelne physiologische Systeme bei Tieren','573',1136,1137,69,0,1),
+(618,2,'575','Einzelne Teile von und physiologische Systeme bei Pflanzen','575',1138,1139,69,0,1),
+(619,2,'576','Genetik und Evolution','576',1140,1141,69,0,1),
+(620,2,'577','Ökologie','577',1142,1143,69,0,1),
+(621,2,'578','Naturgeschichte von Organismen','578',1144,1145,69,0,1),
+(622,2,'579','Mikroorganismen, Pilze, Algen','579',1146,1147,69,0,1),
+(623,2,'580','Pflanzen (Botanik)','580',1150,1151,70,0,1),
+(624,2,'581','Einzelne Themen in der Naturgeschichte','581',1152,1153,70,0,1),
+(625,2,'582','Pflanzen mit spezifischen Merkmalen und Blüten','582',1154,1155,70,0,1),
+(626,2,'583','Magnoliopsida (Zweikeimblättrige)','583',1156,1157,70,0,1),
+(627,2,'584','Liliopsida (Einkeimblättrige)','584',1158,1159,70,0,1),
+(628,2,'585','Gymnospermae (Nacktsamer), Coniferae (Nadelgehölze)','585',1160,1161,70,0,1),
+(629,2,'586','Cryptogamia (Blütenlose Pflanzen)','586',1162,1163,70,0,1),
+(630,2,'587','Pteridophyta (Farnpflanzen)','587',1164,1165,70,0,1),
+(631,2,'588','Bryophyta (Moose)','588',1166,1167,70,0,1),
+(632,2,'590','Tiere (Zoologie)','590',1170,1171,71,0,1),
+(633,2,'591','Einzelne Themen in der Naturgeschichte','591',1172,1173,71,0,1),
+(634,2,'592','Evertebrata (Wirbellose)','592',1174,1175,71,0,1),
+(635,2,'593','Wirbellose des Meeres und der Meeresküste','593',1176,1177,71,0,1),
+(636,2,'594','Mollusca (Weichtiere), Tentaculata (Kranzfühler)','594',1178,1179,71,0,1),
+(637,2,'595','Arthropoden (Gliederfüßer)','595',1180,1181,71,0,1),
+(638,2,'596','Chordata (Chordatiere)','596',1182,1183,71,0,1),
+(639,2,'597','Wechselwarme Wirbeltiere, Pisces (Fische)','597',1184,1185,71,0,1),
+(640,2,'598','Aves (Vögel)','598',1186,1187,71,0,1),
+(641,2,'599','Mammalia (Säugetiere)','599',1188,1189,71,0,1),
+(642,2,'600','Technik, Technologie','600',1194,1195,72,0,1),
+(643,2,'601','Philosophie, Theorie','601',1196,1197,72,0,1),
+(644,2,'602','Verschiedenes','602',1198,1199,72,0,1),
+(645,2,'603','Wörterbücher, Enzyklopädien','603',1200,1201,72,0,1),
+(646,2,'604','Spezielle Themen','604',1202,1203,72,0,1),
+(647,2,'605','Fortlaufende Sammelwerke','605',1204,1205,72,0,1),
+(648,2,'606','Organisationen','606',1206,1207,72,0,1),
+(649,2,'607','Ausbildung, Forschung, verwandte Themen','607',1208,1209,72,0,1),
+(650,2,'608','Erfindungen, Patente','608',1210,1211,72,0,1),
+(651,2,'609','Histor., geogr., personenbezogene Behandlung','609',1212,1213,72,0,1),
+(652,2,'610','Medizin und Gesundheit','610',1216,1217,73,0,1),
+(653,2,'611','Menschliche Anatomie, Zytologie, Histologie','611',1218,1219,73,0,1),
+(654,2,'612','Humanphysiologie','612',1220,1221,73,0,1),
+(655,2,'613','Persönliche Gesundheit und Sicherheit','613',1222,1223,73,0,1),
+(656,2,'614','Inzidenz und Prävention von Krankheiten','614',1224,1225,73,0,1),
+(657,2,'615','Pharmakologie, Therapeutik','615',1226,1227,73,0,1),
+(658,2,'616','Krankheiten','616',1228,1229,73,0,1),
+(659,2,'617','Chirurgie und verwandte medizinische Fachrichtungen','617',1230,1231,73,0,1),
+(660,2,'618','Gynäkologie, Geburtsmedizin, Pädiatrie, Geriatrie','618',1232,1233,73,0,1),
+(661,2,'620','Ingenieurwissenschaften und zugeordnete Tätigkeiten','620',1236,1237,74,0,1),
+(662,2,'621','Angewandte Physik','621',1238,1239,74,0,1),
+(663,2,'622','Bergbau und verwandte Tätigkeiten','622',1240,1241,74,0,1),
+(664,2,'623','Militär- und Schiffstechnik','623',1242,1243,74,0,1),
+(665,2,'624','Ingenieurbau','624',1244,1245,74,0,1),
+(666,2,'625','Eisenbahn- und Straßenbau','625',1246,1247,74,0,1),
+(667,2,'627','Wasserbau','627',1248,1249,74,0,1),
+(668,2,'628','Sanitär- und Kommunaltechnik, Umwelttechnik','628',1250,1251,74,0,1),
+(669,2,'629','Andere Fachrichtungen der Ingenieurwissenschaften','629',1252,1253,74,0,1),
+(670,2,'630','Landwirtschaft und verwandte Bereiche','630',1256,1257,75,0,1),
+(671,2,'631','Techniken, Ausstattung, Materialien','631',1258,1259,75,0,1),
+(672,2,'632','Schäden, Krankheiten, Schädlinge an Pflanzen','632',1260,1261,75,0,1),
+(673,2,'633','Feld- und Plantagenfrüchte','633',1262,1263,75,0,1),
+(674,2,'634','Obstanlagen, Früchte, Forstwirtschaft','634',1264,1265,75,0,1),
+(675,2,'635','Gartenpflanzen (Gartenbau)','635',1266,1267,75,0,1),
+(676,2,'636','Viehwirtschaft','636',1268,1269,75,0,1),
+(677,2,'637','Milchverarbeitung und verwandte Produkte','637',1270,1271,75,0,1),
+(678,2,'638','Insektenzucht','638',1272,1273,75,0,1),
+(679,2,'639','Jagd, Fischfang, Naturschutz','639',1274,1275,75,0,1),
+(680,2,'640','Hauswirtschaft und Familie','640',1278,1279,76,0,1),
+(681,2,'641','Essen und Trinken','641',1280,1281,76,0,1),
+(682,2,'642','Mahlzeiten, Tischkultur','642',1282,1283,76,0,1),
+(683,2,'643','Wohnen, Haushaltsausstattung','643',1284,1285,76,0,1),
+(684,2,'644','Gebäudeversorgung für Haushalte','644',1286,1287,76,0,1),
+(685,2,'645','Einrichtungsgegenstände','645',1288,1289,76,0,1),
+(686,2,'646','Nähen, Kleidung, persönliches Leben, Familienleben','646',1290,1291,76,0,1),
+(687,2,'647','Großhaushaltsführung','647',1292,1293,76,0,1),
+(688,2,'648','Haushaltsführung','648',1294,1295,76,0,1),
+(689,2,'649','Kindererziehung, häusliche Betreuung','649',1296,1297,76,0,1),
+(690,2,'650','Management und unterstützende Tätigkeiten','650',1300,1301,77,0,1),
+(691,2,'651','Büroarbeit','651',1302,1303,77,0,1),
+(692,2,'652','Techniken der schriftlichen Kommunikation','652',1304,1305,77,0,1),
+(693,2,'653','Stenografie','653',1306,1307,77,0,1),
+(694,2,'657','Rechnungslegung','657',1308,1309,77,0,1),
+(695,2,'658','Allgemeines Management','658',1310,1311,77,0,1),
+(696,2,'659','Werbung, Öffentlichkeitsarbeit','659',1312,1313,77,0,1),
+(697,2,'660','Chemische Verfahrenstechnik','660',1316,1317,78,0,1),
+(698,2,'661','Industriechemikalien','661',1318,1319,78,0,1),
+(699,2,'662','Explosivstoffe, Brennstoffe und verwandte Produkte','662',1320,1321,78,0,1),
+(700,2,'663','Getränketechnologie','663',1322,1323,78,0,1),
+(701,2,'664','Lebensmitteltechnologie','664',1324,1325,78,0,1),
+(702,2,'665','Industrielle Öle, Fette, Wachse, technische Gase','665',1326,1327,78,0,1),
+(703,2,'666','Keramiktechnologie und zugeordnete Technologien','666',1328,1329,78,0,1),
+(704,2,'667','Reinigungs-, Färbe-, Beschichtungstechniken','667',1330,1331,78,0,1),
+(705,2,'668','Technik anderer organischer Produkte','668',1332,1333,78,0,1),
+(706,2,'669','Metallurgie','669',1334,1335,78,0,1),
+(707,2,'670','Industrielle Fertigung','670',1338,1339,79,0,1),
+(708,2,'671','Metallverarbeitung und Rohprodukte aus Metall','671',1340,1341,79,0,1),
+(709,2,'672','Eisen, Stahl, andere Eisenlegierungen','672',1342,1343,79,0,1),
+(710,2,'673','Nichteisenmetalle','673',1344,1345,79,0,1),
+(711,2,'674','Holzverarbeitung, Holzprodukte, Kork','674',1346,1347,79,0,1),
+(712,2,'675','Leder- und Pelzverarbeitung','675',1348,1349,79,0,1),
+(713,2,'676','Zellstoff und Papierherstellung','676',1350,1351,79,0,1),
+(714,2,'677','Textilien','677',1352,1353,79,0,1),
+(715,2,'678','Elastomere, Elastomerprodukte','678',1354,1355,79,0,1),
+(716,2,'679','Andere Produkte aus einzelnen Werkstoffen','679',1356,1357,79,0,1),
+(717,2,'680','Industrielle Fertigung für einzelne Verwendungszwecke','680',1360,1361,80,0,1),
+(718,2,'681','Präzisionsinstrumente und andere Geräte','681',1362,1363,80,0,1),
+(719,2,'682','Schmiedehandwerk','682',1364,1365,80,0,1),
+(720,2,'683','Eisenwaren, Haushaltsgeräte','683',1366,1367,80,0,1),
+(721,2,'684','Wohnungseinrichtung, Heimwerkstätten','684',1368,1369,80,0,1),
+(722,2,'685','Leder- und Pelzwaren und verwandte Produkte','685',1370,1371,80,0,1),
+(723,2,'686','Drucken und verwandte Tätigkeiten','686',1372,1373,80,0,1),
+(724,2,'687','Kleidung, Accessoires','687',1374,1375,80,0,1),
+(725,2,'688','Andere Endprodukte, Verpackungstechnik','688',1376,1377,80,0,1),
+(726,2,'690','Hausbau, Bauhandwerk','690',1380,1381,81,0,1),
+(727,2,'691','Baustoffe','691',1382,1383,81,0,1),
+(728,2,'692','Bauhilfstechniken','692',1384,1385,81,0,1),
+(729,2,'693','Einzelne Baustoffarten und Zwecke','693',1386,1387,81,0,1),
+(730,2,'694','Holzbau, Zimmerhandwerk','694',1388,1389,81,0,1),
+(731,2,'695','Dachdeckung','695',1390,1391,81,0,1),
+(732,2,'696','Versorgungseinrichtungen','696',1392,1393,81,0,1),
+(733,2,'697','Heizungs-, Lüftungs-, Klimatechnik','697',1394,1395,81,0,1),
+(734,2,'698','Ausbau','698',1396,1397,81,0,1),
+(735,2,'700','Künste, Bildende und angewandte Kunst','700',1402,1403,82,0,1),
+(736,2,'701','Kunstphilosophie, Kunsttheorie der bildenden und angewandten Kunst','701',1404,1405,82,0,1),
+(737,2,'702','Verschiedenes zur bildenden und angewandten Kunst','702',1406,1407,82,0,1),
+(738,2,'703','Wörterbücher, Enzyklopädien zur bildenden und angewandten Kunst','703',1408,1409,82,0,1),
+(739,2,'704','Spezielle Themen zur bildenden und angewandten Kunst','704',1410,1411,82,0,1),
+(740,2,'705','Fortlaufende Sammelwerke zur bildenden und angewandten Kunst','705',1412,1413,82,0,1),
+(741,2,'706','Organisationen, Management der bildenden und angewandten Kunst','706',1414,1415,82,0,1),
+(742,2,'707','Ausbildung, Forschung, verwandte Themen zur bildenden und angewandten Kunst','707',1416,1417,82,0,1),
+(743,2,'708','Galerien, Museen, Privatsammlungen zur bildenden und angewandten Kunst','708',1418,1419,82,0,1),
+(744,2,'709','Histor., geogr., personenbezogene Behandlung der bildenden und angewandten Kunst','709',1420,1421,82,0,1),
+(745,2,'710','Städtebau, Raumplanung, Landschaftsgestaltung','710',1424,1425,83,0,1),
+(746,2,'711','Raumplanung','711',1426,1427,83,0,1),
+(747,2,'712','Landschaftsgestaltung','712',1428,1429,83,0,1),
+(748,2,'713','Landschaftsgestaltung von Verkehrswegen','713',1430,1431,83,0,1),
+(749,2,'714','Wasser als Gestaltungselement','714',1432,1433,83,0,1),
+(750,2,'715','Gehölze als Gestaltungselemente','715',1434,1435,83,0,1),
+(751,2,'716','Krautige Pflanzen als Gestaltungselemente','716',1436,1437,83,0,1),
+(752,2,'717','Andere Gestaltungselemente','717',1438,1439,83,0,1),
+(753,2,'718','Landschaftsgestaltung von Friedhöfen','718',1440,1441,83,0,1),
+(754,2,'719','Naturlandschaften','719',1442,1443,83,0,1),
+(755,2,'720','Architektur','720',1446,1447,84,0,1),
+(756,2,'721','Architektonische Struktur','721',1448,1449,84,0,1),
+(757,2,'722','Architektur bis ca. 300','722',1450,1451,84,0,1),
+(758,2,'723','Architektur von ca. 300 bis 1399','723',1452,1453,84,0,1),
+(759,2,'724','Architektur ab 1400','724',1454,1455,84,0,1),
+(760,2,'725','Öffentliche Bauwerke','725',1456,1457,84,0,1),
+(761,2,'726','Gebäude für religiöse und verwandte Zwecke','726',1458,1459,84,0,1),
+(762,2,'727','Gebäude für Lehr- und Forschungszwecke','727',1460,1461,84,0,1),
+(763,2,'728','Wohnbauten und verwandte Gebäude','728',1462,1463,84,0,1),
+(764,2,'729','Entwurf und Gestaltung, Innenarchitektur','729',1464,1465,84,0,1),
+(765,2,'730','Plastische Künste, Bildhauerkunst','730',1468,1469,85,0,1),
+(766,2,'731','Verfahren, Formen und Motive in der Bildhauerkunst','731',1470,1471,85,0,1),
+(767,2,'732','Bildhauerei bis ca. 500','732',1472,1473,85,0,1),
+(768,2,'733','Griechische, etruskische, römische Bildhauerkunst','733',1474,1475,85,0,1),
+(769,2,'734','Bildhauerkunst von ca. 500 bis 1399','734',1476,1477,85,0,1),
+(770,2,'735','Bildhauerkunst ab 1400','735',1478,1479,85,0,1),
+(771,2,'736','Schnitzen, Schnitzereien','736',1480,1481,85,0,1),
+(772,2,'737','Numismatik, Siegelkunde','737',1482,1483,85,0,1),
+(773,2,'738','Keramikkunst','738',1484,1485,85,0,1),
+(774,2,'739','Metallkunst','739',1486,1487,85,0,1),
+(775,2,'740','Zeichnung, angewandte Kunst','740',1490,1491,86,1,1),
+(776,2,'741','Zeichnung, Zeichnungen','741',1492,1493,86,0,1),
+(777,2,'742','Perspektive','742',1496,1497,86,0,1),
+(778,2,'743','Zeichnung und Zeichnungen nach Motiv','743',1498,1499,86,0,1),
+(779,2,'745','Angewandte Kunst','745',1500,1501,86,0,1),
+(780,2,'746','Textilkunst','746',1502,1503,86,0,1),
+(781,2,'747','Innendekoration','747',1504,1505,86,0,1),
+(782,2,'748','Glas','748',1506,1507,86,0,1),
+(783,2,'749','Möbel, Möbelzubehör','749',1508,1509,86,0,1),
+(784,2,'750','Malerei, Gemälde','750',1512,1513,87,0,1),
+(785,2,'751','Techniken, Ausstattung, Materialien, Formen','751',1514,1515,87,0,1),
+(786,2,'752','Farbe','752',1516,1517,87,0,1),
+(787,2,'753','Symbolik, Allegorie, Mythologie, Legende','753',1518,1519,87,0,1),
+(788,2,'754','Genremalerei','754',1520,1521,87,0,1),
+(789,2,'755','Religion','755',1522,1523,87,0,1),
+(790,2,'757','Menschliche Figuren','757',1524,1525,87,0,1),
+(791,2,'758','Andere Motive','758',1526,1527,87,0,1),
+(792,2,'759','Histor., geogr., personenbezogene Behandlung','759',1528,1529,87,0,1),
+(793,2,'760','Grafik, Druckgrafik, Drucke','760',1532,1533,88,0,1),
+(794,2,'761','Hochdruckverfahren (Blockdruck)','761',1534,1535,88,0,1),
+(795,2,'763','Lithografische Druckverfahren','763',1536,1537,88,0,1),
+(796,2,'764','Farblithografie, Serigrafie','764',1538,1539,88,0,1),
+(797,2,'765','Metallgravur','765',1540,1541,88,0,1),
+(798,2,'766','Mezzotinto, Aquatinta und verwandte Techniken','766',1542,1543,88,0,1),
+(799,2,'767','Radierung, Kaltnadelarbeit','767',1544,1545,88,0,1),
+(800,2,'769','Drucke','769',1546,1547,88,0,1),
+(801,2,'770','Fotografie, Fotografien, Computerkunst','770',1550,1551,89,0,1),
+(802,2,'771','Techniken, Ausstattung, Materialien','771',1552,1553,89,0,1),
+(803,2,'772','Entwicklungsverfahren mit Metallsalzen','772',1554,1555,89,0,1),
+(804,2,'773','Pigmentdruckverfahren','773',1556,1557,89,0,1),
+(805,2,'774','Holografie','774',1558,1559,89,0,1),
+(806,2,'775','Digitale Fotografie','775',1560,1561,89,0,1),
+(807,2,'776','Computerkunst (Digitale Kunst)','776',1562,1563,89,0,1),
+(808,2,'778','Bereiche und Arten der Fotografie','778',1564,1565,89,0,1),
+(809,2,'779','Fotografien','779',1566,1567,89,0,1),
+(810,2,'780','Musik','780',1570,1571,90,0,1),
+(811,2,'781','Allgemeine Prinzipien, musikalische Formen','781',1572,1573,90,0,1),
+(812,2,'782','Vokalmusik','782',1574,1575,90,0,1),
+(813,2,'783','Musik für Einzelstimmen, die Stimme','783',1576,1577,90,0,1),
+(814,2,'784','Instrumente, Instrumentalensembles','784',1578,1579,90,0,1),
+(815,2,'785','Ensembles mit einem Instrument pro Stimme','785',1580,1581,90,0,1),
+(816,2,'786','Tasteninstrumente, andere Instrumente','786',1582,1583,90,0,1),
+(817,2,'787','Saiteninstrumente','787',1584,1585,90,0,1),
+(818,2,'788','Blasinstrumente','788',1586,1587,90,0,1),
+(819,2,'789','(Optionale Notation)','789',1588,1589,90,0,1),
+(820,2,'790','Freizeitgestaltung, darstellende Künste, Sport','790',1592,1593,91,1,1),
+(821,2,'791','Öffentliche Darbietungen, Film, Rundfunk','791',1594,1595,91,1,1),
+(822,2,'792','Bühnenkunst','792',1596,1597,91,1,1),
+(823,2,'793','Spiele und Freizeitaktivitäten für drinnen','793',1598,1599,91,1,1),
+(824,2,'794','Unterhaltungsspiele für drinnen','794',1600,1601,91,0,1),
+(825,2,'795','Glücksspiele','795',1602,1603,91,0,1),
+(826,2,'796','Sportarten, Sportspiele','796',1604,1605,91,1,1),
+(827,2,'797','Wasser- und Luftsport','797',1606,1607,91,0,1),
+(828,2,'798','Pferdesport, Tierrennen','798',1608,1609,91,0,1),
+(829,2,'799','Fischfang, Jagd, Schießen','799',1610,1611,91,0,1),
+(830,2,'800','Literatur und Rhetorik','800',1616,1617,92,0,1),
+(831,2,'801','Literaturtheorie','801',1618,1619,92,0,1),
+(832,2,'802','Verschiedenes','802',1620,1621,92,0,1),
+(833,2,'803','Wörterbücher, Enzyklopädien','803',1622,1623,92,0,1),
+(834,2,'805','Fortlaufende Sammelwerke','805',1624,1625,92,0,1),
+(835,2,'806','Organisationen, Management','806',1626,1627,92,0,1),
+(836,2,'807','Ausbildung, Forschung, verwandte Themen','807',1628,1629,92,0,1),
+(837,2,'808','Rhetorik, Sammlungen von Literatur','808',1630,1631,92,0,1),
+(838,2,'809','Geschichte, Darstellung, Literaturwissenschaft und –k ritik','809',1632,1633,92,0,1),
+(839,2,'810','Amerikanische Literatur in in Englisch','810',1636,1637,93,0,1),
+(840,2,'811','Amerikanische Versdichtung','811',1638,1639,93,0,1),
+(841,2,'812','Amerikanische Dramen','812',1640,1641,93,0,1),
+(842,2,'813','Amerikanische Erzählprosa','813',1642,1643,93,0,1),
+(843,2,'814','Amerikanische Essays','814',1644,1645,93,0,1),
+(844,2,'815','Amerikanische Reden','815',1646,1647,93,0,1),
+(845,2,'816','Amerikanische Briefe','816',1648,1649,93,0,1),
+(846,2,'817','Amerikanischer Humor, amerikanische Satire','817',1650,1651,93,0,1),
+(847,2,'818','Amerikanische vermischte Schriften','818',1652,1653,93,0,1),
+(848,2,'819','(Optionale Notation)','819',1654,1655,93,0,1),
+(849,2,'820','Englische, altenglische Literaturen','820',1658,1659,94,0,1),
+(850,2,'821','Englische Versdichtung','821',1660,1661,94,0,1),
+(851,2,'822','Englische Dramen','822',1662,1663,94,0,1),
+(852,2,'823','Englische Erzählprosa','823',1664,1665,94,0,1),
+(853,2,'824','Englische Essays','824',1666,1667,94,0,1),
+(854,2,'825','Englische Reden','825',1668,1669,94,0,1),
+(855,2,'826','Englische Briefe','826',1670,1671,94,0,1),
+(856,2,'827','Englischer Humor, englische Satire','827',1672,1673,94,0,1),
+(857,2,'828','Englische vermischte Schriften','828',1674,1675,94,0,1),
+(858,2,'829','Altenglische (Angelsächsische) Literatur','829',1676,1677,94,0,1),
+(859,2,'830','Literaturen germanischer Sprachen, Deutsche Literatur','830',1680,1681,95,1,1),
+(860,2,'831','Deutsche Versdichtung','831',1682,1683,95,0,1),
+(861,2,'832','Deutsche Dramen','832',1684,1685,95,0,1),
+(862,2,'833','Deutsche Erzählprosa','833',1686,1687,95,0,1),
+(863,2,'834','Deutsche Essays','834',1688,1689,95,0,1),
+(864,2,'835','Deutsche Reden','835',1690,1691,95,0,1),
+(865,2,'836','Deutsche Briefe','836',1692,1693,95,0,1),
+(866,2,'837','Deutscher Humor, deutsche Satire','837',1694,1695,95,0,1),
+(867,2,'838','Deutsche vermischte Schriften','838',1696,1697,95,0,1),
+(868,2,'839','Andere germanische Literaturen','839',1698,1699,95,1,1),
+(869,2,'840','Literaturen romanischer Sprachen, Französische Literatur','840',1702,1703,96,0,1),
+(870,2,'841','Französische Versdichtung','841',1704,1705,96,0,1),
+(871,2,'842','Französische Dramen','842',1706,1707,96,0,1),
+(872,2,'843','Französische Erzählprosa','843',1708,1709,96,0,1),
+(873,2,'844','Französische Essays','844',1710,1711,96,0,1),
+(874,2,'845','Französische Reden','845',1712,1713,96,0,1),
+(875,2,'846','Französische Briefe','846',1714,1715,96,0,1),
+(876,2,'847','Französischer Humor, französische Satire','847',1716,1717,96,0,1),
+(877,2,'848','Französische vermischte Schriften','848',1718,1719,96,0,1),
+(878,2,'849','Okzitanische, katalanische Literaturen','849',1720,1721,96,0,1),
+(879,2,'850','Italienische, rumänische, rätoromanische Literaturen','850',1724,1725,97,0,1),
+(880,2,'851','Italienische Versdichtung','851',1726,1727,97,0,1),
+(881,2,'852','Italienische Dramen','852',1728,1729,97,0,1),
+(882,2,'853','Italienische Erzählprosa','853',1730,1731,97,0,1),
+(883,2,'854','Italienische Essays','854',1732,1733,97,0,1),
+(884,2,'855','Italienische Reden','855',1734,1735,97,0,1),
+(885,2,'856','Italienische Briefe','856',1736,1737,97,0,1),
+(886,2,'857','Italienischer Humor, italienische Satire','857',1738,1739,97,0,1),
+(887,2,'858','Italienische vermischte Schriften','858',1740,1741,97,0,1),
+(888,2,'859','Rumänische, rätoromanische Literaturen','859',1742,1743,97,0,1),
+(889,2,'860','Spanische, portugiesische Literaturen','860',1746,1747,98,0,1),
+(890,2,'861','Spanische Versdichtung','861',1748,1749,98,0,1),
+(891,2,'862','Spanische Dramen','862',1750,1751,98,0,1),
+(892,2,'863','Spanische Erzählprosa','863',1752,1753,98,0,1),
+(893,2,'864','Spanische Essays','864',1754,1755,98,0,1),
+(894,2,'865','Spanische Reden','865',1756,1757,98,0,1),
+(895,2,'866','Spanische Briefe','866',1758,1759,98,0,1),
+(896,2,'867','Spanischer Humor, spanische Satire','867',1760,1761,98,0,1),
+(897,2,'868','Spanische vermischte Schriften','868',1762,1763,98,0,1),
+(898,2,'869','Portugiesische Literatur','869',1764,1765,98,0,1),
+(899,2,'870','Italische Literaturen, Lateinische Literatur','870',1768,1769,99,0,1),
+(900,2,'871','Lateinische Versdichtung','871',1770,1771,99,0,1),
+(901,2,'872','Lateinische dramatische Versdichtung, Dramen','872',1772,1773,99,0,1),
+(902,2,'873','Lateinische erzählende Versdichtung, Erzählprosa','873',1774,1775,99,0,1),
+(903,2,'874','Lateinische lyrische Versdichtung','874',1776,1777,99,0,1),
+(904,2,'875','Lateinische Reden','875',1778,1779,99,0,1),
+(905,2,'876','Lateinische Briefe','876',1780,1781,99,0,1),
+(906,2,'877','Lateinischer Humor, lateinische Satire','877',1782,1783,99,0,1),
+(907,2,'878','Lateinische vermischte Schriften','878',1784,1785,99,0,1),
+(908,2,'879','Literaturen anderer italischer Sprachen','879',1786,1787,99,0,1),
+(909,2,'880','Hellenische Literaturen, Klassische griechische Literatur','880',1790,1791,100,0,1),
+(910,2,'881','Klassische griechische Versdichtung','881',1792,1793,100,0,1),
+(911,2,'882','Klassische griechische dramatische Versdichtung, Dramen','882',1794,1795,100,0,1),
+(912,2,'883','Klassische griechische erzählende Versdichtung, Erzählprosa','883',1796,1797,100,0,1),
+(913,2,'884','Klassische griechische lyrische Versdichtung','884',1798,1799,100,0,1),
+(914,2,'885','Klassische griechische Reden','885',1800,1801,100,0,1),
+(915,2,'886','Klassische griechische Briefe','886',1802,1803,100,0,1),
+(916,2,'887','Humor und Satire in klassischem Griechisch','887',1804,1805,100,0,1),
+(917,2,'888','Klassische griechische vermischte Schriften','888',1806,1807,100,0,1),
+(918,2,'889','Neugriechische Literatur','889',1808,1809,100,0,1),
+(919,2,'890','Literaturen anderer Sprachen','890',1812,1813,101,0,1),
+(920,2,'891','Ostindoeuropäische, keltische Literaturen','891',1814,1815,101,0,1),
+(921,2,'892','Afroasiatische Literaturen, Semitische Literaturen','892',1816,1817,101,0,1),
+(922,2,'893','Nichtsemitische afroasiatische Literaturen','893',1818,1819,101,0,1),
+(923,2,'894','Altaische, uralische, paläosibirische, drawidische Literaturen','894',1820,1821,101,0,1),
+(924,2,'895','Ost- und südostasiatische Literaturen','895',1822,1823,101,0,1),
+(925,2,'896','Afrikanische Literaturen','896',1824,1825,101,0,1),
+(926,2,'897','Literaturen nordamerikanischer Indianersprachen','897',1826,1827,101,0,1),
+(927,2,'898','Literaturen südamerikanischer Indianersprachen','898',1828,1829,101,0,1),
+(928,2,'899','Austronesische und andere Literaturen','899',1830,1831,101,0,1),
+(929,2,'900','Geschichte und Geografie','900',1836,1837,102,0,1),
+(930,2,'901','Geschichtsphilosophie, Geschichtstheorie','901',1838,1839,102,0,1),
+(931,2,'902','Verschiedenes','902',1840,1841,102,0,1),
+(932,2,'903','Wörterbücher, Enzyklopädien','903',1842,1843,102,0,1),
+(933,2,'904','Allgemeine Darstellungen von Ereignissen','904',1844,1845,102,0,1),
+(934,2,'905','Fortlaufende Sammelwerke','905',1846,1847,102,0,1),
+(935,2,'906','Organisationen, Management','906',1848,1849,102,0,1),
+(936,2,'907','Ausbildung, Forschung, verwandte Themen','907',1850,1851,102,0,1),
+(937,2,'908','Behandlung nach Personengruppen','908',1852,1853,102,0,1),
+(938,2,'909','Weltgeschichte','909',1854,1855,102,0,1),
+(939,2,'910','Geografie, Reisen','910',1858,1859,103,1,1),
+(940,2,'911','Historische Geografie','911',1860,1861,103,0,1),
+(941,2,'912','Atlanten, Karten, Grafiken, Pläne','912',1862,1863,103,0,1),
+(942,2,'913','Geografie der und Reisen in der Alten Welt','913',1864,1865,103,0,1),
+(943,2,'914','Geografie Europas und Reisen in Europa','914',1866,1867,103,0,1),
+(944,2,'915','Geografie Asiens und Reisen in Asien','915',1870,1871,103,0,1),
+(945,2,'916','Geografie Afrikas und Reisen in Afrika','916',1872,1873,103,0,1),
+(946,2,'917','Geografie Nordamerikas und Reisen in Nordamerika','917',1874,1875,103,0,1),
+(947,2,'918','Geografie Südamerikas und Reisen in Südamerika','918',1876,1877,103,0,1),
+(948,2,'919','Geografie anderer Gebiete und Reisen in anderen Gebieten','919',1878,1879,103,0,1),
+(949,2,'920','Biografien, Genealogie, Insignien','920',1882,1883,104,0,1),
+(950,2,'921','(Optionale Notation)','921',1884,1885,104,0,1),
+(951,2,'922','(Optionale Notation)','922',1886,1887,104,0,1),
+(952,2,'923','(Optionale Notation)','923',1888,1889,104,0,1),
+(953,2,'924','(Optionale Notation)','924',1890,1891,104,0,1),
+(954,2,'925','(Optionale Notation)','925',1892,1893,104,0,1),
+(955,2,'926','(Optionale Notation)','926',1894,1895,104,0,1),
+(956,2,'927','(Optionale Notation)','927',1896,1897,104,0,1),
+(957,2,'928','(Optionale Notation)','928',1898,1899,104,0,1),
+(958,2,'929','Genealogie, Namenkunde, Insignien','929',1900,1901,104,0,1),
+(959,2,'930','Geschichte des Altertums bis ca. 499, Archäologie','930',1904,1905,105,0,1),
+(960,2,'931','Geschichte Chinas bis 420','931',1906,1907,105,0,1),
+(961,2,'932','Geschichte Ägyptens bis 640','932',1908,1909,105,0,1),
+(962,2,'933','Geschichte Palästinas bis 70','933',1910,1911,105,0,1),
+(963,2,'934','Geschichte Indiens bis 647','934',1912,1913,105,0,1),
+(964,2,'935','Geschichte Mesopotamiens und der iranischen Hochebene bis 637','935',1914,1915,105,0,1),
+(965,2,'936','Geschichte Europas nördlich und westlich von Italien bis ca. 499','936',1916,1917,105,0,1),
+(966,2,'937','Geschichte Italiens und benachbarter Gebiete bis 476','937',1918,1919,105,0,1),
+(967,2,'938','Geschichte Griechenlands bis 323','938',1920,1921,105,0,1),
+(968,2,'939','Geschichte anderer Teile der Welt bis ca. 640','939',1922,1923,105,0,1),
+(969,2,'940','Geschichte Europas','940',1926,1927,106,1,1),
+(970,2,'941','Geschichte der Britischen Inseln','941',1928,1929,106,0,1),
+(971,2,'942','Geschichte Englands und Wales','942',1930,1931,106,0,1),
+(972,2,'943','Geschichte Mitteleuropas, Deutschlands','943',1932,1933,106,1,1),
+(973,2,'944','Geschichte Frankreichs und Monacos','944',1934,1935,106,0,1),
+(974,2,'945','Geschichte der italienische Halbinsel und benachbarter Inseln','945',1936,1937,106,0,1),
+(975,2,'946','Geschichte der iberischen Halbinsel und benachbarter Inseln','946',1938,1939,106,0,1),
+(976,2,'947','Geschichte Osteuropas, Russlands','947',1940,1941,106,0,1),
+(977,2,'948','Geschichte Skandinaviens','948',1942,1943,106,0,1),
+(978,2,'949','Geschichte anderer Teile Europas','949',1944,1945,106,0,1),
+(979,2,'950','Geschichte Asiens, des Fernen Ostens','950',1948,1949,107,0,1),
+(980,2,'951','Geschichte Chinas und benachbarter Gebiete','951',1950,1951,107,0,1),
+(981,2,'952','Geschichte Japans','952',1952,1953,107,0,1),
+(982,2,'953','Geschichte der arabischen Halbinsel und benachbarter Gebiete','953',1954,1955,107,0,1),
+(983,2,'954','Geschichte Südasiens, Indiens','954',1956,1957,107,0,1),
+(984,2,'955','Geschichte Irans','955',1958,1959,107,0,1),
+(985,2,'956','Geschichte des Nahen Ostens (Mittleren Ostens)','956',1960,1961,107,0,1),
+(986,2,'957','Geschichte Sibiriens (der Asiatischen Russlands)','957',1962,1963,107,0,1),
+(987,2,'958','Geschichte Zentralasiens','958',1964,1965,107,0,1),
+(988,2,'959','Geschichte Südostasiens','959',1966,1967,107,0,1),
+(989,2,'960','Geschichte Afrikas','960',1970,1971,108,0,1),
+(990,2,'961','Geschichte Tunesiens und Libyens','961',1972,1973,108,0,1),
+(991,2,'962','Geschichte Ägyptens und Sudans','962',1974,1975,108,0,1),
+(992,2,'963','Geschichte Äthiopiens und Eritreas','963',1976,1977,108,0,1),
+(993,2,'964','Geschichte der nordwestafrikanischen Küste und vorgelagerter Inseln','964',1978,1979,108,0,1),
+(994,2,'965','Geschichte Algeriens','965',1980,1981,108,0,1),
+(995,2,'966','Geschichte Westafrikas und vorgelagerter Inseln','966',1982,1983,108,0,1),
+(996,2,'967','Geschichte Zentralafrikas und vorgelagerter Inseln','967',1984,1985,108,0,1),
+(997,2,'968','Geschichte Südafrikas, der Republik Südafrika','968',1986,1987,108,0,1),
+(998,2,'969','Geschichte der Inseln im südlichen Indischen Ozean','969',1988,1989,108,0,1),
+(999,2,'970','Geschichte Nordamerikas','970',1992,1993,109,0,1),
+(1000,2,'971','Geschichte Kanadas','971',1994,1995,109,0,1),
+(1001,2,'972','Geschichte Mittelamerikas, Mexikos','972',1996,1997,109,0,1),
+(1002,2,'973','Geschichte der USA','973',1998,1999,109,0,1),
+(1003,2,'974','Geschichte der nordöstlichen Staaten der USA','974',2000,2001,109,0,1),
+(1004,2,'975','Geschichte der südöstlichen Staaten der USA','975',2002,2003,109,0,1),
+(1005,2,'976','Geschichte der südlichen zentralen Staaten der USA','976',2004,2005,109,0,1),
+(1006,2,'977','Geschichte der nördlichen zentralen Staaten der USA','977',2006,2007,109,0,1),
+(1007,2,'978','Geschichte der westlichen Staaten der USA','978',2008,2009,109,0,1),
+(1008,2,'979','Geschichte der Staaten des Großen Beckens und der pazifischen Gebirgsketten','979',2010,2011,109,0,1),
+(1009,2,'980','Geschichte Südamerikas','980',2014,2015,110,0,1),
+(1010,2,'981','Geschichte Brasiliens','981',2016,2017,110,0,1),
+(1011,2,'982','Geschichte Argentiniens','982',2018,2019,110,0,1),
+(1012,2,'983','Geschichte Chiles','983',2020,2021,110,0,1),
+(1013,2,'984','Geschichte Boliviens','984',2022,2023,110,0,1),
+(1014,2,'985','Geschichte Perus','985',2024,2025,110,0,1),
+(1015,2,'986','Geschichte Kolumbiens und Ecuadors','986',2026,2027,110,0,1),
+(1016,2,'987','Geschichte Venezuelas','987',2028,2029,110,0,1),
+(1017,2,'988','Geschichte Guayanas','988',2030,2031,110,0,1),
+(1018,2,'989','Geschichte Paraguays und Uruguays','989',2032,2033,110,0,1),
+(1019,2,'990','Geschichte anderer Gebiete','990',2036,2037,111,0,1),
+(1020,2,'993','Geschichte Neuseelands','993',2038,2039,111,0,1),
+(1021,2,'994','Geschichte Australiens','994',2040,2041,111,0,1),
+(1022,2,'995','Geschichte Melanesiens, Neuguineas','995',2042,2043,111,0,1),
+(1023,2,'996','Geschichte anderer Teile des Pazifischen Ozeans, Polynesiens','996',2044,2045,111,0,1),
+(1024,2,'997','Geschichte der atlantischen Inseln','997',2046,2047,111,0,1),
+(1025,2,'998','Geschichte der arktischen Inseln und der Antarktis','998',2048,2049,111,0,1),
+(1026,2,'999','Geschichte der außerirdischen Welten','999',2050,2051,111,0,1),
+(1027,2,'741.5','Comics, Cartoons, Karikaturen','741.5',1494,1495,86,1,1),
+(1028,2,'914.3','Landeskunde Deutschlands','914.3',1868,1869,103,1,1);
+
+
+
diff --git a/database/migrations/dataset_2_documents.ts b/database/migrations/dataset_2_documents.ts
index 565e1f9..6629689 100644
--- a/database/migrations/dataset_2_documents.ts
+++ b/database/migrations/dataset_2_documents.ts
@@ -86,3 +86,22 @@ export default class Documents extends BaseSchema {
// CONSTRAINT documents_server_state_check CHECK (server_state::text = ANY (ARRAY['deleted'::character varying::text, 'inprogress'::character varying::text, 'published'::character varying::text, 'released'::character varying::text, 'editor_accepted'::character varying::text, 'approved'::character varying::text, 'rejected_reviewer'::character varying::text, 'rejected_editor'::character varying::text, 'reviewed'::character varying::text])),
// CONSTRAINT documents_type_check CHECK (type::text = ANY (ARRAY['analysisdata'::character varying::text, 'measurementdata'::character varying::text, 'monitoring'::character varying::text, 'remotesensing'::character varying::text, 'gis'::character varying::text, 'models'::character varying::text, 'mixedtype'::character varying::text]))
// )
+
+
+// ALTER TABLE documents DROP CONSTRAINT documents_server_state_check;
+
+// ALTER TABLE documents
+// ADD CONSTRAINT documents_server_state_check CHECK (
+// server_state::text = ANY (ARRAY[
+// 'deleted',
+// 'inprogress',
+// 'published',
+// 'released',
+// 'editor_accepted',
+// 'approved',
+// 'rejected_reviewer',
+// 'rejected_editor',
+// 'reviewed',
+// 'rejected_to_reviewer' -- new value added
+// ]::text[])
+// );
\ No newline at end of file
diff --git a/database/migrations/dataset_6_collection_roles.ts b/database/migrations/dataset_6_collection_roles.ts
index 73f83e8..1491d9a 100644
--- a/database/migrations/dataset_6_collection_roles.ts
+++ b/database/migrations/dataset_6_collection_roles.ts
@@ -32,3 +32,21 @@ export default class CollectionsRoles extends BaseSchema {
// visible_oai boolean NOT NULL DEFAULT true,
// CONSTRAINT collections_roles_pkey PRIMARY KEY (id)
// )
+
+// change to normal intzeger:
+// ALTER TABLE collections_roles ALTER COLUMN id DROP DEFAULT;
+// DROP SEQUENCE IF EXISTS collections_roles_id_seq;
+
+// -- Step 1: Temporarily change one ID to a value not currently used
+// UPDATE collections_roles SET id = 99 WHERE name = 'ccs';
+
+// -- Step 2: Change 'ddc' ID to 2 (the old 'ccs' ID)
+// UPDATE collections_roles SET id = 2 WHERE name = 'ddc';
+
+// -- Step 3: Change the temporary ID (99) to 3 (the old 'ddc' ID)
+// UPDATE collections_roles SET id = 3 WHERE name = 'ccs';
+
+// UPDATE collections_roles SET id = 99 WHERE name = 'bk';
+// UPDATE collections_roles SET id = 1 WHERE name = 'institutes';
+// UPDATE collections_roles SET id = 4 WHERE name = 'pacs';
+// UPDATE collections_roles SET id = 7 WHERE name = 'bk';
\ No newline at end of file
diff --git a/database/migrations/dataset_7_collections.ts b/database/migrations/dataset_7_collections.ts
index 4fe4b8b..b942111 100644
--- a/database/migrations/dataset_7_collections.ts
+++ b/database/migrations/dataset_7_collections.ts
@@ -5,7 +5,7 @@ export default class Collections extends BaseSchema {
public async up() {
this.schema.createTable(this.tableName, (table) => {
- table.increments('id').defaultTo("nextval('collections_id_seq')");
+ table.increments('id');//.defaultTo("nextval('collections_id_seq')");
table.integer('role_id').unsigned();
table
.foreign('role_id', 'collections_role_id_foreign')
@@ -25,6 +25,8 @@ export default class Collections extends BaseSchema {
.onUpdate('CASCADE');
table.boolean('visible').notNullable().defaultTo(true);
table.boolean('visible_publish').notNullable().defaultTo(true);
+ table.integer('left_id').unsigned();
+ table.integer('right_id').unsigned();
});
}
@@ -59,3 +61,26 @@ export default class Collections extends BaseSchema {
// change to normal intzeger:
// ALTER TABLE collections ALTER COLUMN id DROP DEFAULT;
// DROP SEQUENCE IF EXISTS collections_id_seq;
+
+
+// ALTER TABLE collections
+// ADD COLUMN left_id INTEGER;
+// COMMENT ON COLUMN collections.left_id IS 'comment';
+// ALTER TABLE collections
+// ADD COLUMN right_id INTEGER;
+// COMMENT ON COLUMN collections.right_id IS 'comment';
+
+// -- Step 1: Drop the existing default
+// ALTER TABLE collections
+// ALTER COLUMN visible DROP DEFAULT,
+// ALTER COLUMN visible_publish DROP DEFAULT;
+
+// -- Step 2: Change column types with proper casting
+// ALTER TABLE collections
+// ALTER COLUMN visible TYPE smallint USING CASE WHEN visible THEN 1 ELSE 0 END,
+// ALTER COLUMN visible_publish TYPE smallint USING CASE WHEN visible_publish THEN 1 ELSE 0 END;
+
+// -- Step 3: Set new defaults as smallint
+// ALTER TABLE collections
+// ALTER COLUMN visible SET DEFAULT 1,
+// ALTER COLUMN visible_publish SET DEFAULT 1;
\ No newline at end of file
diff --git a/index.d.ts b/index.d.ts
index 8165192..f6767a1 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -183,3 +183,9 @@ declare module 'saxon-js' {
export function transform(options: ITransformOptions): Promise | ITransformOutput;
}
+
+declare global {
+ interface File {
+ sort_order?: number;
+ }
+ }
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 6cf37e3..6b10877 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
"version": "1.0.0",
"dependencies": {
"@adonisjs/auth": "^9.2.4",
+ "@adonisjs/bodyparser": "^10.0.1",
"@adonisjs/core": "^6.17.0",
"@adonisjs/cors": "^2.2.1",
"@adonisjs/drive": "^3.2.0",
@@ -29,6 +30,7 @@
"@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",
@@ -48,7 +50,7 @@
"notiwind": "^2.0.0",
"pg": "^8.9.0",
"qrcode": "^1.5.3",
- "redis": "^4.6.10",
+ "redis": "^5.0.0",
"reflect-metadata": "^0.2.1",
"saxon-js": "^2.5.0",
"toastify-js": "^1.12.0",
@@ -89,7 +91,7 @@
"eslint-plugin-prettier": "^5.0.0-alpha.2",
"hot-hook": "^0.4.0",
"numeral": "^2.0.6",
- "pinia": "^2.0.30",
+ "pinia": "^3.0.2",
"pino-pretty": "^13.0.0",
"postcss-loader": "^8.1.1",
"prettier": "^3.4.2",
@@ -129,16 +131,16 @@
}
},
"node_modules/@adonisjs/application": {
- "version": "8.3.1",
- "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.3.1.tgz",
- "integrity": "sha512-hfZBgZ23BQAXvoSHDkc/I0hTSXyFVxypNqHPQ/WCk4VoWlBVWVgGaGnHLvIGhrZ3RMvyoC5NBgC0PR5G+/fGSw==",
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-8.4.1.tgz",
+ "integrity": "sha512-2vwO/8DoKJ9AR4Vvllz08RcomBoETc3FMf+q+ri1BVVjc76tLGV3KcYZp8+uKOuEreiK6poQ7NwJrR1P5ANA/w==",
"license": "MIT",
"dependencies": {
- "@poppinss/hooks": "^7.2.3",
- "@poppinss/macroable": "^1.0.2",
- "@poppinss/utils": "^6.7.3",
+ "@poppinss/hooks": "^7.2.5",
+ "@poppinss/macroable": "^1.0.4",
+ "@poppinss/utils": "^6.9.3",
"glob-parent": "^6.0.2",
- "tempura": "^0.4.0"
+ "tempura": "^0.4.1"
},
"engines": {
"node": ">=18.16.0"
@@ -180,9 +182,9 @@
}
},
"node_modules/@adonisjs/auth": {
- "version": "9.3.2",
- "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-9.3.2.tgz",
- "integrity": "sha512-ZaOeSEsCMZkXlfS3YYp2fXh6Eri/uq87mHmhW/uN8/Iww7VlpJbaacGokwHk1gBvU3hScYNVYwiazn3jkcNygw==",
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-9.4.0.tgz",
+ "integrity": "sha512-dzvnJRKY+RcKUXCRT6ebnlGV0wAfejTSGqS0XbgjB97r6Pww14MhsY89EBr1nSydQzvjdbtIR3EDGbU97BVmbQ==",
"license": "MIT",
"dependencies": {
"@adonisjs/presets": "^2.6.4",
@@ -219,18 +221,18 @@
}
},
"node_modules/@adonisjs/bodyparser": {
- "version": "10.0.3",
- "resolved": "https://registry.npmjs.org/@adonisjs/bodyparser/-/bodyparser-10.0.3.tgz",
- "integrity": "sha512-rgnAE+w7/+8tlCG+GxT8/99TLyccMFHtUyIP99K4YbSg0af6kTHrbXOJkKE8YHKU8cFwECybu3uZOoIoHOYLyQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/bodyparser/-/bodyparser-10.1.0.tgz",
+ "integrity": "sha512-sQVi1WASKSONr6DDG0YGf4rcd7Hfm9D5fdAqGcH1NWUfVP+2+6ogg0Z++X0a4wRbS7bU3TthTDmMX2n+839Cww==",
"license": "MIT",
"dependencies": {
"@paralleldrive/cuid2": "^2.2.2",
"@poppinss/macroable": "^1.0.4",
"@poppinss/multiparty": "^2.0.1",
- "@poppinss/utils": "^6.9.2",
+ "@poppinss/utils": "^6.9.3",
"@types/qs": "^6.9.18",
"bytes": "^3.1.2",
- "file-type": "^20.1.0",
+ "file-type": "^20.5.0",
"inflation": "^2.1.0",
"media-typer": "^1.1.0",
"qs": "^6.14.0",
@@ -244,42 +246,42 @@
}
},
"node_modules/@adonisjs/config": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-5.0.2.tgz",
- "integrity": "sha512-NXjFqDHNGRTZ1EnA4zr20GFEt7qw/JvZ4ZV8/PzFyVc7dPoFprpoyE3bw7kmlKHhcQdBbF7YXCGB4q+HQUnqiQ==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@adonisjs/config/-/config-5.0.3.tgz",
+ "integrity": "sha512-dO7gkYxZsrsnR8n7d5KUpyi+Q5c6BnV2rmFDqEmEjz5AkOZLLzJJJbeHgMb+M27le7ifEUoa8MRu6RED8NMsJg==",
"license": "MIT",
"dependencies": {
- "@poppinss/utils": "^6.7.3"
+ "@poppinss/utils": "^6.9.4"
},
"engines": {
"node": ">=18.16.0"
}
},
"node_modules/@adonisjs/core": {
- "version": "6.17.2",
- "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-6.17.2.tgz",
- "integrity": "sha512-POT5COID8Z3j37+Dd7Y1EfG01Q6+HPY/tGcSb0Y97W2VIPkFjqcW2ooTE4wFT09u7coNohtXJa19a0feMz9ncw==",
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-6.18.0.tgz",
+ "integrity": "sha512-Uuj7kzlMPiS3MVOCHfiXLVeFXUqrjGjF43LNLJb4Q2hBY/q0T2kUym2kVO2gazkLWj8YQKLdOA4ij7t9rDR4OA==",
"license": "MIT",
"dependencies": {
"@adonisjs/ace": "^13.3.0",
- "@adonisjs/application": "^8.3.1",
- "@adonisjs/bodyparser": "^10.0.3",
+ "@adonisjs/application": "^8.4.1",
+ "@adonisjs/bodyparser": "^10.1.0",
"@adonisjs/config": "^5.0.2",
"@adonisjs/encryption": "^6.0.2",
- "@adonisjs/env": "^6.1.1",
+ "@adonisjs/env": "^6.2.0",
"@adonisjs/events": "^9.0.2",
"@adonisjs/fold": "^10.1.3",
- "@adonisjs/hash": "^9.0.5",
+ "@adonisjs/hash": "^9.1.1",
"@adonisjs/health": "^2.0.0",
- "@adonisjs/http-server": "^7.4.0",
- "@adonisjs/logger": "^6.0.5",
+ "@adonisjs/http-server": "^7.6.1",
+ "@adonisjs/logger": "^6.0.6",
"@adonisjs/repl": "^4.1.0",
- "@antfu/install-pkg": "^1.0.0",
+ "@antfu/install-pkg": "^1.1.0",
"@paralleldrive/cuid2": "^2.2.2",
"@poppinss/colors": "^4.1.4",
- "@poppinss/dumper": "^0.6.2",
+ "@poppinss/dumper": "^0.6.3",
"@poppinss/macroable": "^1.0.4",
- "@poppinss/utils": "^6.9.2",
+ "@poppinss/utils": "^6.9.3",
"@sindresorhus/is": "^7.0.1",
"@types/he": "^1.2.3",
"error-stack-parser-es": "^1.0.5",
@@ -299,8 +301,8 @@
"peerDependencies": {
"@adonisjs/assembler": "^7.8.0",
"@vinejs/vine": "^2.1.0 || ^3.0.0",
- "argon2": "^0.31.2 || ^0.41.0",
- "bcrypt": "^5.1.1",
+ "argon2": "^0.31.2 || ^0.41.0 || ^0.43.0",
+ "bcrypt": "^5.1.1 || ^6.0.0",
"edge.js": "^6.2.0"
},
"peerDependenciesMeta": {
@@ -322,18 +324,30 @@
}
},
"node_modules/@adonisjs/core/node_modules/@antfu/install-pkg": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz",
- "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz",
+ "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
"license": "MIT",
"dependencies": {
- "package-manager-detector": "^0.2.8",
- "tinyexec": "^0.3.2"
+ "package-manager-detector": "^1.3.0",
+ "tinyexec": "^1.0.1"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
+ "node_modules/@adonisjs/core/node_modules/package-manager-detector": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz",
+ "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==",
+ "license": "MIT"
+ },
+ "node_modules/@adonisjs/core/node_modules/tinyexec": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
+ "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
+ "license": "MIT"
+ },
"node_modules/@adonisjs/cors": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@adonisjs/cors/-/cors-2.2.1.tgz",
@@ -347,12 +361,12 @@
}
},
"node_modules/@adonisjs/drive": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-3.2.0.tgz",
- "integrity": "sha512-vfZphRUmnOHlt5insWes07xXtQn3pn3bvI1SyfOeFV8rK5stKLQ7xD7qp/DcmhW5qzMnyGTuOYUdVOYDJHIiEg==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-3.4.1.tgz",
+ "integrity": "sha512-oDYY4wJ7wDMlO4E+dZPYBu+T3Av7Mj+JL8+J33qgyxtiJylnZgoZDuRfFjZZix/bFNNuWX2sLwTMnyiDcK+YsA==",
"license": "MIT",
"dependencies": {
- "flydrive": "^1.0.3"
+ "flydrive": "^1.1.0"
},
"engines": {
"node": ">=20.6.0"
@@ -388,13 +402,13 @@
}
},
"node_modules/@adonisjs/env": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-6.1.1.tgz",
- "integrity": "sha512-sYvcJMbLSqwFWH0WtTTLddxkyXzERZl+8TEkXlMiIFaAZveq9h5eC4SQ+L5ILe9FHHiHVfmHsYF6LlAfcsIG1w==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/env/-/env-6.2.0.tgz",
+ "integrity": "sha512-DZ7zQ4sBhzWftjU/SxJ7BstimrEiByCvmtAcMNDpDjOtJnR50172PRz1X7KjM3EqjCVrB19izzRVx/rmpCRPOA==",
"license": "MIT",
"dependencies": {
"@poppinss/utils": "^6.9.2",
- "@poppinss/validator-lite": "^2.0.1",
+ "@poppinss/validator-lite": "^2.1.0",
"dotenv": "^16.4.7",
"split-lines": "^3.0.0"
},
@@ -445,20 +459,20 @@
}
},
"node_modules/@adonisjs/hash": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-9.0.5.tgz",
- "integrity": "sha512-oY8PafBrdGsr5UY8cAzzxPCtehZDW7KsPcI47dZpjydOdL/PQrT4liX+cGujL6mSbi3JEgQLBgBs/+SlPFvCrg==",
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@adonisjs/hash/-/hash-9.1.1.tgz",
+ "integrity": "sha512-ZkRguwjAp4skKvKDdRAfdJ2oqQ0N7p9l3sioyXO1E8o0WcsyDgEpsTQtuVNoIdMiw4sn4gJlmL3nyF4BcK1ZDQ==",
"license": "MIT",
"dependencies": {
"@phc/format": "^1.0.0",
- "@poppinss/utils": "^6.8.3"
+ "@poppinss/utils": "^6.9.3"
},
"engines": {
"node": ">=20.6.0"
},
"peerDependencies": {
- "argon2": "^0.31.2 || ^0.41.0",
- "bcrypt": "^5.1.1"
+ "argon2": "^0.31.2 || ^0.41.0 || ^0.43.0",
+ "bcrypt": "^5.1.1 || ^6.0.0"
},
"peerDependenciesMeta": {
"argon2": {
@@ -483,16 +497,16 @@
}
},
"node_modules/@adonisjs/http-server": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.5.0.tgz",
- "integrity": "sha512-krO0c1doG20sKUWOtreHbT9mDSmNah4aIG+xp3fRKwpoCxDRao1wQCN4qtpsUJVVJH/qzx4p1cC6kQiJsJrCfg==",
+ "version": "7.6.1",
+ "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-7.6.1.tgz",
+ "integrity": "sha512-2KHen5rcer6pDvJrDOhr5hJ9cSxSOOrdqmm9o9HkW/BAkMh42ymTIvCtaMmz6amrCSg0cdMO3ImmD8VBaMmfXA==",
"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.2",
+ "@poppinss/utils": "^6.9.3",
"@sindresorhus/is": "^7.0.1",
"accepts": "^1.3.8",
"content-disposition": "^0.5.4",
@@ -501,12 +515,12 @@
"encodeurl": "^2.0.0",
"etag": "^1.8.1",
"fresh": "^0.5.2",
- "mime-types": "^2.1.35",
+ "mime-types": "^3.0.1",
"on-finished": "^2.4.1",
"proxy-addr": "^2.0.7",
"qs": "^6.14.0",
"tmp-cache": "^1.1.0",
- "type-is": "^1.6.18",
+ "type-is": "^2.0.1",
"vary": "^1.1.2",
"youch": "^3.3.4"
},
@@ -728,9 +742,9 @@
}
},
"node_modules/@adonisjs/shield": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/@adonisjs/shield/-/shield-8.1.2.tgz",
- "integrity": "sha512-ksC3KMTnGVYyjos/PM7WMQ/mUNhDuxvpFqNd2YAgPEWYVc+kr3WTTkaRrC7srl6jFmbOOv4R4aQ9RIvo1S0pjg==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/@adonisjs/shield/-/shield-8.2.0.tgz",
+ "integrity": "sha512-RddRbs92y87GGFUgDSWD/Pg7qYHh8+MctUphFZwtbTblvDckrjZxuYyp+vmVATPuvDvK7sOlatuZHT4HQSz9zQ==",
"license": "MIT",
"dependencies": {
"@poppinss/utils": "^6.9.2",
@@ -775,9 +789,9 @@
}
},
"node_modules/@adonisjs/tsconfig": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@adonisjs/tsconfig/-/tsconfig-1.4.0.tgz",
- "integrity": "sha512-go5KlxE8jJaeoIRzm51PcF2YJSK5i022douVk9OjAqvDiU1t2UepcDoEsSiEOgogUDojp9kbRQmFyf0y0YqvOg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@adonisjs/tsconfig/-/tsconfig-1.4.1.tgz",
+ "integrity": "sha512-b7bHdnTaDRGfec4XVtpwsSEukZ549MgqOShScCd1b4xkMK8z1q/jb0Xs4iUL86oIDhty2y7k5vvA6aoQKPAvXQ==",
"dev": true,
"license": "MIT"
},
@@ -862,24 +876,24 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.26.2",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
- "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.27.1",
"js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz",
- "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
+ "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -888,23 +902,23 @@
}
},
"node_modules/@babel/core": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
- "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
+ "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.10",
- "@babel/helper-compilation-targets": "^7.26.5",
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.10",
- "@babel/parser": "^7.26.10",
- "@babel/template": "^7.26.9",
- "@babel/traverse": "^7.26.10",
- "@babel/types": "^7.26.10",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.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/template": "^7.27.2",
+ "@babel/traverse": "^7.27.4",
+ "@babel/types": "^7.27.3",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -920,14 +934,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz",
- "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
+ "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.26.10",
- "@babel/types": "^7.26.10",
+ "@babel/parser": "^7.27.5",
+ "@babel/types": "^7.27.3",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
@@ -937,28 +951,28 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
- "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
+ "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.9"
+ "@babel/types": "^7.27.3"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
- "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@babel/compat-data": "^7.26.5",
- "@babel/helper-validator-option": "^7.25.9",
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -968,18 +982,18 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz",
- "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==",
+ "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==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/helper-replace-supers": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/traverse": "^7.26.9",
+ "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@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",
"semver": "^6.3.1"
},
"engines": {
@@ -990,43 +1004,43 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
- "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
+ "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
+ "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.27.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1036,22 +1050,22 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
- "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
+ "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.9"
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
- "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1059,15 +1073,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.26.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
- "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz",
+ "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.25.9",
- "@babel/helper-optimise-call-expression": "^7.25.9",
- "@babel/traverse": "^7.26.5"
+ "@babel/helper-member-expression-to-functions": "^7.27.1",
+ "@babel/helper-optimise-call-expression": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1077,41 +1091,41 @@
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
- "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
+ "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
- "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
- "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1119,27 +1133,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
- "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz",
+ "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "@babel/template": "^7.26.9",
- "@babel/types": "^7.26.10"
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.27.3"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
- "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
+ "version": "7.27.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
+ "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.26.10"
+ "@babel/types": "^7.27.3"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1149,13 +1163,13 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
- "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+ "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1165,13 +1179,13 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz",
- "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+ "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1181,14 +1195,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.26.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
- "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz",
+ "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helper-plugin-utils": "^7.25.9"
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1198,17 +1212,17 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.26.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz",
- "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz",
+ "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.25.9",
- "@babel/helper-create-class-features-plugin": "^7.25.9",
- "@babel/helper-plugin-utils": "^7.26.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
- "@babel/plugin-syntax-typescript": "^7.25.9"
+ "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@babel/helper-create-class-features-plugin": "^7.27.1",
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1218,17 +1232,17 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz",
- "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz",
+ "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
- "@babel/plugin-syntax-jsx": "^7.25.9",
- "@babel/plugin-transform-modules-commonjs": "^7.25.9",
- "@babel/plugin-transform-typescript": "^7.25.9"
+ "@babel/helper-plugin-utils": "^7.27.1",
+ "@babel/helper-validator-option": "^7.27.1",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-transform-modules-commonjs": "^7.27.1",
+ "@babel/plugin-transform-typescript": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1238,32 +1252,32 @@
}
},
"node_modules/@babel/template": {
- "version": "7.26.9",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
- "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/parser": "^7.26.9",
- "@babel/types": "^7.26.9"
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz",
- "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==",
+ "version": "7.27.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
+ "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.26.2",
- "@babel/generator": "^7.26.10",
- "@babel/parser": "^7.26.10",
- "@babel/template": "^7.26.9",
- "@babel/types": "^7.26.10",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.3",
+ "@babel/parser": "^7.27.4",
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.27.3",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1272,13 +1286,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.26.10",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
- "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
+ "version": "7.27.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
+ "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1331,9 +1345,9 @@
}
},
"node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz",
- "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
+ "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
"cpu": [
"ppc64"
],
@@ -1347,9 +1361,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz",
- "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
+ "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
"cpu": [
"arm"
],
@@ -1363,9 +1377,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz",
- "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
+ "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
"cpu": [
"arm64"
],
@@ -1379,9 +1393,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz",
- "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==",
+ "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==",
"cpu": [
"x64"
],
@@ -1395,9 +1409,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz",
- "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==",
+ "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==",
"cpu": [
"arm64"
],
@@ -1411,9 +1425,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz",
- "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==",
+ "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==",
"cpu": [
"x64"
],
@@ -1427,9 +1441,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz",
- "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
"cpu": [
"arm64"
],
@@ -1443,9 +1457,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz",
- "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
+ "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
"cpu": [
"x64"
],
@@ -1459,9 +1473,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz",
- "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
+ "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
"cpu": [
"arm"
],
@@ -1475,9 +1489,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz",
- "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
+ "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
"cpu": [
"arm64"
],
@@ -1491,9 +1505,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz",
- "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
+ "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
"cpu": [
"ia32"
],
@@ -1507,9 +1521,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz",
- "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
+ "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
"cpu": [
"loong64"
],
@@ -1523,9 +1537,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz",
- "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
+ "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
"cpu": [
"mips64el"
],
@@ -1539,9 +1553,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz",
- "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
+ "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
"cpu": [
"ppc64"
],
@@ -1555,9 +1569,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz",
- "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==",
+ "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==",
"cpu": [
"riscv64"
],
@@ -1571,9 +1585,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz",
- "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
+ "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
"cpu": [
"s390x"
],
@@ -1587,9 +1601,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz",
- "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
+ "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
"cpu": [
"x64"
],
@@ -1603,9 +1617,9 @@
}
},
"node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz",
- "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
"cpu": [
"arm64"
],
@@ -1619,9 +1633,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz",
- "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
+ "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
"cpu": [
"x64"
],
@@ -1635,9 +1649,9 @@
}
},
"node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz",
- "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
+ "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
"cpu": [
"arm64"
],
@@ -1651,9 +1665,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz",
- "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==",
+ "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==",
"cpu": [
"x64"
],
@@ -1667,9 +1681,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz",
- "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==",
+ "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==",
"cpu": [
"x64"
],
@@ -1683,9 +1697,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz",
- "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
+ "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
"cpu": [
"arm64"
],
@@ -1699,9 +1713,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz",
- "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
+ "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
"cpu": [
"ia32"
],
@@ -1715,9 +1729,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz",
- "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
+ "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
"cpu": [
"x64"
],
@@ -1731,9 +1745,9 @@
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
- "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1823,9 +1837,9 @@
}
},
"node_modules/@faker-js/faker": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.6.0.tgz",
- "integrity": "sha512-3vm4by+B5lvsFPSyep3ELWmZfE3kicDtmemVpuwl1yH7tqtnHdsA6hG8fbXedMVdkzgtvzWoRgjSB4Q+FHnZiw==",
+ "version": "9.8.0",
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.8.0.tgz",
+ "integrity": "sha512-U9wpuSrJC93jZBxx/Qq2wPjCuYISBueyVUGK7qqdmj7r/nxaxwW8AQDCLeRO7wZnjj94sh3p246cAYjUKuqgfg==",
"funding": [
{
"type": "opencollective",
@@ -1911,9 +1925,9 @@
"license": "BSD-3-Clause"
},
"node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
- "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"license": "Apache-2.0",
"engines": {
"node": ">=18.18"
@@ -1924,13 +1938,13 @@
}
},
"node_modules/@inertiajs/core": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.5.tgz",
- "integrity": "sha512-AEhWsfkn+rHCO35mArmLQVVkbzETJby8QZ9iwRxTz891kbWS+ZAiEPa7ROJkDg3iaPYKVGBnI126xCUVxxesJg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.0.11.tgz",
+ "integrity": "sha512-DSFdkPLvLwHC0hePc/692WK9ItRzddVZ+OS5ZO1B2+6TmZnZH3kTQZGEhaYAtkAB+DHKxOm1oGHPKQrsAZ54qQ==",
"license": "MIT",
"dependencies": {
"axios": "^1.8.2",
- "deepmerge": "^4.0.0",
+ "es-toolkit": "^1.34.1",
"qs": "^6.9.0"
}
},
@@ -1955,14 +1969,13 @@
}
},
"node_modules/@inertiajs/vue3": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.0.5.tgz",
- "integrity": "sha512-FdXJ/yY4rTpRygEHJY7b/Wc/02nI4PZPyLRy4dr/7dVFaVKGljVm1bcX8oBVowXxw7reT01sW2YwjqTSUmXjbg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-2.0.11.tgz",
+ "integrity": "sha512-dlx62L7heOzQzBwRl7q/aZyS/b3AcwO2x6VMPfcSkCn+yA/HEImUJ6AlVojrl/vyvNf9PelermyQ7aWJNHdvqw==",
"license": "MIT",
"dependencies": {
- "@inertiajs/core": "2.0.5",
- "lodash.clonedeep": "^4.5.0",
- "lodash.isequal": "^4.5.0"
+ "@inertiajs/core": "2.0.11",
+ "es-toolkit": "^1.33.0"
},
"peerDependencies": {
"vue": "^3.0.0"
@@ -2132,12 +2145,13 @@
}
},
"node_modules/@japa/errors-printer/node_modules/youch": {
- "version": "4.1.0-beta.6",
- "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0-beta.6.tgz",
- "integrity": "sha512-y1aNsEeoLXnWb6pI9TvfNPIxySyo4Un3OGxKn7rsNj8+tgSquzXEWkzfA5y6gU0fvzmQgvx3JBn/p51qQ8Xg9A==",
+ "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==",
"devOptional": true,
"license": "MIT",
"dependencies": {
+ "@poppinss/colors": "^4.1.4",
"@poppinss/dumper": "^0.6.3",
"@speed-highlight/core": "^1.2.7",
"cookie": "^1.0.2",
@@ -2316,9 +2330,9 @@
}
},
"node_modules/@jsonjoy.com/util": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz",
- "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz",
+ "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -2376,9 +2390,9 @@
}
},
"node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -2395,9 +2409,9 @@
"license": "Apache-2.0"
},
"node_modules/@noble/hashes": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz",
- "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"license": "MIT",
"engines": {
"node": "^14.21.3 || >=16"
@@ -2493,9 +2507,9 @@
}
},
"node_modules/@opensearch-project/opensearch": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-3.4.0.tgz",
- "integrity": "sha512-NdVWpBxa2mA8fQvn3jWgoDnIHk/xNtxrPA8joQVBP75CJMEr/379wzDpnIq+HZn3E0zyE0VQOxDV+LbbyGkefA==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@opensearch-project/opensearch/-/opensearch-3.5.1.tgz",
+ "integrity": "sha512-6bf+HcuERzAtHZxrm6phjref54ABse39BpkDie/YO3AUFMCBrb3SK5okKSdT5n3+nDRuEEQLhQCl0RQV3s1qpA==",
"license": "Apache-2.0",
"dependencies": {
"aws4": "^1.11.0",
@@ -2540,28 +2554,28 @@
}
},
"node_modules/@pkgr/core": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
- "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
+ "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://opencollective.com/unts"
+ "url": "https://opencollective.com/pkgr"
}
},
"node_modules/@poppinss/chokidar-ts": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@poppinss/chokidar-ts/-/chokidar-ts-4.1.5.tgz",
- "integrity": "sha512-V8QtYZZMTbpv9aMX/agZSssIVfig7HK2s9grUqs6x221PEB/YirYtasj6g0Jx1o+yg7D38Y9kKPmL7d9MgeXBw==",
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@poppinss/chokidar-ts/-/chokidar-ts-4.1.9.tgz",
+ "integrity": "sha512-Nl4JAb5dvwmZhXElSuiuHy4YkB7YFql/AE2tTu9TyJCfPnUrcwm2iMTUZVa+aGz+bolRPuPNKsuypxN59gBvQQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.3",
- "emittery": "^1.0.3",
- "memoize": "^10.0.0",
+ "emittery": "^1.1.0",
+ "memoize": "^10.1.0",
"picomatch": "^4.0.2",
"slash": "^5.1.0"
},
@@ -2569,7 +2583,7 @@
"node": ">=18.16.0"
},
"peerDependencies": {
- "typescript": "^4.0.0 || ^5.0.0"
+ "typescript": "^5.0.0"
}
},
"node_modules/@poppinss/cliui": {
@@ -2712,45 +2726,42 @@
}
},
"node_modules/@poppinss/string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.2.0.tgz",
- "integrity": "sha512-1z78zjqhfjqsvWr+pQzCpRNcZpIM+5vNY5SFOvz28GrL/LRanwtmOku5tBX7jE8/ng3oXaOVrB59lnnXFtvkug==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@poppinss/string/-/string-1.6.0.tgz",
+ "integrity": "sha512-HfAf9VqTvo31BsruwgwEauQ316RNODdryk6QgYZo4qTV50s0h1H9HmIr+QjwwI3u4Sz7r4Q1dd1EVaLB7pWlaw==",
"license": "MIT",
"dependencies": {
"@lukeed/ms": "^2.0.2",
"@types/bytes": "^3.1.5",
"@types/pluralize": "^0.0.33",
"bytes": "^3.1.2",
- "case-anything": "^3.1.0",
+ "case-anything": "^3.1.2",
"pluralize": "^8.0.0",
"slugify": "^1.6.6",
"truncatise": "^0.0.8"
- },
- "engines": {
- "node": ">=20.6.0"
}
},
"node_modules/@poppinss/utils": {
- "version": "6.9.2",
- "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.9.2.tgz",
- "integrity": "sha512-ypVszZxhwiehhklM5so2BI+nClQJwp7mBUSJh/R1GepeUH1vvD5GtxMz8Lp9dO9oAbKyDmq1jc4g/4E0dv8r2g==",
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-6.9.4.tgz",
+ "integrity": "sha512-KJe9/ebFBqb4fFBdadgN4YgT4bHAKdWhLAFzjaeDqx5vOCtD3C+byN5DrORVNbwAjt+rb8beP8pXaWZWx+WmTA==",
"license": "MIT",
"dependencies": {
- "@poppinss/exception": "^1.2.0",
+ "@poppinss/exception": "^1.2.1",
"@poppinss/object-builder": "^1.1.0",
- "@poppinss/string": "^1.1.0",
+ "@poppinss/string": "^1.3.0",
"flattie": "^1.1.1",
"safe-stable-stringify": "^2.5.0",
- "secure-json-parse": "^3.0.1"
+ "secure-json-parse": "^4.0.0"
},
"engines": {
"node": ">=18.16.0"
}
},
"node_modules/@poppinss/utils/node_modules/secure-json-parse": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.2.tgz",
- "integrity": "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz",
+ "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==",
"funding": [
{
"type": "github",
@@ -2770,74 +2781,69 @@
"license": "MIT"
},
"node_modules/@redis/bloom": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz",
- "integrity": "sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.5.5.tgz",
+ "integrity": "sha512-M0GDmw8k0EOFoSpmMjhFUADk/apoano97fLSpT81opgmkkDtBB9iB6l6husxnzK5t2qNz/o0+OCVG9g6lEEwKw==",
"license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
"peerDependencies": {
- "@redis/client": "^1.0.0"
+ "@redis/client": "^5.5.5"
}
},
"node_modules/@redis/client": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz",
- "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.5.5.tgz",
+ "integrity": "sha512-1Dv/CVdMNLw0mlROSnmpp4MQu+6YIJX0YR0h3g2hnPdLvk6L7TcRcrUj7BQFGSeZD2MxklAUO+rp09ITUqE5Og==",
"license": "MIT",
"dependencies": {
- "cluster-key-slot": "1.1.2",
- "generic-pool": "3.9.0",
- "yallist": "4.0.0"
+ "cluster-key-slot": "1.1.2"
},
"engines": {
- "node": ">=14"
- }
- },
- "node_modules/@redis/client/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "license": "ISC"
- },
- "node_modules/@redis/graph": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz",
- "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==",
- "license": "MIT",
- "peerDependencies": {
- "@redis/client": "^1.0.0"
+ "node": ">= 18"
}
},
"node_modules/@redis/json": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz",
- "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.5.5.tgz",
+ "integrity": "sha512-Nq8wHjOhwuhD05YPWFPL9RyT3K1VdT37TKvqbhykZA2MWQgjjhLn5i1/6zZ+1b0Zc/Sr9E0eK9J8txk6YJR6EA==",
"license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
"peerDependencies": {
- "@redis/client": "^1.0.0"
+ "@redis/client": "^5.5.5"
}
},
"node_modules/@redis/search": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz",
- "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.5.5.tgz",
+ "integrity": "sha512-xM/DKrRhbsMS2QQF5bBPjR7P/QEjWWZDUr92r+UOwkZjvc/kmy0tp7h8zkxBo2jtSF99vkk2mwMzn6fQ8d60aQ==",
"license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
"peerDependencies": {
- "@redis/client": "^1.0.0"
+ "@redis/client": "^5.5.5"
}
},
"node_modules/@redis/time-series": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz",
- "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.5.5.tgz",
+ "integrity": "sha512-2ifwV75Fv/uVX4n0zqvgqIlIInHZtVj+afjcbXPBD2GhG2AeVfkitTz1bMnGnNDA78sWRYooK42OWH9yqujjyQ==",
"license": "MIT",
+ "engines": {
+ "node": ">= 18"
+ },
"peerDependencies": {
- "@redis/client": "^1.0.0"
+ "@redis/client": "^5.5.5"
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz",
- "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==",
+ "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==",
"cpu": [
"arm"
],
@@ -2848,9 +2854,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz",
- "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2861,9 +2867,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz",
- "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2874,9 +2880,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz",
- "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
+ "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
"cpu": [
"x64"
],
@@ -2887,9 +2893,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.36.0.tgz",
- "integrity": "sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2900,9 +2906,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz",
- "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==",
+ "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==",
"cpu": [
"x64"
],
@@ -2913,9 +2919,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz",
- "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==",
+ "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==",
"cpu": [
"arm"
],
@@ -2926,9 +2932,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz",
- "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==",
+ "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==",
"cpu": [
"arm"
],
@@ -2939,9 +2945,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz",
- "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2952,9 +2958,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz",
- "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==",
+ "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==",
"cpu": [
"arm64"
],
@@ -2965,9 +2971,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz",
- "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==",
+ "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==",
"cpu": [
"loong64"
],
@@ -2978,9 +2984,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz",
- "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==",
+ "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==",
"cpu": [
"ppc64"
],
@@ -2991,9 +2997,22 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz",
- "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==",
+ "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==",
+ "cpu": [
+ "riscv64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "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==",
"cpu": [
"riscv64"
],
@@ -3004,9 +3023,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz",
- "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==",
+ "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==",
"cpu": [
"s390x"
],
@@ -3017,9 +3036,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz",
- "integrity": "sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==",
+ "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==",
"cpu": [
"x64"
],
@@ -3030,9 +3049,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.36.0.tgz",
- "integrity": "sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==",
+ "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==",
"cpu": [
"x64"
],
@@ -3043,9 +3062,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz",
- "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==",
+ "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==",
"cpu": [
"arm64"
],
@@ -3056,9 +3075,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz",
- "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==",
+ "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==",
"cpu": [
"ia32"
],
@@ -3069,9 +3088,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz",
- "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==",
+ "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==",
"cpu": [
"x64"
],
@@ -3095,9 +3114,9 @@
"license": "MIT"
},
"node_modules/@sindresorhus/is": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz",
- "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.2.tgz",
+ "integrity": "sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==",
"license": "MIT",
"engines": {
"node": ">=18"
@@ -3127,9 +3146,9 @@
"license": "CC0-1.0"
},
"node_modules/@swc/wasm": {
- "version": "1.11.10",
- "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.11.10.tgz",
- "integrity": "sha512-ujwBa7w9wYa5L8J+KptuWlaDm3r/MUvVntVaNsseJSmW/A7SkvqizDGCYJU9wHMaQqED7J2bN1e3xdOnyPwFtQ==",
+ "version": "1.11.29",
+ "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.11.29.tgz",
+ "integrity": "sha512-FirHVrjDsaLICll/iXJzK99TbIbMfYiAGLV6Cbc3W29Q/QFCeiO0tpHObXXdTiJgV2tHIsuwRfCaSYNwyrRDDg==",
"dev": true,
"license": "Apache-2.0"
},
@@ -3159,9 +3178,9 @@
}
},
"node_modules/@tanstack/virtual-core": {
- "version": "3.13.4",
- "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.4.tgz",
- "integrity": "sha512-fNGO9fjjSLns87tlcto106enQQLycCKR4DPNpgq3djP5IdcPFdPAmaKjsgzIeRhH7hWrELgW12hYnRthS5kLUw==",
+ "version": "3.13.9",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.9.tgz",
+ "integrity": "sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==",
"dev": true,
"license": "MIT",
"funding": {
@@ -3170,13 +3189,13 @@
}
},
"node_modules/@tanstack/vue-virtual": {
- "version": "3.13.4",
- "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.4.tgz",
- "integrity": "sha512-1fPrd3hE1SS4R/9JbX1AlzueY4duCK7ixuLcMW5GMnk9N6WbLo9MioNKiv22V+UaXKOLNy8tLdzT8NYerOFTOQ==",
+ "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==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tanstack/virtual-core": "3.13.4"
+ "@tanstack/virtual-core": "3.13.9"
},
"funding": {
"type": "github",
@@ -3334,9 +3353,9 @@
"license": "MIT"
},
"node_modules/@types/chai": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.0.tgz",
- "integrity": "sha512-FWnQYdrG9FAC8KgPVhDFfrPL1FBsL3NtIt2WsxKvwu/61K6HiuDF3xAb7c7w/k9ML2QOUHcwTgU7dKLFPK6sBg==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
+ "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3344,9 +3363,9 @@
}
},
"node_modules/@types/clamscan": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/clamscan/-/clamscan-2.4.0.tgz",
- "integrity": "sha512-wqYy+klgBWqCFAMNZsJrb5Q4d0VIjMPk2lfGsq5jHMPyq8E61YLOV+3VNrvoJdbNmzVIXGIc9npb0Tjw+MXEfw==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@types/clamscan/-/clamscan-2.4.1.tgz",
+ "integrity": "sha512-KhBHhXsMGDoEkk87VRtHtDsjoqXD3epu+a09c1sjW7xqpvoihScxhZNdNIPegVCLDvPOp4khiIpy02XabseztQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3426,15 +3445,15 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
- "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
"license": "MIT"
},
"node_modules/@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+ "version": "4.17.22",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz",
+ "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3445,19 +3464,6 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "5.0.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
- "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
"version": "4.19.6",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
"integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
@@ -3535,9 +3541,9 @@
}
},
"node_modules/@types/leaflet": {
- "version": "1.9.16",
- "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.16.tgz",
- "integrity": "sha512-wzZoyySUxkgMZ0ihJ7IaUIblG8Rdc8AbbZKLneyn+QjYsj5q1QU7TEKYqwTr10BGSzY5LI7tJk9Ifo+mEjdFRw==",
+ "version": "1.9.18",
+ "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.18.tgz",
+ "integrity": "sha512-ht2vsoPjezor5Pmzi5hdsA7F++v5UGq9OlUduWHmMZiuQGIpJ2WS5+Gg9HaAA79gNh1AIPtCqhzejcIZ3lPzXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3545,9 +3551,9 @@
}
},
"node_modules/@types/luxon": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz",
- "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz",
+ "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==",
"devOptional": true,
"license": "MIT"
},
@@ -3566,12 +3572,12 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.13.10",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
- "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
+ "version": "22.15.29",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.29.tgz",
+ "integrity": "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==",
"license": "MIT",
"dependencies": {
- "undici-types": "~6.20.0"
+ "undici-types": "~6.21.0"
}
},
"node_modules/@types/node-forge": {
@@ -3636,9 +3642,9 @@
}
},
"node_modules/@types/qs": {
- "version": "6.9.18",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz",
- "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
"license": "MIT"
},
"node_modules/@types/range-parser": {
@@ -3656,9 +3662,9 @@
"license": "MIT"
},
"node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz",
+ "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==",
"dev": true,
"license": "MIT"
},
@@ -3736,9 +3742,9 @@
}
},
"node_modules/@types/supertest": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz",
- "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz",
+ "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3747,15 +3753,15 @@
}
},
"node_modules/@types/validator": {
- "version": "13.12.2",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz",
- "integrity": "sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==",
+ "version": "13.15.1",
+ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.1.tgz",
+ "integrity": "sha512-9gG6ogYcoI2mCMLdcO0NYI0AYrbxIjv0MDmy/5Ywo6CpWWrqYayc+mmgxRsCgtcGJm9BSbXkMsmxGah1iGHAAQ==",
"license": "MIT"
},
"node_modules/@types/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==",
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3798,9 +3804,9 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -3948,9 +3954,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4022,9 +4028,9 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4074,9 +4080,9 @@
}
},
"node_modules/@vavite/multibuild/node_modules/@types/node": {
- "version": "18.19.80",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.80.tgz",
- "integrity": "sha512-kEWeMwMeIvxYkeg1gTc01awpwLbfMRZXdIhwRcakd/KlK53jmRC26LqcbIt7fnAQTu5GzlnWmzA3H6+l1u6xxQ==",
+ "version": "18.19.110",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.110.tgz",
+ "integrity": "sha512-WW2o4gTmREtSnqKty9nhqF/vA0GKd0V/rbC0OyjSk9Bz6bzlsXKT+i7WDdS/a0z74rfT2PO4dArVCSnapNLA5Q==",
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
@@ -4117,9 +4123,9 @@
}
},
"node_modules/@vitejs/plugin-vue": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz",
- "integrity": "sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz",
+ "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4131,110 +4137,139 @@
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
- "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz",
+ "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/shared": "3.5.13",
+ "@babel/parser": "^7.27.2",
+ "@vue/shared": "3.5.16",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
- "source-map-js": "^1.2.0"
+ "source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
- "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",
+ "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-core": "3.5.13",
- "@vue/shared": "3.5.13"
+ "@vue/compiler-core": "3.5.16",
+ "@vue/shared": "3.5.16"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
- "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",
+ "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.25.3",
- "@vue/compiler-core": "3.5.13",
- "@vue/compiler-dom": "3.5.13",
- "@vue/compiler-ssr": "3.5.13",
- "@vue/shared": "3.5.13",
+ "@babel/parser": "^7.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",
"estree-walker": "^2.0.2",
- "magic-string": "^0.30.11",
- "postcss": "^8.4.48",
- "source-map-js": "^1.2.0"
+ "magic-string": "^0.30.17",
+ "postcss": "^8.5.3",
+ "source-map-js": "^1.2.1"
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
- "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",
+ "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.13",
- "@vue/shared": "3.5.13"
+ "@vue/compiler-dom": "3.5.16",
+ "@vue/shared": "3.5.16"
}
},
"node_modules/@vue/devtools-api": {
- "version": "6.6.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
- "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
+ "version": "7.7.6",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.6.tgz",
+ "integrity": "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==",
"dev": true,
- "license": "MIT"
- },
- "node_modules/@vue/reactivity": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz",
- "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
"license": "MIT",
"dependencies": {
- "@vue/shared": "3.5.13"
+ "@vue/devtools-kit": "^7.7.6"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^7.7.6",
+ "birpc": "^2.3.0",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.2"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.7.6",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz",
+ "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "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==",
+ "license": "MIT",
+ "dependencies": {
+ "@vue/shared": "3.5.16"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
- "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.16.tgz",
+ "integrity": "sha512-bw5Ykq6+JFHYxrQa7Tjr+VSzw7Dj4ldR/udyBZbq73fCdJmyy5MPIFR9IX/M5Qs+TtTjuyUTCnmK3lWWwpAcFQ==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.13",
- "@vue/shared": "3.5.13"
+ "@vue/reactivity": "3.5.16",
+ "@vue/shared": "3.5.16"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
- "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.16.tgz",
+ "integrity": "sha512-T1qqYJsG2xMGhImRUV9y/RseB9d0eCYZQ4CWca9ztCuiPj/XWNNN+lkNBuzVbia5z4/cgxdL28NoQCvC0Xcfww==",
"license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.13",
- "@vue/runtime-core": "3.5.13",
- "@vue/shared": "3.5.13",
+ "@vue/reactivity": "3.5.16",
+ "@vue/runtime-core": "3.5.16",
+ "@vue/shared": "3.5.16",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
- "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.16.tgz",
+ "integrity": "sha512-BrX0qLiv/WugguGsnQUJiYOE0Fe5mZTwi6b7X/ybGB0vfrPH9z0gD/Y6WOR1sGCgX4gc25L1RYS5eYQKDMoNIg==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-ssr": "3.5.13",
- "@vue/shared": "3.5.13"
+ "@vue/compiler-ssr": "3.5.16",
+ "@vue/shared": "3.5.16"
},
"peerDependencies": {
- "vue": "3.5.13"
+ "vue": "3.5.16"
}
},
"node_modules/@vue/shared": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
- "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz",
+ "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==",
"license": "MIT"
},
"node_modules/@webassemblyjs/ast": {
@@ -4454,6 +4489,27 @@
"node": ">= 0.6"
}
},
+ "node_modules/accepts/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/accepts/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/acorn": {
"version": "8.14.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
@@ -4682,6 +4738,21 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/argon2": {
+ "version": "0.43.0",
+ "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.43.0.tgz",
+ "integrity": "sha512-u/HKLcbWShVDhkfwI4hWyiUf3qyX8QhTfaIv2cWE18uqhXCmR5hb6Ed7oqYi2KCQegeAnRhiFzbjzm7i5yl1GA==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "@phc/format": "^1.0.0",
+ "node-addon-api": "^8.3.1",
+ "node-gyp-build": "^4.8.4"
+ },
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -4811,9 +4882,9 @@
"license": "MIT"
},
"node_modules/axios": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz",
- "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
+ "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
@@ -4885,6 +4956,12 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/bcrypt/node_modules/node-addon-api": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
+ "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
+ "license": "MIT"
+ },
"node_modules/bcryptjs": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
@@ -4904,6 +4981,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/birpc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz",
+ "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -4952,6 +5039,39 @@
"node": ">=0.10.0"
}
},
+ "node_modules/body-parser/node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/body-parser/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/body-parser/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -4991,6 +5111,20 @@
"node": ">= 0.8"
}
},
+ "node_modules/body-parser/node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/bonjour-service": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz",
@@ -5025,9 +5159,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.24.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
- "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
+ "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
"dev": true,
"funding": [
{
@@ -5045,10 +5179,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001688",
- "electron-to-chromium": "^1.5.73",
+ "caniuse-lite": "^1.0.30001718",
+ "electron-to-chromium": "^1.5.160",
"node-releases": "^2.0.19",
- "update-browserslist-db": "^1.1.1"
+ "update-browserslist-db": "^1.1.3"
},
"bin": {
"browserslist": "cli.js"
@@ -5188,9 +5322,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001705",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001705.tgz",
- "integrity": "sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==",
+ "version": "1.0.30001721",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
+ "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
"dev": true,
"funding": [
{
@@ -5268,9 +5402,9 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.8",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.8.tgz",
- "integrity": "sha512-IkGZlVpXP+83QpMm4uxEiGqSI7jFizwVtF3+n5Pc3k7sMO+tkd0qxh2OzLhenM0K80xtmAONWGBn082EiBQSDA==",
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz",
+ "integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5675,7 +5809,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -5725,6 +5858,22 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/copy-anything": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
+ "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-what": "^4.1.8"
+ },
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/copy-file": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz",
@@ -5887,9 +6036,9 @@
"license": "MIT"
},
"node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -5940,9 +6089,9 @@
}
},
"node_modules/dedent": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz",
- "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
+ "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
@@ -6097,9 +6246,9 @@
}
},
"node_modules/detect-libc": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
- "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -6218,9 +6367,9 @@
}
},
"node_modules/dotenv": {
- "version": "16.4.7",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz",
- "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==",
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
+ "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -6353,9 +6502,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.119",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.119.tgz",
- "integrity": "sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ==",
+ "version": "1.5.164",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.164.tgz",
+ "integrity": "sha512-TXBrF2aZenRjY3wbj5Yc0mZn43lMiSHNkzwPkIxx+vWUB35Kf8Gm/uOYmOJFNQ7SUwWAinbfxX73ANIud65wSA==",
"dev": true,
"license": "ISC"
},
@@ -6495,9 +6644,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
- "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+ "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
"license": "MIT"
},
"node_modules/es-object-atoms": {
@@ -6527,10 +6676,20 @@
"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.1",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz",
- "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==",
+ "version": "0.25.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
+ "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -6540,31 +6699,31 @@
"node": ">=18"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.1",
- "@esbuild/android-arm": "0.25.1",
- "@esbuild/android-arm64": "0.25.1",
- "@esbuild/android-x64": "0.25.1",
- "@esbuild/darwin-arm64": "0.25.1",
- "@esbuild/darwin-x64": "0.25.1",
- "@esbuild/freebsd-arm64": "0.25.1",
- "@esbuild/freebsd-x64": "0.25.1",
- "@esbuild/linux-arm": "0.25.1",
- "@esbuild/linux-arm64": "0.25.1",
- "@esbuild/linux-ia32": "0.25.1",
- "@esbuild/linux-loong64": "0.25.1",
- "@esbuild/linux-mips64el": "0.25.1",
- "@esbuild/linux-ppc64": "0.25.1",
- "@esbuild/linux-riscv64": "0.25.1",
- "@esbuild/linux-s390x": "0.25.1",
- "@esbuild/linux-x64": "0.25.1",
- "@esbuild/netbsd-arm64": "0.25.1",
- "@esbuild/netbsd-x64": "0.25.1",
- "@esbuild/openbsd-arm64": "0.25.1",
- "@esbuild/openbsd-x64": "0.25.1",
- "@esbuild/sunos-x64": "0.25.1",
- "@esbuild/win32-arm64": "0.25.1",
- "@esbuild/win32-ia32": "0.25.1",
- "@esbuild/win32-x64": "0.25.1"
+ "@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"
}
},
"node_modules/escalade": {
@@ -6665,14 +6824,17 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.1.tgz",
- "integrity": "sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==",
+ "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==",
"dev": true,
"license": "MIT",
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
"peerDependencies": {
"eslint": ">=7.0.0"
}
@@ -6695,14 +6857,14 @@
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.3.tgz",
- "integrity": "sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==",
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz",
+ "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==",
"dev": true,
"license": "MIT",
"dependencies": {
"prettier-linter-helpers": "^1.0.0",
- "synckit": "^0.9.1"
+ "synckit": "^0.11.7"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
@@ -6713,7 +6875,7 @@
"peerDependencies": {
"@types/eslint": ">=8.0.0",
"eslint": ">=8.0.0",
- "eslint-config-prettier": "*",
+ "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
"prettier": ">=3.0.0"
},
"peerDependenciesMeta": {
@@ -6904,24 +7066,24 @@
}
},
"node_modules/execa": {
- "version": "9.5.2",
- "resolved": "https://registry.npmjs.org/execa/-/execa-9.5.2.tgz",
- "integrity": "sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==",
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz",
+ "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@sindresorhus/merge-streams": "^4.0.0",
- "cross-spawn": "^7.0.3",
+ "cross-spawn": "^7.0.6",
"figures": "^6.1.0",
"get-stream": "^9.0.0",
- "human-signals": "^8.0.0",
+ "human-signals": "^8.0.1",
"is-plain-obj": "^4.1.0",
"is-stream": "^4.0.1",
"npm-run-path": "^6.0.0",
- "pretty-ms": "^9.0.0",
+ "pretty-ms": "^9.2.0",
"signal-exit": "^4.1.0",
"strip-final-newline": "^4.0.0",
- "yoctocolors": "^2.0.0"
+ "yoctocolors": "^2.1.1"
},
"engines": {
"node": "^18.19.0 || >=20.5.0"
@@ -6997,6 +7159,39 @@
"ms": "2.0.0"
}
},
+ "node_modules/express/node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -7020,6 +7215,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/express/node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/fast-copy": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz",
@@ -7148,6 +7357,20 @@
"node": ">=0.8.0"
}
},
+ "node_modules/fdir": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
+ "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fflate": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
@@ -7184,9 +7407,9 @@
}
},
"node_modules/file-type": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz",
- "integrity": "sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.5.0.tgz",
+ "integrity": "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==",
"license": "MIT",
"dependencies": {
"@tokenizer/inflate": "^0.2.6",
@@ -7389,13 +7612,13 @@
}
},
"node_modules/flydrive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/flydrive/-/flydrive-1.1.0.tgz",
- "integrity": "sha512-acV6Pl2T+jjOURyvE57c79HP2KZmeI6sgPO6n5fZnExre4y8SCcLz5Fzttz79Snrpp6HbsA1q255OdVDf5Vrfg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/flydrive/-/flydrive-1.2.0.tgz",
+ "integrity": "sha512-l9ix5MhBE8bVwxyHdFku6z5KhGOCOXQDI9xGNIlACSz9UrDFQxAB1I6W0qffZiOBBDambiJZlEYBCxlvF4U7fw==",
"license": "MIT",
"dependencies": {
- "@humanwhocodes/retry": "^0.3.0",
- "@poppinss/utils": "^6.7.3",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@poppinss/utils": "^6.9.2",
"etag": "^1.8.1",
"mime-types": "^2.1.35"
},
@@ -7419,10 +7642,31 @@
}
}
},
+ "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.4",
- "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz",
- "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==",
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz",
+ "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==",
"license": "MIT",
"dependencies": {
"tabbable": "^6.2.0"
@@ -7489,6 +7733,27 @@
"node": ">= 18"
}
},
+ "node_modules/form-data/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/form-data/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/formdata-node": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-6.0.3.tgz",
@@ -7499,14 +7764,14 @@
}
},
"node_modules/formidable": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz",
- "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==",
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz",
+ "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@paralleldrive/cuid2": "^2.2.2",
"dezalgo": "^1.0.4",
- "hexoid": "^1.0.0",
"once": "^1.4.0",
"qs": "^6.11.0"
},
@@ -7681,15 +7946,6 @@
"node": ">=8"
}
},
- "node_modules/generic-pool": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz",
- "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -7898,9 +8154,9 @@
}
},
"node_modules/globby/node_modules/ignore": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz",
- "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"devOptional": true,
"license": "MIT",
"engines": {
@@ -7920,9 +8176,9 @@
}
},
"node_modules/got": {
- "version": "14.4.6",
- "resolved": "https://registry.npmjs.org/got/-/got-14.4.6.tgz",
- "integrity": "sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==",
+ "version": "14.4.7",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.4.7.tgz",
+ "integrity": "sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==",
"license": "MIT",
"dependencies": {
"@sindresorhus/is": "^7.0.1",
@@ -8051,15 +8307,12 @@
"dev": true,
"license": "MIT"
},
- "node_modules/hexoid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
- "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==",
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
"dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
+ "license": "MIT"
},
"node_modules/hosted-git-info": {
"version": "7.0.2",
@@ -8151,9 +8404,9 @@
}
},
"node_modules/html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
+ "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
"funding": [
{
"type": "github",
@@ -8167,9 +8420,9 @@
"license": "MIT"
},
"node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
"license": "BSD-2-Clause"
},
"node_modules/http-deceiver": {
@@ -8196,9 +8449,9 @@
}
},
"node_modules/http-parser-js": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz",
- "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==",
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz",
+ "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
"dev": true,
"license": "MIT"
},
@@ -8218,9 +8471,9 @@
}
},
"node_modules/http-proxy-middleware": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
- "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
+ "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8288,9 +8541,9 @@
}
},
"node_modules/human-signals": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.0.tgz",
- "integrity": "sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
+ "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
"devOptional": true,
"license": "Apache-2.0",
"engines": {
@@ -8437,9 +8690,9 @@
}
},
"node_modules/index-to-position": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-0.1.2.tgz",
- "integrity": "sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz",
+ "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8485,9 +8738,9 @@
}
},
"node_modules/ioredis": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.0.tgz",
- "integrity": "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==",
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.1.tgz",
+ "integrity": "sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==",
"license": "MIT",
"dependencies": {
"@ioredis/commands": "^1.1.1",
@@ -8690,6 +8943,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-what": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/is-wsl": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
@@ -9135,12 +9401,6 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "license": "MIT"
- },
"node_modules/lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
@@ -9153,13 +9413,6 @@
"integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==",
"license": "MIT"
},
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.",
- "license": "MIT"
- },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -9287,9 +9540,9 @@
}
},
"node_modules/luxon": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz",
- "integrity": "sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==",
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
+ "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -9350,9 +9603,9 @@
}
},
"node_modules/memfs": {
- "version": "4.17.0",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz",
- "integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==",
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz",
+ "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -9449,9 +9702,9 @@
}
},
"node_modules/mime": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.6.tgz",
- "integrity": "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz",
+ "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==",
"funding": [
"https://github.com/sponsors/broofa"
],
@@ -9464,21 +9717,21 @@
}
},
"node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
+ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
"license": "MIT",
"dependencies": {
- "mime-db": "1.52.0"
+ "mime-db": "^1.54.0"
},
"engines": {
"node": ">= 0.6"
@@ -9647,9 +9900,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.10.tgz",
- "integrity": "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"funding": [
{
"type": "github",
@@ -9708,10 +9961,13 @@
}
},
"node_modules/node-addon-api": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
- "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==",
- "license": "MIT"
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz",
+ "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==",
+ "license": "MIT",
+ "engines": {
+ "node": "^18 || ^20 || >= 21"
+ }
},
"node_modules/node-exceptions": {
"version": "4.0.1",
@@ -9749,6 +10005,17 @@
"node": ">= 6.13.0"
}
},
+ "node_modules/node-gyp-build": {
+ "version": "4.8.4",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
+ "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
+ "license": "MIT",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
"node_modules/node-releases": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
@@ -9757,9 +10024,9 @@
"license": "MIT"
},
"node_modules/nodemailer": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.0.tgz",
- "integrity": "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==",
+ "version": "6.10.1",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz",
+ "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"
@@ -9796,9 +10063,9 @@
}
},
"node_modules/normalize-package-data/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -10007,9 +10274,9 @@
}
},
"node_modules/open": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
- "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz",
+ "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10178,6 +10445,7 @@
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz",
"integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==",
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"quansync": "^0.2.7"
@@ -10358,23 +10626,30 @@
"url": "https://github.com/sponsors/Borewit"
}
},
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/pg": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.14.0.tgz",
- "integrity": "sha512-nXbVpyoaXVmdqlKEzToFf37qzyeeh7mbiXsnoWvstSqohj88yaa/I/Rq/HEVn2QPSZEuLIJa/jSpRDyzjEx4FQ==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.0.tgz",
+ "integrity": "sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==",
"license": "MIT",
"dependencies": {
- "pg-connection-string": "^2.7.0",
- "pg-pool": "^3.8.0",
- "pg-protocol": "^1.8.0",
- "pg-types": "^2.1.0",
- "pgpass": "1.x"
+ "pg-connection-string": "^2.9.0",
+ "pg-pool": "^3.10.0",
+ "pg-protocol": "^1.10.0",
+ "pg-types": "2.2.0",
+ "pgpass": "1.0.5"
},
"engines": {
"node": ">= 8.0.0"
},
"optionalDependencies": {
- "pg-cloudflare": "^1.1.1"
+ "pg-cloudflare": "^1.2.5"
},
"peerDependencies": {
"pg-native": ">=3.0.1"
@@ -10386,9 +10661,9 @@
}
},
"node_modules/pg-cloudflare": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz",
- "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.5.tgz",
+ "integrity": "sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==",
"license": "MIT",
"optional": true
},
@@ -10408,18 +10683,18 @@
}
},
"node_modules/pg-pool": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.8.0.tgz",
- "integrity": "sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==",
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.0.tgz",
+ "integrity": "sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==",
"license": "MIT",
"peerDependencies": {
"pg": ">=8.0"
}
},
"node_modules/pg-protocol": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.8.0.tgz",
- "integrity": "sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.0.tgz",
+ "integrity": "sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==",
"license": "MIT"
},
"node_modules/pg-types": {
@@ -10439,9 +10714,9 @@
}
},
"node_modules/pg/node_modules/pg-connection-string": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz",
- "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.0.tgz",
+ "integrity": "sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==",
"license": "MIT"
},
"node_modules/pgpass": {
@@ -10463,7 +10738,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
- "devOptional": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -10483,14 +10757,13 @@
}
},
"node_modules/pinia": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
- "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz",
+ "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vue/devtools-api": "^6.6.3",
- "vue-demi": "^0.14.10"
+ "@vue/devtools-api": "^7.7.2"
},
"funding": {
"url": "https://github.com/sponsors/posva"
@@ -10506,9 +10779,9 @@
}
},
"node_modules/pino": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-9.6.0.tgz",
- "integrity": "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==",
+ "version": "9.7.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz",
+ "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==",
"license": "MIT",
"dependencies": {
"atomic-sleep": "^1.0.0",
@@ -10516,7 +10789,7 @@
"on-exit-leak-free": "^2.1.0",
"pino-abstract-transport": "^2.0.0",
"pino-std-serializers": "^7.0.0",
- "process-warning": "^4.0.0",
+ "process-warning": "^5.0.0",
"quick-format-unescaped": "^4.0.3",
"real-require": "^0.2.0",
"safe-stable-stringify": "^2.3.1",
@@ -10568,9 +10841,9 @@
"license": "MIT"
},
"node_modules/pirates": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
- "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10639,9 +10912,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.3",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
- "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "version": "8.5.4",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
+ "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
"funding": [
{
"type": "opencollective",
@@ -10658,7 +10931,7 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.8",
+ "nanoid": "^3.3.11",
"picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
@@ -10773,9 +11046,9 @@
}
},
"node_modules/postcss-loader/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -10977,9 +11250,9 @@
"license": "MIT"
},
"node_modules/process-warning": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz",
- "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
"funding": [
{
"type": "github",
@@ -11075,9 +11348,10 @@
}
},
"node_modules/quansync": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz",
- "integrity": "sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==",
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz",
+ "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==",
+ "devOptional": true,
"funding": [
{
"type": "individual",
@@ -11229,15 +11503,15 @@
}
},
"node_modules/read-pkg/node_modules/parse-json": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz",
- "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
+ "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "index-to-position": "^0.1.2",
- "type-fest": "^4.7.1"
+ "@babel/code-frame": "^7.26.2",
+ "index-to-position": "^1.1.0",
+ "type-fest": "^4.39.1"
},
"engines": {
"node": ">=18"
@@ -11309,20 +11583,19 @@
}
},
"node_modules/redis": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.0.tgz",
- "integrity": "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==",
+ "version": "5.5.5",
+ "resolved": "https://registry.npmjs.org/redis/-/redis-5.5.5.tgz",
+ "integrity": "sha512-x7vpciikEY7nptGzQrE5I+/pvwFZJDadPk/uEoyGSg/pZ2m/CX2n5EhSgUh+S5T7Gz3uKM6YzWcXEu3ioAsdFQ==",
"license": "MIT",
- "workspaces": [
- "./packages/*"
- ],
"dependencies": {
- "@redis/bloom": "1.2.0",
- "@redis/client": "1.6.0",
- "@redis/graph": "1.1.1",
- "@redis/json": "1.0.7",
- "@redis/search": "1.2.0",
- "@redis/time-series": "1.1.0"
+ "@redis/bloom": "5.5.5",
+ "@redis/client": "5.5.5",
+ "@redis/json": "5.5.5",
+ "@redis/search": "5.5.5",
+ "@redis/time-series": "5.5.5"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
"node_modules/redis-errors": {
@@ -11471,6 +11744,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -11494,12 +11774,12 @@
"license": "MIT"
},
"node_modules/rollup": {
- "version": "4.36.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.36.0.tgz",
- "integrity": "sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==",
+ "version": "4.41.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
+ "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.6"
+ "@types/estree": "1.0.7"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -11509,25 +11789,26 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.36.0",
- "@rollup/rollup-android-arm64": "4.36.0",
- "@rollup/rollup-darwin-arm64": "4.36.0",
- "@rollup/rollup-darwin-x64": "4.36.0",
- "@rollup/rollup-freebsd-arm64": "4.36.0",
- "@rollup/rollup-freebsd-x64": "4.36.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.36.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.36.0",
- "@rollup/rollup-linux-arm64-gnu": "4.36.0",
- "@rollup/rollup-linux-arm64-musl": "4.36.0",
- "@rollup/rollup-linux-loongarch64-gnu": "4.36.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.36.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.36.0",
- "@rollup/rollup-linux-s390x-gnu": "4.36.0",
- "@rollup/rollup-linux-x64-gnu": "4.36.0",
- "@rollup/rollup-linux-x64-musl": "4.36.0",
- "@rollup/rollup-win32-arm64-msvc": "4.36.0",
- "@rollup/rollup-win32-ia32-msvc": "4.36.0",
- "@rollup/rollup-win32-x64-msvc": "4.36.0",
+ "@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",
"fsevents": "~2.3.2"
}
},
@@ -11613,9 +11894,9 @@
}
},
"node_modules/schema-utils": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
- "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
+ "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -11854,6 +12135,29 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/serve-index/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/serve-index/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -11929,9 +12233,9 @@
}
},
"node_modules/shell-quote": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
- "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12205,6 +12509,16 @@
"wbuf": "^1.7.3"
}
},
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/split-lines": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/split-lines/-/split-lines-3.0.0.tgz",
@@ -12554,9 +12868,9 @@
}
},
"node_modules/superagent/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -12566,6 +12880,19 @@
"node": ">=10"
}
},
+ "node_modules/superjson": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz",
+ "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "copy-anything": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/supertest": {
"version": "6.3.4",
"resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz",
@@ -12605,20 +12932,19 @@
}
},
"node_modules/synckit": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
- "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
+ "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@pkgr/core": "^0.1.0",
- "tslib": "^2.6.2"
+ "@pkgr/core": "^0.2.4"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://opencollective.com/unts"
+ "url": "https://opencollective.com/synckit"
}
},
"node_modules/tabbable": {
@@ -12730,9 +13056,9 @@
}
},
"node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -12793,15 +13119,15 @@
}
},
"node_modules/terser": {
- "version": "5.39.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
- "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
+ "version": "5.40.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz",
+ "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==",
"devOptional": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
+ "acorn": "^8.14.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -12952,8 +13278,25 @@
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
"integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+ "devOptional": true,
"license": "MIT"
},
+ "node_modules/tinyglobby": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
"node_modules/tmp-cache": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/tmp-cache/-/tmp-cache-1.1.0.tgz",
@@ -13014,9 +13357,9 @@
"license": "MIT"
},
"node_modules/tree-dump": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
- "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz",
+ "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -13065,9 +13408,9 @@
}
},
"node_modules/ts-loader/node_modules/semver": {
- "version": "7.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
- "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
@@ -13201,9 +13544,9 @@
}
},
"node_modules/type-fest": {
- "version": "4.37.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.37.0.tgz",
- "integrity": "sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==",
+ "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"
@@ -13213,27 +13556,19 @@
}
},
"node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
"license": "MIT",
"dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
+ "content-type": "^1.0.5",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
},
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/type-is/node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/typescript": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
@@ -13273,9 +13608,9 @@
}
},
"node_modules/undici-types": {
- "version": "6.20.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
- "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
"node_modules/unicorn-magic": {
@@ -13401,9 +13736,9 @@
}
},
"node_modules/validator": {
- "version": "13.12.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
- "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
+ "version": "13.15.15",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz",
+ "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==",
"license": "MIT",
"engines": {
"node": ">= 0.10"
@@ -13419,14 +13754,17 @@
}
},
"node_modules/vite": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz",
- "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==",
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"license": "MIT",
"dependencies": {
"esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
"postcss": "^8.5.3",
- "rollup": "^4.30.1"
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
@@ -13505,16 +13843,16 @@
}
},
"node_modules/vue": {
- "version": "3.5.13",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz",
- "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "version": "3.5.16",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz",
+ "integrity": "sha512-rjOV2ecxMd5SiAmof2xzh2WxntRcigkX/He4YFJ6WdRvVUrbt6DxC1Iujh10XLl8xCDRDtGKMeO3D+pRQ1PP9w==",
"license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.13",
- "@vue/compiler-sfc": "3.5.13",
- "@vue/runtime-dom": "3.5.13",
- "@vue/server-renderer": "3.5.13",
- "@vue/shared": "3.5.13"
+ "@vue/compiler-dom": "3.5.16",
+ "@vue/compiler-sfc": "3.5.16",
+ "@vue/runtime-dom": "3.5.16",
+ "@vue/server-renderer": "3.5.16",
+ "@vue/shared": "3.5.16"
},
"peerDependencies": {
"typescript": "*"
@@ -13525,33 +13863,6 @@
}
}
},
- "node_modules/vue-demi": {
- "version": "0.14.10",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz",
- "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "vue-demi-fix": "bin/vue-demi-fix.js",
- "vue-demi-switch": "bin/vue-demi-switch.js"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "@vue/composition-api": "^1.0.0-rc.1",
- "vue": "^3.0.0-0 || ^2.6.0"
- },
- "peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- }
- }
- },
"node_modules/vue-facing-decorator": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/vue-facing-decorator/-/vue-facing-decorator-3.0.4.tgz",
@@ -13598,9 +13909,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz",
+ "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -13628,15 +13939,16 @@
"license": "BSD-2-Clause"
},
"node_modules/webpack": {
- "version": "5.98.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
- "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
+ "version": "5.99.9",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz",
+ "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
@@ -13653,7 +13965,7 @@
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^4.3.0",
+ "schema-utils": "^4.3.2",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.11",
"watchpack": "^2.4.1",
@@ -13705,16 +14017,40 @@
}
}
},
+ "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.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz",
- "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz",
+ "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/bonjour": "^3.5.13",
"@types/connect-history-api-fallback": "^1.5.4",
"@types/express": "^4.17.21",
+ "@types/express-serve-static-core": "^4.17.21",
"@types/serve-index": "^1.9.4",
"@types/serve-static": "^1.15.5",
"@types/sockjs": "^0.3.36",
@@ -13727,7 +14063,7 @@
"connect-history-api-fallback": "^2.0.0",
"express": "^4.21.2",
"graceful-fs": "^4.2.6",
- "http-proxy-middleware": "^2.0.7",
+ "http-proxy-middleware": "^2.0.9",
"ipaddr.js": "^2.1.0",
"launch-editor": "^2.6.1",
"open": "^10.0.3",
@@ -13837,9 +14173,9 @@
}
},
"node_modules/webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.2.tgz",
+ "integrity": "sha512-ykKKus8lqlgXX/1WjudpIEjqsafjOTcOJqxnAbMLAu/KCsDCJ6GBtvscewvTkrn24HsnvFwrSCbenFrhtcCsAA==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -13873,6 +14209,31 @@
"node": ">=4.0"
}
},
+ "node_modules/webpack/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/webpack/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -14098,9 +14459,9 @@
"license": "ISC"
},
"node_modules/ws": {
- "version": "8.18.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz",
- "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==",
+ "version": "8.18.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
+ "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -14194,16 +14555,16 @@
"peer": true
},
"node_modules/yaml": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
- "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
"devOptional": true,
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 14.6"
}
},
"node_modules/yargs": {
@@ -14351,9 +14712,9 @@
}
},
"node_modules/yocto-queue": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.0.tgz",
- "integrity": "sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+ "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
"license": "MIT",
"engines": {
"node": ">=12.20"
diff --git a/package.json b/package.json
index cf45027..989a29e 100644
--- a/package.json
+++ b/package.json
@@ -58,7 +58,7 @@
"eslint-plugin-prettier": "^5.0.0-alpha.2",
"hot-hook": "^0.4.0",
"numeral": "^2.0.6",
- "pinia": "^2.0.30",
+ "pinia": "^3.0.2",
"pino-pretty": "^13.0.0",
"postcss-loader": "^8.1.1",
"prettier": "^3.4.2",
@@ -76,6 +76,7 @@
},
"dependencies": {
"@adonisjs/auth": "^9.2.4",
+ "@adonisjs/bodyparser": "^10.0.1",
"@adonisjs/core": "^6.17.0",
"@adonisjs/cors": "^2.2.1",
"@adonisjs/drive": "^3.2.0",
@@ -96,6 +97,7 @@
"@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",
@@ -115,7 +117,7 @@
"notiwind": "^2.0.0",
"pg": "^8.9.0",
"qrcode": "^1.5.3",
- "redis": "^4.6.10",
+ "redis": "^5.0.0",
"reflect-metadata": "^0.2.1",
"saxon-js": "^2.5.0",
"toastify-js": "^1.12.0",
diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png
new file mode 100644
index 0000000..4d9cf1b
Binary files /dev/null and b/public/android-chrome-192x192.png differ
diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png
new file mode 100644
index 0000000..7929356
Binary files /dev/null and b/public/android-chrome-512x512.png differ
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..50558dc
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png
new file mode 100644
index 0000000..c614e7d
Binary files /dev/null and b/public/favicon-16x16.png differ
diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png
new file mode 100644
index 0000000..6886e7b
Binary files /dev/null and b/public/favicon-32x32.png differ
diff --git a/public/favicon-32x32.png:Zone.Identifier b/public/favicon-32x32.png:Zone.Identifier
new file mode 100644
index 0000000..8bcdfdc
--- /dev/null
+++ b/public/favicon-32x32.png:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+HostUrl=https://sea1.geoinformation.dev/favicon-32x32.png
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index ce3fc0a..0000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/favicon.png b/public/favicon.png
deleted file mode 100644
index d3d3eb5..0000000
Binary files a/public/favicon.png and /dev/null differ
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..eb81bca
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/public/site.webmanifest b/public/site.webmanifest
new file mode 100644
index 0000000..45dc8a2
--- /dev/null
+++ b/public/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/resources/css/app.css b/resources/css/app.css
index 7ae8714..0301a3a 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -1,7 +1,7 @@
/* @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&display=swap'); */
/* @import url('https://fonts.googleapis.com/css?family=Roboto:400,400i,600,700'); */
-@import '_checkbox-radio-switch.css';
+/* @import '_checkbox-radio-switch.css'; */
@import '_progress.css';
@import '_scrollbars.css';
@import '_table.css';
diff --git a/resources/js/Components/CardBoxClient.vue b/resources/js/Components/CardBoxClient.vue
index b89ed7a..cd9bf57 100644
--- a/resources/js/Components/CardBoxClient.vue
+++ b/resources/js/Components/CardBoxClient.vue
@@ -39,6 +39,10 @@ const props = defineProps({
type: String,
default: null,
},
+ allowEmailContact: {
+ type: Boolean,
+ default: false,
+ }
});
const pillType = computed(() => {
@@ -81,9 +85,8 @@ const pillType = computed(() => {
{{ name }}
-
-
- {{ email }}
+
+
{{ email }}
diff --git a/resources/js/Components/CardBoxModal.vue b/resources/js/Components/CardBoxModal.vue
index 6e7f9aa..b0fdf01 100644
--- a/resources/js/Components/CardBoxModal.vue
+++ b/resources/js/Components/CardBoxModal.vue
@@ -61,10 +61,10 @@ const cancel = () => confirmCancel('cancel');
diff --git a/resources/js/Components/CardBoxSimple.vue b/resources/js/Components/CardBoxSimple.vue
new file mode 100644
index 0000000..ef6a624
--- /dev/null
+++ b/resources/js/Components/CardBoxSimple.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/CardBoxWidget.vue b/resources/js/Components/CardBoxWidget.vue
index 58b3e3c..fe10723 100644
--- a/resources/js/Components/CardBoxWidget.vue
+++ b/resources/js/Components/CardBoxWidget.vue
@@ -1,4 +1,4 @@
-
-
-
-
- {{ label }}
+
+
+
+ {{ label }}
+
+
+
+
+
+ {{ label }}
diff --git a/resources/js/Components/FormCheckRadioGroup.vue b/resources/js/Components/FormCheckRadioGroup.vue
index 34f9f87..1315fec 100644
--- a/resources/js/Components/FormCheckRadioGroup.vue
+++ b/resources/js/Components/FormCheckRadioGroup.vue
@@ -1,9 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/js/Components/JustboilLogo.vue b/resources/js/Components/JustboilLogo.vue
index 21e4193..d295d63 100644
--- a/resources/js/Components/JustboilLogo.vue
+++ b/resources/js/Components/JustboilLogo.vue
@@ -1,145 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Components/Map/MapComponentView.vue b/resources/js/Components/Map/MapComponentView.vue
new file mode 100644
index 0000000..0dfd0aa
--- /dev/null
+++ b/resources/js/Components/Map/MapComponentView.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/js/Components/NavBar.vue b/resources/js/Components/NavBar.vue
index dce1325..1df8ccb 100644
--- a/resources/js/Components/NavBar.vue
+++ b/resources/js/Components/NavBar.vue
@@ -21,12 +21,11 @@ import {
mdiFormatListGroup,
mdiFormatListNumbered,
mdiLogout,
- mdiGithub,
mdiThemeLightDark,
mdiViewDashboard,
- mdiMapSearch,
mdiInformationVariant,
mdiGlasses,
+ mdiXml
} from '@mdi/js';
import NavBarItem from '@/Components/NavBarItem.vue';
import NavBarItemLabel from '@/Components/NavBarItemLabel.vue';
@@ -100,7 +99,8 @@ const showAbout = async () => {
-
+
@@ -110,9 +110,9 @@ const showAbout = async () => {
-
+
@@ -169,13 +169,10 @@ const showAbout = async () => {
-
-
-
+
+
@@ -186,12 +183,15 @@ const showAbout = async () => {
-
+
+
+
-
+
diff --git a/resources/js/Components/SearchAutocomplete.vue b/resources/js/Components/SearchAutocomplete.vue
index 553c7b5..a3b3b09 100644
--- a/resources/js/Components/SearchAutocomplete.vue
+++ b/resources/js/Components/SearchAutocomplete.vue
@@ -28,7 +28,7 @@
autocomplete="off"
@keydown.down="onArrowDown"
@keydown.up="onArrowUp"
- @keydown.enter="onEnter"
+ @keydown.enter.prevent="onEnter"
/>
+ type="button" :disabled="isReadOnly" @click.prevent="showStates">
{{ language }}
-
+ placeholder="Search Keywords..." required @input="handleInput" :readonly="isReadOnly" />
@@ -101,12 +101,12 @@
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
- {
computedValue = '';
data.isOpen = false;
}
- ">
+ ">
@@ -166,6 +166,10 @@ let props = defineProps({
type: String,
default: '',
},
+ isReadOnly: {
+ type: Boolean,
+ default: false,
+ },
required: Boolean,
borderless: Boolean,
transparent: Boolean,
@@ -190,11 +194,18 @@ const inputElClass = computed(() => {
'dark:placeholder-gray-400 dark:text-white dark:focus:border-blue-500',
'h-12',
props.borderless ? 'border-0' : 'border',
- props.transparent ? 'bg-transparent' : 'bg-white dark:bg-slate-800',
+ props.transparent && 'bg-transparent',
// props.isReadOnly ? 'bg-gray-50 dark:bg-slate-600' : 'bg-white dark:bg-slate-800',
];
// if (props.icon) {
base.push('pl-10');
+ if (props.isReadOnly) {
+ // Read-only: no focus ring, grayed-out text and border, and disabled cursor.
+ base.push('bg-gray-50', 'dark:bg-slate-600', 'border', 'border-gray-300', 'dark:border-slate-600', 'text-gray-500', 'cursor-not-allowed', 'focus:outline-none', 'focus:ring-0', 'focus:border-gray-300');
+ } else {
+ // Actionable field: focus ring, white/dark background, and darker border.
+ base.push('bg-white dark:bg-slate-800', 'focus:ring focus:outline-none', 'border', 'border-gray-700');
+ }
// }
return base;
});
diff --git a/resources/js/Components/SectionTitleLineWithButton.vue b/resources/js/Components/SectionTitleLineWithButton.vue
index ca6fa30..e243946 100644
--- a/resources/js/Components/SectionTitleLineWithButton.vue
+++ b/resources/js/Components/SectionTitleLineWithButton.vue
@@ -15,6 +15,10 @@ defineProps({
required: true,
},
main: Boolean,
+ showCogButton: {
+ type: Boolean,
+ default: false,
+ }
});
const hasSlot = computed(() => useSlots().default);
@@ -30,6 +34,6 @@ const hasSlot = computed(() => useSlots().default);
-
+
diff --git a/resources/js/Components/SimplePasswordMeter/password-meter.vue b/resources/js/Components/SimplePasswordMeter/password-meter.vue
index 310cd54..e2dffd1 100644
--- a/resources/js/Components/SimplePasswordMeter/password-meter.vue
+++ b/resources/js/Components/SimplePasswordMeter/password-meter.vue
@@ -6,10 +6,29 @@ import FormField from '@/Components/FormField.vue';
import FormControl from '@/Components/FormControl.vue';
// Define props
-const props = defineProps<{
- modelValue: string;
- errors: Partial>;
-}>();
+// const props = defineProps<{
+// modelValue: string,
+// errors: Partial>,
+// showRequiredMessage: boolean,
+// }>();
+
+const props = defineProps({
+ modelValue: {
+ type: String,
+ },
+ errors: {
+ type: Object,
+ default: () => ({} as Partial>),
+ },
+ showRequiredMessage: {
+ type: Boolean,
+ default:true,
+ },
+ fieldLabel: {
+ type: String,
+ default: 'New password',
+ }
+});
const emit = defineEmits(['update:modelValue', 'score']);
@@ -61,8 +80,8 @@ const passwordMetrics = computed(() => {
-
-
+
@@ -84,10 +103,10 @@ const passwordMetrics = computed(() => {
{{ passwordMetrics.score }} / 6 points max
-
+
-
diff --git a/resources/js/Components/TableKeywords.vue b/resources/js/Components/TableKeywords.vue
index 835dd51..fbe979c 100644
--- a/resources/js/Components/TableKeywords.vue
+++ b/resources/js/Components/TableKeywords.vue
@@ -12,6 +12,7 @@ import { Subject } from '@/Dataset';
// import FormField from '@/Components/FormField.vue';
import FormControl from '@/Components/FormControl.vue';
import SearchCategoryAutocomplete from '@/Components/SearchCategoryAutocomplete.vue';
+import { mdiRefresh } from '@mdi/js';
const props = defineProps({
checkable: Boolean,
@@ -27,6 +28,22 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
+ subjectsToDelete: {
+ type: Array
,
+ default: [],
+ }
+});
+
+const emit = defineEmits(['update:subjectsToDelete']);
+
+// Create a computed property for subjectsToDelete with getter and setter
+const deletetSubjects = computed({
+ get: () => props.subjectsToDelete,
+ set: (values: Array) => {
+ props.subjectsToDelete.length = 0;
+ props.subjectsToDelete.push(...values);
+ emit('update:subjectsToDelete', values);
+ }
});
const styleService = StyleService();
@@ -58,21 +75,45 @@ const pagesList = computed(() => {
});
const removeItem = (key: number) => {
+ // items.value.splice(key, 1);
+ const item = items.value[key];
+
+ // If the item has an ID, add it to the delete list
+ if (item.id) {
+ addToDeleteList(item);
+ }
+
+ // Remove from the visible list
items.value.splice(key, 1);
};
+// Helper function to add a subject to the delete list
+const addToDeleteList = (subject: Subject) => {
+ if (subject.id) {
+ const newList = [...props.subjectsToDelete, subject];
+ deletetSubjects.value = newList;
+ }
+};
+
+
+// Helper function to reactivate a subject (remove from delete list)
+const reactivateSubject = (index: number) => {
+ const newList = [...props.subjectsToDelete];
+ const removedSubject = newList.splice(index, 1)[0];
+ deletetSubjects.value = newList;
+
+ // Add the subject back to the keywords list if it's not already there
+ if (removedSubject && !props.keywords.some(k => k.id === removedSubject.id)) {
+ props.keywords.push(removedSubject);
+ }
+};
+
+const isKeywordReadOnly = (item: Subject) => {
+ return (item.dataset_count ?? 0) > 1 || item.type !== 'uncontrolled';
+};
-
Type
- Value
+
+ Value
+
+
+ i
+
+
+
+ Keywords are only editable if they are used by a single dataset (Usage Count = 1)".
+
+
+
+
+
Language
-
+ Usage Count
-
+
- {item.external_key = undefined; item.value= '';}" :type="'select'" placeholder="[Enter Language]" :options="props.subjectTypes">
+ { item.value = ''; }" :type="'select'"
+ placeholder="[Enter Language]" :options="props.subjectTypes">
{{ errors[`subjects.${index}.type`].join(', ') }}
@@ -105,22 +163,19 @@ const removeItem = (key: number) => {
- {
- item.language = result.language;
- item.external_key = result.uri;
- }
- "
- >
+ {
+ item.language = result.language;
+ item.external_key = result.uri;
+ }
+ " :is-read-only="item.dataset_count > 1">
{{ errors[`subjects.${index}.value`].join(', ') }}
-
+
{{ errors[`subjects.${index}.value`].join(', ') }}
@@ -128,23 +183,24 @@ const removeItem = (key: number) => {
-
+
{{ errors[`subjects.${index}.language`].join(', ') }}
+
+
+
+ {{ item.dataset_count || 1 }}
+
+
+
-
+
@@ -155,15 +211,8 @@ const removeItem = (key: number) => {
-
+
Page {{ currentPageHuman }} of {{ numPages }}
@@ -172,6 +221,47 @@ const removeItem = (key: number) => {
{{ errors.subjects.join(', ') }}
+
+
+
+
Keywords To Delete
+
+
+
+
+ {{
+ element.value }}
+
+
+
+ Type: {{ element.type }}
+
+
+ Used by:
+
+ {{ element.dataset_count }}
+ datasets
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Pages/Editor/Dataset/Edit.vue b/resources/js/Pages/Editor/Dataset/Edit.vue
new file mode 100644
index 0000000..e33e5dd
--- /dev/null
+++ b/resources/js/Pages/Editor/Dataset/Edit.vue
@@ -0,0 +1,865 @@
+
+
+
+
+
+
+
+
+
+
+ {{ flash.message }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors.language.join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors.type.join(', ') }}
+
+
+
+
+
+
+
+ {{ form.errors.creating_corporation.join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors['titles.0.value'].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors['titles.0.language'].join(', ') }}
+
+
+
+
+
+ additional titles
+
+
+
+
+
+ Title Value
+ Title Type
+ Title Language
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors[`titles.${index}.value`].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors[`titles.${index}.type`].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors[`titles.${index}.language`].join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors['descriptions.0.value'].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors['descriptions.0.language'].join(', ') }}
+
+
+
+
+
+
+
+
+ Title Value
+ Title Type
+ Title Language
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors[`descriptions.${index}.value`].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors[`descriptions.${index}.type`].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors[`descriptions.${index}.language`].join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors.authors.join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors.contributors.join(', ') }}
+
+
+
+
+
+
+
+
+ {{ form.errors.project_id.join(', ') }}
+
+
+
+
+
+
+
+ {{ form.errors.embargo_date.join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors['coverage.x_min'].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors['coverage.x_max'].join(', ') }}
+
+
+
+
+
+
+
+ {{ form.errors['coverage.y_min'].join(', ') }}
+
+
+
+
+
+
+ {{ form.errors['coverage.y_max'].join(', ') }}
+
+
+
+
+
+
+
+
+
No references added yet.
+
Click the plus icon above to add a new reference.
+
+
+
+
+
+ Value
+ Type
+ Relation
+ Label
+
+
+
+
+
+
+
+
+
+ {{ form.errors[`references.${index}.value`].join(', ') }}
+
+
+
+
+
+
+
+ {{ form.errors[`references.${index}.type`].join(', ') }}
+
+
+
+
+
+
+
+
+ {{ form.errors[`references.${index}.relation`].join(', ') }}
+
+
+
+
+
+
+
+ {{ form.errors[`references.${index}.label`].join(', ') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
References To Delete
+
+
+
+
+
+ {{ element.value }}
+
+
+
+ Type: {{ element.type }}
+
+
+ Relation: {{ element.relation }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Files
+
+
+ i
+
+
+
+ As a research data repository editor, you can only download the submitted files.
+ Files cannot be
+ edited or replaced at this stage.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ file.label }}
+
+
+ {{ getFileSize(file) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/js/Pages/Editor/Dataset/Index.vue b/resources/js/Pages/Editor/Dataset/Index.vue
index ef6156b..e154d48 100644
--- a/resources/js/Pages/Editor/Dataset/Index.vue
+++ b/resources/js/Pages/Editor/Dataset/Index.vue
@@ -2,7 +2,7 @@
// import { Head, Link, useForm, usePage } from '@inertiajs/inertia-vue3';
import { Head, usePage } from '@inertiajs/vue3';
import { ComputedRef } from 'vue';
-import { mdiSquareEditOutline, mdiAlertBoxOutline, mdiShareVariant, mdiBookEdit, mdiUndo } from '@mdi/js';
+import { mdiSquareEditOutline, mdiAlertBoxOutline, mdiShareVariant, mdiBookEdit, mdiUndo, mdiLibraryShelves } from '@mdi/js';
import { computed } from 'vue';
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
import SectionMain from '@/Components/SectionMain.vue';
@@ -96,8 +96,8 @@ const formatServerState = (state: string) => {
-
-
+
+
{{ flash.message }}
@@ -108,31 +108,30 @@ const formatServerState = (state: string) => {
{{ flash.error }}
+
-
+
Title
-
+
Submitter
-
-
+
State
-
-
+
Editor
-
+
Date of last modification
-
+
Actions
@@ -141,70 +140,110 @@ const formatServerState = (state: string) => {
-
-
- {{ dataset.main_title }}
+
+ {{ dataset.main_title }}
-
+
{{ dataset.user.login }}
-
+
{{ formatServerState(dataset.server_state) }}
+
+
+ i
+
+
+
+ {{ dataset.reject_reviewer_note }}
+
+
+
+
+
-
Preferred reviewer: {{ dataset.preferred_reviewer }}
-
In approval by: {{ dataset.editor?.login }}
-
+
{{ dataset.editor?.login }}
-
+
{{ dataset.server_date_modified }}
-
+
+
+ color="info" :icon="mdiSquareEditOutline" :label="'Receive edit task'" small
+ class="col-span-1" />
+ color="info" :icon="mdiShareVariant" :label="'Approve'" small
+ class="col-span-1" />
+ :route-name="stardust.route('editor.dataset.reject', [dataset.id])"
+ color="info" :icon="mdiUndo" label="Reject" small class="col-span-1">
+
+
+
+
+
+
+
+ color="info" :icon="mdiBookEdit" :label="'Publish'" small
+ class="col-span-1" />
+ color="info" :icon="mdiBookEdit" :label="'Mint DOI'" small
+ class="col-span-1 last-in-row" />
-
+
@@ -231,3 +270,17 @@ const formatServerState = (state: string) => {
+
+
+
\ No newline at end of file
diff --git a/resources/js/Pages/Editor/Dataset/Publish.vue b/resources/js/Pages/Editor/Dataset/Publish.vue
index d6929d2..5df3958 100644
--- a/resources/js/Pages/Editor/Dataset/Publish.vue
+++ b/resources/js/Pages/Editor/Dataset/Publish.vue
@@ -10,7 +10,7 @@ import FormControl from '@/Components/FormControl.vue';
import BaseButton from '@/Components/BaseButton.vue';
import BaseButtons from '@/Components/BaseButtons.vue';
import { stardust } from '@eidellev/adonis-stardust/client';
-import { mdiArrowLeftBoldOutline, mdiReiterate } from '@mdi/js';
+import { mdiArrowLeftBoldOutline, mdiReiterate, mdiBookEdit, mdiUndo } from '@mdi/js';
import FormValidationErrors from '@/Components/FormValidationErrors.vue';
const props = defineProps({
@@ -18,6 +18,10 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
+ can: {
+ type: Object,
+ default: () => ({}),
+ },
});
const flash: Ref = computed(() => {
@@ -93,7 +97,11 @@ const handleSubmit = async (e) => {
+ :class="{ 'opacity-25': form.processing }" :disabled="form.processing" :icon="mdiBookEdit" small />
+
diff --git a/resources/js/Pages/Editor/Dataset/RejectToReviewer.vue b/resources/js/Pages/Editor/Dataset/RejectToReviewer.vue
new file mode 100644
index 0000000..7889c2c
--- /dev/null
+++ b/resources/js/Pages/Editor/Dataset/RejectToReviewer.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ form.errors.server_state }}
+
+
+
+
+
+
+ {{ form.errors.reject_editor_note }}
+
+
+
+
+
+
+
+
+
+
+ send email to reviewer
+
+ {{ computedEmailLabel }}
+
+
+
+
+
+
+
+
Be Warned
+
{{ flash.warning }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Pages/Errors/ServerError.vue b/resources/js/Pages/Errors/ServerError.vue
index 5d97ede..74bcdc0 100644
--- a/resources/js/Pages/Errors/ServerError.vue
+++ b/resources/js/Pages/Errors/ServerError.vue
@@ -20,11 +20,13 @@ import SectionTitleLineWithButton from '@/Components/SectionTitleLineWithButton.
import BaseButton from '@/Components/BaseButton.vue';
import { mdiLightbulbAlert, mdiArrowLeftBoldOutline } from '@mdi/js';
import { stardust } from '@eidellev/adonis-stardust/client';
-
-@Component({
- // options: {
- // layout: DefaultLayout,
- // },
+import LayoutGuest from '@/Layouts/LayoutGuest.vue';
+
+
+ @Component({
+ options: {
+ layout: LayoutGuest,
+ },
name: 'AppComponent',
components: {
diff --git a/resources/js/Pages/Errors/postgres_error.vue b/resources/js/Pages/Errors/postgres_error.vue
new file mode 100644
index 0000000..ed5dd59
--- /dev/null
+++ b/resources/js/Pages/Errors/postgres_error.vue
@@ -0,0 +1,71 @@
+
+
+
+
{{ status }}
+
{{ message }}
+
+
Error Code: {{ details.code }}
+
Type: {{ details.type }}
+
+
Connection attempt {{ index + 1 }}: {{ port.address }}:{{ port.port }}
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/Pages/Reviewer/Dataset/Index.vue b/resources/js/Pages/Reviewer/Dataset/Index.vue
index 84d56e7..36d2351 100644
--- a/resources/js/Pages/Reviewer/Dataset/Index.vue
+++ b/resources/js/Pages/Reviewer/Dataset/Index.vue
@@ -51,6 +51,8 @@ const getRowClass = (dataset) => {
rowclass = 'bg-released';
} else if (dataset.server_state == 'published') {
rowclass = 'bg-published';
+ } else if (dataset.server_state == 'rejected_to_reviewer') {
+ rowclass = 'bg-rejected-reviewer';
} else {
rowclass = '';
}
@@ -96,14 +98,14 @@ const formatServerState = (state: string) => {
-
+
Title
-
+
ID
-
+
State
@@ -111,10 +113,10 @@ const formatServerState = (state: string) => {
Editor
-
+
Remaining Time
-
+
Actions
@@ -122,39 +124,52 @@ const formatServerState = (state: string) => {
-
-
- {{ dataset.main_title }}
+
+ {{ dataset.main_title }}
-
+
{{ dataset.id }}
-
+
{{ formatServerState(dataset.server_state) }}
+
+
+ i
+
+
+
+ {{ dataset.reject_editor_note }}
+
+
+
+
+
-
+
{{ dataset.editor?.login }}
-
+
{{ dataset.remaining_time + ' days' }}
+ class="py-4 whitespace-nowrap text-right text-sm font-medium text-gray-700">
-
+ color="info" :icon="mdiGlasses" :label="'View'" small />
@@ -185,3 +200,16 @@ const formatServerState = (state: string) => {
+
\ No newline at end of file
diff --git a/resources/js/Pages/Reviewer/Dataset/Review.vue b/resources/js/Pages/Reviewer/Dataset/Review.vue
index 4213bc2..b33500b 100644
--- a/resources/js/Pages/Reviewer/Dataset/Review.vue
+++ b/resources/js/Pages/Reviewer/Dataset/Review.vue
@@ -10,15 +10,23 @@ import BaseButtons from '@/Components/BaseButtons.vue';
import { stardust } from '@eidellev/adonis-stardust/client';
import { mdiArrowLeftBoldOutline, mdiGlasses } from '@mdi/js';
import FormValidationErrors from '@/Components/FormValidationErrors.vue';
+import { mdiReiterate, mdiBookOpenPageVariant, mdiFinance } from '@mdi/js';
+import MapComponentView from '@/Components/Map/MapComponentView.vue';
+import IconSvg from '@/Components/Icons/IconSvg.vue';
+import CardBoxSimple from '@/Components/CardBoxSimple.vue';
const props = defineProps({
dataset: {
type: Object,
default: () => ({}),
},
- fields: {
+ // fields: {
+ // type: Object,
+ // required: true,
+ // },
+ can: {
type: Object,
- required: true,
+ default: () => ({}),
},
});
@@ -29,18 +37,6 @@ const errors: Ref = computed(() => {
return usePage().props.errors;
});
-// const form = useForm({
-// preferred_reviewer: '',
-// preferred_reviewer_email: '',
-// preferation: 'yes_preferation',
-
-// // preferation: '',
-// // isPreferationRequired: false,
-// });
-
-
-// const isPreferationRequired = computed(() => form.preferation === 'yes_preferation');
-
const handleSubmit = async (e) => {
e.preventDefault();
@@ -48,6 +44,19 @@ const handleSubmit = async (e) => {
// await form.put(stardust.route('dataset.releaseUpdate', [props.dataset.id]));
// // await form.put(stardust.route('editor.dataset.update', [props.dataset.id]));
};
+
+
+const getFileSize = (file: File) => {
+ if (file.size > 1024) {
+ if (file.size > 1048576) {
+ return Math.round(file.size / 1048576) + 'mb';
+ } else {
+ return Math.round(file.size / 1024) + 'kb';
+ }
+ } else {
+ return file.size + 'b';
+ }
+}
@@ -56,10 +65,10 @@ const handleSubmit = async (e) => {
-
+
-
+
@@ -70,26 +79,545 @@ const handleSubmit = async (e) => {
-
-
+
-
{{ field }}
-
+
+
+
Language
+
+
+
+
+ {{ dataset.language || 'Not specified' }}
+
+
+
-
+
+
+
+
Licenses
+
+
+
+
+
+ {{ license.name }}
+
+
+
+
+
+
No licenses specified
+
+
+ Total licenses: {{ dataset.licenses.length }}
+
+
+
+
+
+
+
Dataset Type
+
+
+
+
+ {{ dataset.type || 'Not specified' }}
+
+
+
+
+
+
+
+
Creating
+ Corporation
+
+
+
+
+
+ {{ dataset.creating_corporation || 'Not specified' }}
+
+
+
+
+
+
+
+
+
+
Project
+
+
+ {{ dataset.project?.label || 'Not specified' }}
+
+
+
+
+
+
Embargo Date
+
+
+ {{ dataset.embargo_date }}
+
+
+ No embargo date set
+
+
+
+
+
+
+
+
+
+
+
+
Main Title
+
+
+
+ {{ dataset.titles[0].language }}
+
+
+ Main
+
+
+
+ {{ dataset.titles[0].value }}
+
+
+
+
+
+
Additional Titles
+
+
+
+
+
+
+ {{ title.language }}
+
+
+ {{ title.type }}
+
+
+
+ {{ title.value }}
+
+
+
+
+
+
+ Total titles: {{ dataset.titles.length }}
+
+
+
+
+
+
+
+
+
Main Abstract
+
+
+
+ {{ dataset.descriptions[0].language }}
+
+
+ Abstract
+
+
+
+
+ {{ dataset.descriptions[0].value }}
+
+
+
+
+
+
Additional
+ Descriptions
+
+
+
+
+
+ {{ item.language }}
+
+
+ {{ item.type }}
+
+
+
+ {{ item.value }}
+
+
+
+
+
+
+ Total descriptions: {{ dataset.descriptions.length }}
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+ {{ author.academic_title }} {{ author.first_name }} {{ author.last_name
+ }}
+
+
+
+
+ {{ author.email
+ }}
+
+
+
+
+ ORCID: {{
+ author.identifier_orcid
+ }}
+
+
+
+
+
+ {{ author.academic_title }}
+
+
+
+
+
+
+ Total authors: {{ dataset.authors.length }}
+
+
+
-
-
-
+
+
+
No contributors defined
+
+
+
+
+
+
+
+
+
+ {{ contributor.academic_title }} {{ contributor.first_name }} {{
+ contributor.last_name
+ }}
+
+
+ {{ contributor.pivot_contributor_type }}
+
+
+
+
+
+ {{
+ contributor.email }}
+
+
+
+
+ ORCID: {{
+ contributor.identifier_orcid }}
+
+
+
+
+
+ {{ contributor.academic_title }}
+
+
+
+
+
+
+ Total contributors: {{ dataset.contributors.length }}
+
+
+
+
+
+
+
+ Geographic Coverage
+
+
+
+
+
+
+
+
+
+ Geographic extent of the dataset
+
+
+
+
+
+
+
X Min
+ (Longitude)
+
+
+ {{ dataset.coverage.x_min }}
+
+
+
+
+
+
+
X Max
+ (Longitude)
+
+
+ {{ dataset.coverage.x_max }}
+
+
+
+
+
+
+
Y Min
+ (Latitude)
+
+
+ {{ dataset.coverage.y_min }}
+
+
+
+
+
+
+
Y Max
+ (Latitude)
+
+
+ {{ dataset.coverage.y_max }}
+
+
+
+
+
+
+
+
+
+
+
Dataset References:
+
+
+
+
+
+
{{ item.value
+ }}
+
{{ item.label
+ }}
+
+
+
+ {{ item.type }}
+
+
+ {{ item.relation }}
+
+
+
+
+
+
+ Total references: {{ dataset.references.length }}
+
+
+
+
+
+
+
+
+
+
+
Keywords/Subjects:
+
+
+
+ {{ subject.value }}
+ ({{ subject.type
+ }})
+
+
+
+ Total keywords: {{ dataset.subjects.length }}
+
+
+
+
+
+
+
+ Dataset Files
+
+
+
+
+
+
+
+ {{ file.label }}
+
+
+ {{ getFileSize(file) }}
+
+
+
+
+
+
+
+
+
+
+
+
No files attached to this dataset
+
+
+
+ Total files: {{ dataset.files.length }}
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/js/Pages/Submitter/Dataset/Category.vue b/resources/js/Pages/Submitter/Dataset/Category.vue
index 9b3e6b1..d9957fb 100644
--- a/resources/js/Pages/Submitter/Dataset/Category.vue
+++ b/resources/js/Pages/Submitter/Dataset/Category.vue
@@ -1,6 +1,7 @@
-
+
+
@@ -33,29 +34,30 @@
- {{ `${col.name} (${col.number})` }}
+ {{ col.name }}
+ {{ col.number }}
No collections available.
-
- Broader Collection
+ Broader Collection
- {{ `${parent.name} (${parent.number})` }}
+ {{ parent.name }}
+ {{ parent.number }}
@@ -69,23 +71,35 @@
Selected Collection
-
- {{ `${selectedCollection.name} (${selectedCollection.number})` }}
-
+ ]"> -->
+
+
+
+ {{ element.name }}
+ {{ element.number }}
+
+
+
-
+
- Narrower Collections
+ Narrower Collections
- {{ `${child.name} (${child.number})` }}
+ {{ child.name }}
+ {{ child.number }}
@@ -99,19 +113,21 @@
-
+
Please drag your collections here to classify your previously created
dataset
according to library classification standards.
- {{ element.name }} ({{ element.number }})
+ {{ element.name }}
+ {{ element.number }}
item.id !== element.id)"
class="hover:text-sky-600 flex items-center">
@@ -124,7 +140,7 @@
-
+
@@ -189,6 +205,16 @@ const broaderCollections = ref
([]);
// Reactive list that holds collections dropped by the user
const selectedCollectionList: Ref = ref([]);
+
+// Wrap selectedCollection in an array for draggable (always expects an array)
+const selectedCollectionArray = computed({
+ get: () => (selectedCollection.value ? [selectedCollection.value] : []),
+ set: (value: Collection[]) => {
+ selectedCollection.value = value.length ? value[0] : null
+ }
+})
+
+
const form = useForm({
collections: [] as number[],
});
@@ -277,6 +303,12 @@ const fetchCollections = async (collectionId: number) => {
const alreadyDropped = selectedCollectionList.value.find(dc => dc.id === collection.id);
return alreadyDropped ? { ...collection, inUse: true } : { ...collection, inUse: false };
});
+ // Check if selected collection is in the selected list
+ if (selectedCollection.value && selectedCollectionList.value.find(dc => dc.id === selectedCollection.value?.id)) {
+ selectedCollection.value = { ...selectedCollection.value, inUse: true };
+ } else if (selectedCollection.value) {
+ selectedCollection.value = { ...selectedCollection.value, inUse: false };
+ }
} catch (error) {
console.error('Error in fetchCollections:', error);
}
diff --git a/resources/js/Pages/Submitter/Dataset/Create.vue b/resources/js/Pages/Submitter/Dataset/Create.vue
index 934c320..40c25ab 100644
--- a/resources/js/Pages/Submitter/Dataset/Create.vue
+++ b/resources/js/Pages/Submitter/Dataset/Create.vue
@@ -24,7 +24,6 @@ import FormControl from '@/Components/FormControl.vue';
import FormCheckRadioGroup from '@/Components/FormCheckRadioGroup.vue';
import BaseButton from '@/Components/BaseButton.vue';
import { stardust } from '@eidellev/adonis-stardust/client';
-// import { Inertia } from '@inertiajs/inertia';
import CardBoxModal from '@/Components/CardBoxModal.vue';
import BaseIcon from '@/Components/BaseIcon.vue';
@@ -98,23 +97,23 @@ const flash: ComputedRef = computed(() => {
// Computed property to determine the placeholder based on the selected option
const getPlaceholder = computed(() => (type: string) => {
-
+
switch (type) {
- case 'DOI':
- return 'https://doi.org/10.24341/tethys.236';
- case 'Handle':
- return '20.500.12345/67890';
- case 'ISBN':
- return '978-3-85316-076-3';
- case 'ISSN':
- return '1234-5678';
- case 'URL':
- return 'https://example.com';
- case 'URN':
- return 'urn:nbn:de:1234-5678';
- default:
- return '[VALUE]';
- }
+ case 'DOI':
+ return 'https://doi.org/10.24341/tethys.236';
+ case 'Handle':
+ return '20.500.12345/67890';
+ case 'ISBN':
+ return '978-3-85316-076-3';
+ case 'ISSN':
+ return '1234-5678';
+ case 'URL':
+ return 'https://example.com';
+ case 'URN':
+ return 'urn:nbn:de:1234-5678';
+ default:
+ return '[VALUE]';
+ }
});
const mainService = MainService();
@@ -221,15 +220,6 @@ if (Object.keys(mainService.dataset).length == 0) {
// descriptions: [{ value: '', type: 'Abstract', language: language }],
// });
let form = useForm(dataset as Dataset);
-// form.defaults();
-
-// const emit = defineEmits(['update:modelValue', 'setRef']);
-// computed({
-// get: () => form.rights,
-// set: (value) => {
-// emit('update:modelValue', value);
-// },
-// });
watch(language, (currentValue) => {
if (currentValue != "") {
@@ -320,12 +310,17 @@ const nextStep = async () => {
} else if (formStep.value == 3) {
route = stardust.route('dataset.third.step');
}
- // formStep.value++;
+ // When posting in steps 1-3, remove any file uploads from the data.
await form
- .transform((data) => ({
- ...data,
- rights: form.rights && form.rights == true ? 'true' : 'false',
- }))
+ .transform((data: Dataset) => {
+ // Create payload and set rights (transforming to a string if needed)
+ const payload: any = { ...data, rights: data.rights ? 'true' : 'false' };
+ // Remove the files property so that the partial update is done without files
+ if (payload.files) {
+ delete payload.files;
+ }
+ return payload;
+ })
.post(route, {
onSuccess: () => {
// console.log(form.data());
@@ -334,7 +329,6 @@ const nextStep = async () => {
},
});
};
-
const prevStep = () => {
formStep.value--;
};
@@ -343,7 +337,7 @@ const submit = async () => {
let route = stardust.route('dataset.submit');
const files = form.files.map((obj) => {
- return new File([obj.blob], obj.label, { type: obj.type, lastModified: obj.lastModified });
+ return new File([obj.blob], obj.label, { type: obj.type, lastModified: obj.lastModified, sort_order: obj.sort_order });
});
// formStep.value++;
@@ -440,6 +434,12 @@ const onAddAuthor = (person: Person) => {
notify({ type: 'info', text: 'person has been successfully added as author' });
}
};
+
+const addNewContributor = () => {
+ let newContributor = { status: false, first_name: '', last_name: '', email: '', academic_title: '', identifier_orcid: '', name_type: 'Personal', pivot: { contributor_type: '' } };
+ form.contributors.push(newContributor);
+};
+
const onAddContributor = (person: Person) => {
if (form.contributors.filter((e) => e.id === person.id).length > 0) {
notify({ type: 'warning', title: 'Warning', text: 'person is already defined as contributor' }, 4000);
@@ -462,7 +462,7 @@ const onMapInitialized = (newItem: any) => {
adds a new Keyword
*/
const addKeyword = () => {
- let newSubject: Subject = { value: 'test', language: '', type: 'uncontrolled' };
+ let newSubject: Subject = { value: '', language: '', type: 'uncontrolled' };
//this.dataset.files.push(uploadedFiles[i]);
form.subjects.push(newSubject);
};
@@ -499,16 +499,25 @@ Removes a selected keyword
- Mit dem Setzen des Hakens bestätige ich hiermit
-
@@ -531,15 +540,15 @@ Removes a selected keyword
-
+
-
+
-
+
@@ -567,7 +576,7 @@ Removes a selected keyword
-
@@ -575,8 +584,10 @@ Removes a selected keyword
terms and conditions
-->
-
+
@@ -662,7 +673,7 @@ Removes a selected keyword
-
@@ -738,7 +749,7 @@ Removes a selected keyword
-
+
-
- {{ errors.authors.join(', ') }}
+
+ {{ form.errors.authors.join(', ') }}
Add additional creator(s) if creator is
@@ -796,7 +807,7 @@ Removes a selected keyword
-
+
@@ -808,6 +819,12 @@ Removes a selected keyword
v-if="form.errors.contributors && Array.isArray(form.errors.contributors)">
{{ form.errors.contributors.join(', ') }}
+
+ Add additional contributor(s) if
+ contributor is not in database
+ +
+
@@ -834,7 +851,7 @@ Removes a selected keyword
-
+
-
+
-
+
absolut elevation (m)
@@ -1071,7 +1088,8 @@ Removes a selected keyword
+ :placeholder="getPlaceholder(form.references[index].type)"
+ :errors="form.errors.embargo_date">
{{ form.errors[`references.${index}.value`].join(', ') }}
diff --git a/resources/js/Pages/Submitter/Dataset/Edit.vue b/resources/js/Pages/Submitter/Dataset/Edit.vue
index 9f3c395..ff885c1 100644
--- a/resources/js/Pages/Submitter/Dataset/Edit.vue
+++ b/resources/js/Pages/Submitter/Dataset/Edit.vue
@@ -42,7 +42,8 @@
-
+
@@ -78,7 +79,7 @@
-
@@ -116,7 +117,7 @@
-
@@ -163,7 +164,8 @@
:class="{ 'text-red-400': form.errors['descriptions.0.value'] }"
class="w-full mr-1 flex-1">
+ placeholder="[enter main abstract]" :show-char-count="true"
+ :max-input-length="2500">
{{ form.errors['descriptions.0.value'].join(', ') }}
@@ -176,7 +178,7 @@
+ ">
{{ form.errors['descriptions.0.language'].join(', ') }}
@@ -197,7 +199,7 @@
-
@@ -239,19 +241,23 @@
-
+
-
-
+
+
{{ form.errors.authors.join(', ') }}
-
+
@@ -334,8 +340,8 @@
-
+
No references added yet.
@@ -408,6 +414,43 @@
+
+
+
+
References To Delete
+
+
+
+
+
+ {{ element.value }}
+
+
+
+ Type: {{ element.type }}
+
+
+ Relation: {{ element.relation }}
+
+
+
+
+
+
+
+
@@ -420,20 +463,11 @@
-->
+ v-model:subjects-to-delete="form.subjectsToDelete" v-if="form.subjects.length > 0" />
-
-
-
-
-
+
+
{{ form.errors['files'].join(', ') }}
-
-
-
-
-
+
-
+
-
-
+
@@ -492,8 +518,6 @@
// import EditComponent from "./../EditComponent";
// export default EditComponent;
-// import { Component, Vue, Prop, Setup, toNative } from 'vue-facing-decorator';
-// import AuthLayout from '@/Layouts/Auth.vue';
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
import { useForm, Head, usePage } from '@inertiajs/vue3';
import { computed, ComputedRef } from 'vue';
@@ -527,6 +551,9 @@ import {
mdiBookOpenPageVariant,
mdiEarthPlus,
mdiAlertBoxOutline,
+ mdiRestore,
+ mdiLockOpen,
+ mdiDisc
} from '@mdi/js';
import { notify } from '@/notiwind';
import NotificationBar from '@/Components/NotificationBar.vue';
@@ -580,8 +607,10 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
-
-
+ can: {
+ type: Object,
+ default: () => ({}),
+ },
});
const flash: ComputedRef = computed(() => {
@@ -592,12 +621,6 @@ const flash: ComputedRef = computed(() => {
const errors: ComputedRef = computed(() => {
return usePage().props.errors;
});
-// const errors: ComputedRef = computed(() => {
-// return usePage().props.errors;
-// });
-
-// const projects = reactive([]);
-// const licenses = reactive([]);
const mapOptions: MapOptions = {
center: [48.208174, 16.373819],
@@ -612,67 +635,72 @@ const fitBounds: LatLngBoundsExpression = [
];
const mapId = 'test';
-// const downloadFile = async (id: string): Promise => {
-// const response = await axios.get(`/api/download/${id}`, {
-// responseType: 'blob',
-// });
-// const url = URL.createObjectURL(response.data);
-// setTimeout(() => {
-// URL.revokeObjectURL(url);
-// }, 1000);
-// return url;
-// };
-
-// for (const file of props.dataset.files) {
-// // console.log(`${file.name} path is ${file.filePath} here.`);
-// file.fileSrc = ref("");
-// // downloadFile(file.id).then((value: string) => {
-// // file.fileSrc = ref(value);
-// // form = useForm(props.dataset as Dataset);
-// // });
-// }
props.dataset.filesToDelete = [];
+props.dataset.subjectsToDelete = [];
+props.dataset.referencesToDelete = [];
let form = useForm(props.dataset as Dataset);
-// const mainService = MainService();
-// mainService.fetchfiles(props.dataset);
+// Add this computed property to the script section
+const hasUnsavedChanges = computed(() => {
+ // Check if form is processing
+ if (form.processing) return true;
+ // Compare current form state with original dataset
+ // Check basic properties
+ if (form.language !== props.dataset.language) return true;
+ if (form.type !== props.dataset.type) return true;
+ if (form.project_id !== props.dataset.project_id) return true;
+ if (form.embargo_date !== props.dataset.embargo_date) return true;
+ // Check if licenses have changed
+ const originalLicenses = Array.isArray(props.dataset.licenses)
+ ? props.dataset.licenses.map(l => typeof l === 'object' ? l.id.toString() : l)
+ : [];
+ const currentLicenses = Array.isArray(form.licenses)
+ ? form.licenses.map(l => typeof l === 'object' ? l.id.toString() : l)
+ : [];
+ if (JSON.stringify(currentLicenses) !== JSON.stringify(originalLicenses)) return true;
+ // Check if titles have changed
+ if (JSON.stringify(form.titles) !== JSON.stringify(props.dataset.titles)) return true;
+ // Check if descriptions have changed
+ if (JSON.stringify(form.descriptions) !== JSON.stringify(props.dataset.descriptions)) return true;
+ // Check if authors have changed
+ if (JSON.stringify(form.authors) !== JSON.stringify(props.dataset.authors)) return true;
-// const files = computed(() => props.dataset.file);
+ // Check if contributors have changed
+ if (JSON.stringify(form.contributors) !== JSON.stringify(props.dataset.contributors)) return true;
+ // Check if subjects have changed
+ // if (JSON.stringify(form.subjects) !== JSON.stringify(props.dataset.subjects)) return true;
+ let test = JSON.stringify(form.subjects);
+ let test2 = JSON.stringify(props.dataset.subjects);
+ if (test !== test2) {
+ return true;
+ }
+ // Check if references have changed
+ if (JSON.stringify(form.references) !== JSON.stringify(props.dataset.references)) return true;
-// let form = useForm(props.dataset as Dataset);
+ // Check if coverage has changed
+ if (JSON.stringify(form.coverage) !== JSON.stringify(props.dataset.coverage)) return true;
-// const form = useForm({
-// _method: 'put',
-// login: props.user.login,
-// email: props.user.email,
-// password: '',
-// password_confirmation: '',
-// roles: props.userHasRoles, // fill actual user roles from db
-// });
-
-// async created() {
-// // Fetch the list of projects and licenses from the server
-// const response = await fetch('/api/datasets/edit/' + this.dataset.id);
-// const data = await response.json();
-// this.projects = data.projects;
-// this.licenses = data.licenses;
-// }
+ // Check if files have changed
+ if (form.files?.length !== props.dataset.files?.length) return true;
+ if (form.filesToDelete?.length > 0) return true;
+ // Check if there are new files to upload
+ if (form.files?.some(file => !file.id)) return true;
+ // No changes detected
+ return false;
+});
const submit = async (): Promise => {
let route = stardust.route('dataset.update', [props.dataset.id]);
- // await Inertia.post('/app/register', this.form);
- // await router.post('/app/register', this.form);
-
let licenses = form.licenses.map((obj) => {
if (hasIdAttribute(obj)) {
@@ -682,12 +710,6 @@ const submit = async (): Promise => {
}
});
-
-
- // const files = form.files.map((obj) => {
- // return new File([obj.blob], obj.label, { type: obj.type, lastModified: obj.lastModified });
- // });
-
const [fileUploads, fileInputs] = form.files?.reduce(
([fileUploads, fileInputs], obj) => {
if (!obj.id) {
@@ -700,11 +722,11 @@ const submit = async (): Promise => {
// const file = new File([obj.blob], `${obj.label}?sortOrder=${obj.sort_order}`, options);
// const metadata = JSON.stringify({ sort_order: obj.sort_order });
// const metadataBlob = new Blob([metadata + '\n'], { type: 'application/json' });
- const file = new File([obj.blob], `${obj.label}`, options,);
-
+ const file = new File([obj.blob], `${obj.label}?sortorder=${obj.sort_order}`, options,);
+
// const file = new File([obj.blob], `${obj.label}`, options);
-
-
+
+
// fileUploads[obj.sort_order] = file;
fileUploads.push(file);
} else {
@@ -744,7 +766,9 @@ const submit = async (): Promise => {
// formStep.value++;
// form.filesToDelete = [];
// Clear the array using splice
- form.filesToDelete?.splice(0, form.filesToDelete.length);
+ form.filesToDelete?.splice(0, form.filesToDelete.length);
+ form.subjectsToDelete?.splice(0, form.subjectsToDelete.length);
+ form.referencesToDelete?.splice(0, form.referencesToDelete.length);
},
});
};
@@ -769,6 +793,11 @@ const removeDescription = (key: any) => {
form.descriptions.splice(key, 1);
};
+const addNewAuthor = () => {
+ let newAuthor = { status: false, first_name: '', last_name: '', email: '', academic_title: '', identifier_orcid: '', name_type: 'Personal' };
+ form.authors.push(newAuthor);
+};
+
const onAddAuthor = (person: Person) => {
if (form.authors.filter((e) => e.id === person.id).length > 0) {
notify({ type: 'warning', title: 'Warning', text: 'person is already defined as author' }, 4000);
@@ -780,6 +809,11 @@ const onAddAuthor = (person: Person) => {
}
};
+const addNewContributor = () => {
+ let newContributor = { status: false, first_name: '', last_name: '', email: '', academic_title: '', identifier_orcid: '', name_type: 'Personal', pivot: { contributor_type: '' } };
+ form.contributors.push(newContributor);
+};
+
const onAddContributor = (person: Person) => {
if (form.contributors.filter((e) => e.id === person.id).length > 0) {
notify({ type: 'warning', title: 'Warning', text: 'person is already defined as contributor' }, 4000);
@@ -794,7 +828,7 @@ const onAddContributor = (person: Person) => {
};
const addKeyword = () => {
- let newSubject: Subject = { value: 'test', language: '', type: 'uncontrolled', dataset_count: 0 };
+ let newSubject: Subject = { value: '', language: '', type: 'uncontrolled' };
//this.dataset.files.push(uploadedFiles[i]);
form.subjects.push(newSubject);
};
@@ -806,9 +840,35 @@ const addReference = () => {
};
const removeReference = (key: any) => {
+ const reference = form.references[key];
+
+ // If the reference has an ID, it exists in the database
+ // and should be added to referencesToDelete
+ if (reference.id) {
+ // Initialize referencesToDelete array if it doesn't exist
+ if (!form.referencesToDelete) {
+ form.referencesToDelete = [];
+ }
+
+ // Add to referencesToDelete
+ form.referencesToDelete.push(reference);
+ }
+
+ // Remove from form.references array
form.references.splice(key, 1);
};
+const restoreReference = (index: number) => {
+ // Get the reference from referencesToDelete
+ const reference = form.referencesToDelete[index];
+
+ // Add it back to form.references
+ form.references.push(reference);
+
+ // Remove it from referencesToDelete
+ form.referencesToDelete.splice(index, 1);
+};
+
const onMapInitialized = (newItem: any) => {
console.log(newItem);
};
diff --git a/resources/js/Pages/Submitter/Dataset/Index.vue b/resources/js/Pages/Submitter/Dataset/Index.vue
index 65ab0b1..5b01370 100644
--- a/resources/js/Pages/Submitter/Dataset/Index.vue
+++ b/resources/js/Pages/Submitter/Dataset/Index.vue
@@ -95,18 +95,18 @@ const formatServerState = (state: string) => {
-
+
Dataset Title
-
-
+
+
Server State
-
+
Date of last modification
-
+
Actions
@@ -114,35 +114,54 @@ const formatServerState = (state: string) => {
-
+
- {{ dataset.main_title }}
+ {{ dataset.main_title }}
-
+
{{ formatServerState(dataset.server_state) }}
+
+
+ i
+
+
+
+ {{ dataset.reject_editor_note }}
+
+
+
+
+
-
+
{{ dataset.server_date_modified }}
-
+
-
+
+ :icon="mdiLibraryShelves" :label="'Classify'" small />
@@ -152,7 +171,7 @@ const formatServerState = (state: string) => {
@@ -160,13 +179,17 @@ const formatServerState = (state: string) => {
+
diff --git a/resources/js/Pages/profile/partials/update-profile-information-form.vue b/resources/js/Pages/profile/partials/update-profile-information-form.vue
index e15d13c..5a5fdff 100644
--- a/resources/js/Pages/profile/partials/update-profile-information-form.vue
+++ b/resources/js/Pages/profile/partials/update-profile-information-form.vue
@@ -105,7 +105,7 @@ const updateProfileInformation = () => {
+ :is-read-only="true">
{{ errors.login.join(', ') }}
@@ -115,7 +115,7 @@ const updateProfileInformation = () => {
+ :is-read-only="true">
{{ errors.email.join(', ') }}
diff --git a/resources/js/Stores/main.ts b/resources/js/Stores/main.ts
index 39ca0c0..3a31057 100644
--- a/resources/js/Stores/main.ts
+++ b/resources/js/Stores/main.ts
@@ -198,7 +198,8 @@ export const MainService = defineStore('main', {
}
})
.catch((error) => {
- alert(error.message);
+ // alert(error.message);
+ throw error;
});
},
@@ -236,17 +237,18 @@ export const MainService = defineStore('main', {
this.totpState = state;
},
- fetchChartData(year: string) {
+ fetchChartData() {
// sampleDataKey= authors or datasets
axios
- .get(`/api/statistic/${year}`)
+ .get(`/api/statistic`)
.then((r) => {
if (r.data) {
this.graphData = r.data;
}
})
.catch((error) => {
- alert(error.message);
+ // alert(error.message);
+ throw error;
});
},
diff --git a/resources/js/app.ts b/resources/js/app.ts
index e98664d..5931472 100644
--- a/resources/js/app.ts
+++ b/resources/js/app.ts
@@ -81,7 +81,7 @@ const layoutService = LayoutService(pinia);
const localeService = LocaleStore(pinia);
localeService.initializeLocale();
-const mainService = MainService(pinia);
+// const mainService = MainService(pinia);
// mainService.setUser(user);
/* App style */
@@ -91,12 +91,11 @@ styleService.setStyle(localStorage[styleKey] ?? 'basic');
if ((!localStorage[darkModeKey] && window.matchMedia('(prefers-color-scheme: dark)').matches) || localStorage[darkModeKey] === '1') {
styleService.setDarkMode(true);
}
-// mainService.fetch('clients');
-// mainService.fetch('history');
-mainService.fetchApi('clients');
-mainService.fetchApi('authors');
-mainService.fetchApi('datasets');
-mainService.fetchChartData("2022");
+
+// mainService.fetchApi('clients');
+// mainService.fetchApi('authors');
+// mainService.fetchApi('datasets');
+// mainService.fetchChartData();
/* Collapse mobile aside menu on route change */
Inertia.on('navigate', () => {
diff --git a/resources/js/logo.svg b/resources/js/logo.svg
index 1786dcf..c0b62d6 100644
--- a/resources/js/logo.svg
+++ b/resources/js/logo.svg
@@ -1,183 +1,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
diff --git a/resources/js/menu.ts b/resources/js/menu.ts
index 544b0cb..16d08d7 100644
--- a/resources/js/menu.ts
+++ b/resources/js/menu.ts
@@ -156,18 +156,13 @@ export default [
// label: 'Create Dataset',
// },
],
- },
+ },
// {
- // route: 'dataset.create',
- // icon: mdiDatabasePlus,
- // label: 'Create Dataset',
+ // href: '',
+ // icon: mdiGithub,
+ // label: 'Forgejo',
+ // target: '_blank',
// },
- {
- href: 'https://gitea.geosphere.at/geolba/tethys.backend',
- icon: mdiGithub,
- label: 'Forgejo',
- target: '_blank',
- },
{
href: '/oai',
icon: mdiAccountEye,
diff --git a/resources/views/app.edge b/resources/views/app.edge
index 48bb1f8..7020953 100644
--- a/resources/views/app.edge
+++ b/resources/views/app.edge
@@ -7,6 +7,12 @@
+
+
+
+
+
+
diff --git a/start/routes.ts b/start/routes.ts
index fc24e3a..ad28a87 100644
--- a/start/routes.ts
+++ b/start/routes.ts
@@ -106,7 +106,14 @@ router
// Auth routes
router
- .get('/app/login', ({ inertia }: HttpContext) => {
+ .get('/app/login', async ({ inertia }: HttpContext) => {
+ try {
+ await db.connection().rawQuery('SELECT 1');
+ } catch (error) {
+ if (error.code === 'ECONNREFUSED') {
+ throw error;
+ }
+ }
return inertia.render('Auth/Login');
})
.as('app.login.show');
@@ -246,18 +253,11 @@ router.get('/settings/user/security', [UserController, 'accountInfo']).as('setti
router.post('/settings/user/store', [UserController, 'accountInfoStore']).as('account.password.store').use(middleware.auth());
router.get('/settings/profile/edit', [UserController, 'profile']).as('settings.profile.edit').use(middleware.auth());
router
-.put('/settings/profile/:id/update', [UserController, 'profileUpdate'])
-.as('settings.profile.update')
-.where('id', router.matchers.number())
-.use(middleware.auth());
-router
-.put('/settings/password/update', [UserController, 'passwordUpdate'])
-.as('settings.password.update')
-.use(middleware.auth());
-
-
-
-
+ .put('/settings/profile/:id/update', [UserController, 'profileUpdate'])
+ .as('settings.profile.update')
+ .where('id', router.matchers.number())
+ .use(middleware.auth());
+router.put('/settings/password/update', [UserController, 'passwordUpdate']).as('settings.password.update').use(middleware.auth());
// Submitter routes
router
@@ -364,6 +364,44 @@ router
.as('editor.dataset.rejectUpdate')
.where('id', router.matchers.number())
.use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
+
+ router
+ .get('/dataset/:id/edit', [EditorDatasetController, 'edit'])
+ .as('editor.dataset.edit')
+ // .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-update'])]);
+ router
+ .put('/dataset/:id/update', [EditorDatasetController, 'update'])
+ .as('editor.dataset.update')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-update'])]);
+
+ router
+ .get('/dataset/:id/categorize', [EditorDatasetController, 'categorize'])
+ .as('editor.dataset.categorize')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-update'])]);
+ router
+ .put('/dataset/:id/categorizeUpdate', [EditorDatasetController, 'categorizeUpdate'])
+ .as('editor.dataset.categorizeUpdate')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-update'])]);
+
+ router
+ .get('/file/download/:id', [EditorDatasetController, 'download'])
+ .as('editor.file.download')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-update'])]);
+ router
+ .get('dataset/:id/rejectToReviewer', [EditorDatasetController, 'rejectToReviewer'])
+ .as('editor.dataset.rejectToReviewer')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
+ router
+ .put('dataset/:id/rejectToReviewer', [EditorDatasetController, 'rejectToReviewerUpdate'])
+ .as('editor.dataset.rejectToReviewerUpdate')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-editor-reject'])]);
router
.get('dataset/:id/publish', [EditorDatasetController, 'publish'])
.as('editor.dataset.publish')
@@ -384,10 +422,10 @@ router
.as('editor.dataset.doiStore')
.where('id', router.matchers.number())
.use([middleware.auth(), middleware.can(['dataset-publish'])]);
- router
- .put('/dataset/:id/update', [EditorDatasetController, 'update'])
- .as('editor.dataset.update')
- .use([middleware.auth(), middleware.can(['dataset-editor-edit'])]);
+ // router
+ // .put('/dataset/:id/update', [EditorDatasetController, 'update'])
+ // .as('editor.dataset.update')
+ // .use([middleware.auth(), middleware.can(['dataset-editor-edit'])]);
})
.prefix('editor');
@@ -408,6 +446,11 @@ router
.as('reviewer.dataset.reviewUpdate')
.where('id', router.matchers.number())
.use([middleware.auth(), middleware.can(['dataset-review'])]);
+ router
+ .get('/file/download/:id', [ReviewerDatasetController, 'download'])
+ .as('reviewer.file.download')
+ .where('id', router.matchers.number())
+ .use([middleware.auth(), middleware.can(['dataset-review'])]);
router
.get('dataset/:id/reject', [ReviewerDatasetController, 'reject'])
.as('reviewer.dataset.reject')
diff --git a/start/routes/api.ts b/start/routes/api.ts
index 32bc6c2..55fccc5 100644
--- a/start/routes/api.ts
+++ b/start/routes/api.ts
@@ -11,8 +11,8 @@ import { middleware } from '../kernel.js';
// API
router
.group(() => {
- router.get('clients', [UserController, 'getSubmitters']).as('client.index');
- router.get('authors', [AuthorsController, 'index']).as('author.index');
+ router.get('clients', [UserController, 'getSubmitters']).as('client.index').use(middleware.auth());;
+ router.get('authors', [AuthorsController, 'index']).as('author.index').use(middleware.auth());;
router.get('datasets', [DatasetController, 'index']).as('dataset.index');
router.get('persons', [AuthorsController, 'persons']).as('author.persons');
@@ -20,9 +20,9 @@ router
router.get('/dataset/:publish_id', [DatasetController, 'findOne']).as('dataset.findOne');
router.get('/sitelinks/:year', [HomeController, 'findDocumentsPerYear']);
router.get('/years', [HomeController, 'findYears']);
- router.get('/statistic/:year', [HomeController, 'findPublicationsPerMonth']);
+ router.get('/statistic', [HomeController, 'findPublicationsPerMonth']);
- router.get('/download/:id', [FileController, 'findOne']).as('file.findOne');
+ router.get('/file/download/:id', [FileController, 'findOne']).as('file.findOne');
router.get('/avatar/:name/:background?/:textColor?/:size?', [AvatarController, 'generateAvatar']);
diff --git a/start/rules/array_contains_types.ts b/start/rules/array_contains_types.ts
new file mode 100644
index 0000000..1fe5994
--- /dev/null
+++ b/start/rules/array_contains_types.ts
@@ -0,0 +1,80 @@
+import { FieldContext } from '@vinejs/vine/types';
+import vine, { VineArray } from '@vinejs/vine';
+import { SchemaTypes } from '@vinejs/vine/types';
+
+type Options = {
+ typeA: string;
+ typeB: string;
+};
+
+/**
+ * Custom rule to validate an array of titles contains at least one title
+ * with type 'main' and one with type 'translated'.
+ *
+ * This rule expects the validated value to be an array of objects,
+ * where each object has a "type" property.
+ */
+async function arrayContainsTypes(value: unknown, options: Options, field: FieldContext) {
+ if (!Array.isArray(value)) {
+ field.report(`The {{field}} must be an array of titles.`, 'array.titlesContainsMainAndTranslated', field);
+ return false;
+ }
+
+ const typeAExpected = options.typeA.toLowerCase();
+ const typeBExpected = options.typeB.toLowerCase();
+
+ // const hasMain = value.some((title: any) => {
+ // return typeof title === 'object' && title !== null && String(title.type).toLowerCase() === 'main';
+ // });
+
+ // const hasTranslated = value.some((title: any) => {
+ // return typeof title === 'object' && title !== null && String(title.type).toLowerCase() === 'translated';
+ // });
+ const hasTypeA = value.some((item: any) => {
+ return typeof item === 'object' && item !== null && String(item.type).toLowerCase() === typeAExpected;
+ });
+
+ const hasTypeB = value.some((item: any) => {
+ return typeof item === 'object' && item !== null && String(item.type).toLowerCase() === typeBExpected;
+ });
+ if (!hasTypeA || !hasTypeB) {
+ let errorMessage = `The ${field.getFieldPath()} array must have at least one '${options.typeA}' item and one '${options.typeB}' item.`;
+
+ // Check for specific field names to produce a more readable message.
+ if (field.getFieldPath() === 'titles') {
+ // For titles we expect one main and minimum one translated title.
+ if (!hasTypeA && !hasTypeB) {
+ errorMessage = 'For titles, define at least one main title and at least one Translated title as MAIN TITLE.';
+ } else if (!hasTypeA) {
+ errorMessage = 'For titles, define at least one main title.';
+ } else if (!hasTypeB) {
+ errorMessage = 'For Titles, define at least one Translated title as MAIN TITLE.';
+ }
+ } else if (field.getFieldPath() === 'descriptions') {
+ // For descriptions we expect one abstracts description and minimum one translated description.
+ if (!hasTypeA && !hasTypeB) {
+ errorMessage = 'For descriptions, define at least one abstract and at least one Translated description as MAIN ABSTRACT.';
+ } else if (!hasTypeA) {
+ errorMessage = 'For descriptions, define at least one abstract.';
+ } else if (!hasTypeB) {
+ errorMessage = 'For Descriptions, define at least one Translated description as MAIN ABSTRACT.';
+ }
+ }
+
+ field.report(errorMessage, 'array.containsTypes', field, options);
+ return false;
+ }
+ return true;
+}
+
+export const arrayContainsMainAndTranslatedRule = vine.createRule(arrayContainsTypes);
+
+declare module '@vinejs/vine' {
+ interface VineArray {
+ arrayContainsTypes(options: Options): this;
+ }
+}
+
+VineArray.macro('arrayContainsTypes', function (this: VineArray, options: Options) {
+ return this.use(arrayContainsMainAndTranslatedRule(options));
+});
diff --git a/tailwind.config.js b/tailwind.config.js
index 692176b..e41b62d 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -12,6 +12,10 @@ module.exports = {
gray: 'gray',
},
extend: {
+ backgroundImage: {
+ 'radio-checked': "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23fff' d='M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z' /%3E%3C/svg%3E\")",
+ 'checkbox-checked': "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1 1'%3E%3Cpath style='fill:%23fff' d='M 0.04038059,0.6267767 0.14644661,0.52071068 0.42928932,0.80355339 0.3232233,0.90961941 z M 0.21715729,0.80355339 0.85355339,0.16715729 0.95961941,0.2732233 0.3232233,0.90961941 z'%3E%3C/path%3E%3C/svg%3E\")",
+ },
colors: {
'primary': '#22C55E',
'inprogress': 'rgb(94 234 212)',