diff --git a/contracts/enums.ts b/contracts/enums.ts new file mode 100644 index 0000000..ff6e293 --- /dev/null +++ b/contracts/enums.ts @@ -0,0 +1,81 @@ +// ./contracts/enums.ts + +export enum DatasetTypes { + analysisdata = 'analysisdata', + measurementdata = 'measurementdata', + monitoring = 'monitoring', + remotesensing = 'remotesensing', + gis = 'gis', + models = 'models', + mixedtype = 'mixedtype', +} + +export enum ServerStates { + deleted = 'deleted', + inprogress = 'inprogress', + published = 'published', + released = 'released', + editor_accepted = 'editor_accepted', + approved = 'approved', + rejected_reviewer = 'rejected_reviewer', + rejected_editor = 'rejected_editor', + reviewed = 'reviewed', +} + +// for table dataset_titles +export enum TitleTypes { + Main = 'Main', + Sub = 'Sub', + Alternative = 'Alternative', + Translated = 'Translated', + Other = 'Other', +} + +// for table dataset_abstracts +export enum DescriptionTypes { + abstract = 'Abstract', + methods = 'Methods', + series_information = 'Series_information', + technical_info = 'Technical_info', + translated = 'Translated', + other = 'Other', +} + +export enum PersonNameTypes { + Organizational = 'Organizational', + Personal = 'Personal', +} + +export enum PersonRoles { + author = 'author', + contributor = 'contributor', + other = 'other', +} + +export enum ContributorTypes { + contact_person = 'ContactPerson', + data_collector = 'DataCollector', + data_curator = 'DataCurator', + data_manager = 'DataManager', + Distributor = 'Distributor', + editor = 'Editor', + hosting_institution = 'HostingInstitution', + producer = 'Producer', + poroject_leader = 'ProjectLeader', + project_manager = 'ProjectManager', + project_member = 'ProjectMember', + registration_agency = 'RegistrationAgency', + registration_authority = 'RegistrationAuthority', + related_person = 'RelatedPerson', + researcher = 'Researcher', + research_group = 'ResearchGroup', + rights_holder = 'RightsHolder', + sponsor = 'Sponsor', + supervisor = 'Supervisor', + work_package_leader = 'WorkPackageLeader', + other = 'Other', +} + +export enum SubjectTypes { + uncontrolled = 'uncontrolled', +} diff --git a/database/migrations/acl_1_roles.ts b/database/migrations/acl_1_roles.ts index bdf592f..a7f8f01 100644 --- a/database/migrations/acl_1_roles.ts +++ b/database/migrations/acl_1_roles.ts @@ -1,21 +1,16 @@ import BaseSchema from '@ioc:Adonis/Lucid/Schema'; -import Config from '@ioc:Adonis/Core/Config'; export default class Roles extends BaseSchema { - protected tableName = Config.get('rolePermission.role_table', 'roles'); + protected tableName = 'roles'; public async up() { this.schema.createTable(this.tableName, (table) => { - table.increments('id'); - table.string('name', 191).unique(); - table.string('slug', 191).nullable().unique(); - table.string('description', 191).nullable(); - - /** - * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL - */ - table.timestamp('created_at', { useTz: true }).nullable(); - table.timestamp('updated_at', { useTz: true }).nullable(); + table.increments('id').primary().defaultTo("nextval('roles_id_seq')"); + table.string('name', 255).notNullable(); + table.string('display_name', 255); + table.string('description', 255); + table.timestamp('created_at', { useTz: false }).nullable(); + table.timestamp('updated_at', { useTz: false }).nullable(); }); } @@ -23,3 +18,19 @@ export default class Roles extends BaseSchema { this.schema.dropTable(this.tableName); } } + +// CREATE TABLE IF NOT EXISTS roles +// ( +// id integer NOT NULL DEFAULT nextval('roles_id_seq'::regclass), +// name character varying(255) NOT NULL, +// display_name character varying(255), +// description character varying(255), +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT roles_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS roles +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE roles FROM tethys_app; +// GRANT ALL ON TABLE roles TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE roles TO tethys_app; diff --git a/database/migrations/acl_2_permissions.ts b/database/migrations/acl_2_permissions.ts index 00a017b..9c0b155 100644 --- a/database/migrations/acl_2_permissions.ts +++ b/database/migrations/acl_2_permissions.ts @@ -1,25 +1,39 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' -import Config from '@ioc:Adonis/Core/Config' +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; export default class Permissions extends BaseSchema { - protected tableName = Config.get('rolePermission.permission_table', 'permissions') + protected tableName = 'permissions'; - public async up() { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table.string('name', 191).unique() - table.string('slug', 191).nullable().unique() - table.string('description', 191).nullable() + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('permissions_id_seq')"); + table.string('name', 255).unique().notNullable(); + table.string('display_name', 100).notNullable(); + table.string('description', 255); + // table.timestamp('created_at'); + // table.timestamp('updated_at'); + table.timestamp('created_at', { useTz: false }); + table.timestamp('updated_at', { useTz: false }); + }); + } - /** - * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL - */ - table.timestamp('created_at', { useTz: true }).nullable() - table.timestamp('updated_at', { useTz: true }).nullable() - }) - } - - public async down() { - this.schema.dropTable(this.tableName) - } + public async down() { + this.schema.dropTableIfExists(this.tableName); + } } + +// CREATE TABLE IF NOT EXISTS permissions +// ( +// id integer NOT NULL DEFAULT nextval('permissions_id_seq'::regclass), +// name character varying(255) NOT NULL, +// display_name character varying(100) NOT NULL, +// description character varying(255), +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT permissions_pkey PRIMARY KEY (id), +// CONSTRAINT permissions_name_unique UNIQUE (name) +// ) +// ALTER TABLE IF EXISTS permissions +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE permissions FROM tethys_app; +// GRANT ALL ON TABLE permissions TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE permissions TO tethys_app; diff --git a/database/migrations/acl_3_role_has_permissions.ts b/database/migrations/acl_3_role_has_permissions.ts new file mode 100644 index 0000000..e82ba5e --- /dev/null +++ b/database/migrations/acl_3_role_has_permissions.ts @@ -0,0 +1,52 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class RoleHasPermissions extends BaseSchema { + // protected tableName = Config.get('rolePermission.role_permission_table', 'role_permissions') + protected tableName = 'role_has_permissions'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + // table.integer('permission_id').notNullable(); + // table.integer('role_id').notNullable(); + table.integer('permission_id').unsigned().index().notNullable(); + table + .foreign('permission_id', 'role_has_permissions_permission_id_foreign') + .references('id') + .inTable('permissions') + .onDelete('CASCADE') // delete this when permission is deleted + .onUpdate('CASCADE'); + table.integer('role_id').unsigned().index().notNullable(); + table + .foreign('role_id', 'role_has_permissions_role_id_foreign') + .references('id') + .inTable('roles') + .onDelete('CASCADE') // delete this when role is deleted + .onUpdate('CASCADE'); + table.primary(['permission_id', 'role_id']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// CREATE TABLE IF NOT EXISTS role_has_permissions +// ( +// permission_id integer NOT NULL, +// role_id integer NOT NULL, +// CONSTRAINT role_has_permissions_pkey PRIMARY KEY (permission_id, role_id), +// CONSTRAINT role_has_permissions_permission_id_foreign FOREIGN KEY (permission_id) +// REFERENCES permissions (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT role_has_permissions_role_id_foreign FOREIGN KEY (role_id) +// REFERENCES roles (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS role_has_permissions +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE role_has_permissions FROM tethys_app; +// GRANT ALL ON TABLE role_has_permissions TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE role_has_permissions TO tethys_app; diff --git a/database/migrations/acl_3_role_permissions.ts b/database/migrations/acl_3_role_permissions.ts deleted file mode 100644 index 319bab8..0000000 --- a/database/migrations/acl_3_role_permissions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' -import Config from '@ioc:Adonis/Core/Config' - -export default class RolePermissions extends BaseSchema { - protected tableName = Config.get('rolePermission.role_permission_table', 'role_permissions') - - public async up() { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table - .integer('role_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.role_table', 'roles')) - table - .integer('permission_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.permission_table', 'permissions')) - - /** - * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL - */ - table.timestamp('created_at', { useTz: true }).nullable() - table.timestamp('updated_at', { useTz: true }).nullable() - }) - } - - public async down() { - this.schema.dropTable(this.tableName) - } -} diff --git a/database/migrations/acl_4_accounts.ts b/database/migrations/acl_4_accounts.ts new file mode 100644 index 0000000..1685c7a --- /dev/null +++ b/database/migrations/acl_4_accounts.ts @@ -0,0 +1,43 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class Accounts extends BaseSchema { + protected tableName = 'accounts'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('accounts_id_seq')"); + table.string('login', 20).notNullable(); + table.string('password', 60).notNullable(); + table.string('email', 255).unique().notNullable(); + table.string('first_name', 255).nullable(); + table.string('last_name', 255).nullable(); + table.string('remember_token'); + table.timestamp('created_at'); + table.timestamp('updated_at'); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// CREATE TABLE IF NOT EXISTS accounts +// ( +// id integer NOT NULL DEFAULT nextval('accounts_id_seq'::regclass), +// login character varying(20) NOT NULL, +// password character varying(60) NOT NULL, +// email character varying(255) NOT NULL, +// first_name character varying(255), +// last_name character varying(255), +// remember_token character varying(100), +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT accounts_pkey PRIMARY KEY (id), +// CONSTRAINT accounts_email_unique UNIQUE (email) +// ) +// ALTER TABLE IF EXISTS accounts +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE accounts FROM tethys_app; +// GRANT ALL ON TABLE accounts TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE accounts TO tethys_app; diff --git a/database/migrations/acl_4_user_permissions.ts b/database/migrations/acl_4_user_permissions.ts deleted file mode 100644 index fa67684..0000000 --- a/database/migrations/acl_4_user_permissions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' -import Config from '@ioc:Adonis/Core/Config' - -export default class UserPermissions extends BaseSchema { - protected tableName = Config.get('rolePermission.user_permission_table', 'user_permissions') - - public async up() { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table - .integer('user_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.user_table', 'users')) - table - .integer('permission_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.permission_table', 'permissions')) - - /** - * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL - */ - table.timestamp('created_at', { useTz: true }).nullable() - table.timestamp('updated_at', { useTz: true }).nullable() - }) - } - - public async down() { - this.schema.dropTable(this.tableName) - } -} diff --git a/database/migrations/acl_5_link_accounts_roles.ts b/database/migrations/acl_5_link_accounts_roles.ts new file mode 100644 index 0000000..2cb2a42 --- /dev/null +++ b/database/migrations/acl_5_link_accounts_roles.ts @@ -0,0 +1,52 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class LinkAccountsRoles extends BaseSchema { + // protected tableName = Config.get('rolePermission.user_role_table', 'user_roles') + protected tableName = 'link_accounts_roles'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('account_id').index().unsigned().notNullable(); + table + .foreign('account_id', 'link_accounts_roles_account_id_foreign') + .references('id') + .inTable('accounts') + // .inTable(Config.get('rolePermission.user_table', 'users')) + .onDelete('CASCADE') // delete this when account is delete + .onUpdate('CASCADE'); + table.integer('role_id').index().unsigned().notNullable(); + table + .foreign('role_id', 'link_accounts_roles_role_id_foreign') + .references('id') + .inTable('roles') + // .inTable(Config.get('rolePermission.role_table', 'roles')) + .onDelete('CASCADE') // delete this when account is delete + .onUpdate('CASCADE'); + table.primary(['account_id', 'role_id']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// CREATE TABLE IF NOT EXISTS link_accounts_roles +// ( +// account_id integer NOT NULL, +// role_id integer NOT NULL, +// CONSTRAINT link_accounts_roles_pkey PRIMARY KEY (account_id, role_id), +// CONSTRAINT link_accounts_roles_account_id_foreign FOREIGN KEY (account_id) +// REFERENCES accounts (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT link_accounts_roles_role_id_foreign FOREIGN KEY (role_id) +// REFERENCES roles (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS link_accounts_roles +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE link_accounts_roles FROM tethys_app; +// GRANT ALL ON TABLE link_accounts_roles TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE link_accounts_roles TO tethys_app; diff --git a/database/migrations/acl_5_user_roles.ts b/database/migrations/acl_5_user_roles.ts deleted file mode 100644 index 4b676fc..0000000 --- a/database/migrations/acl_5_user_roles.ts +++ /dev/null @@ -1,32 +0,0 @@ -import BaseSchema from '@ioc:Adonis/Lucid/Schema' -import Config from '@ioc:Adonis/Core/Config' - -export default class UserRoles extends BaseSchema { - protected tableName = Config.get('rolePermission.user_role_table', 'user_roles') - - public async up() { - this.schema.createTable(this.tableName, (table) => { - table.increments('id') - table - .integer('user_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.user_table', 'users')) - table - .integer('role_id') - .unsigned() - .references('id') - .inTable(Config.get('rolePermission.role_table', 'roles')) - - /** - * Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL - */ - table.timestamp('created_at', { useTz: true }).nullable() - table.timestamp('updated_at', { useTz: true }).nullable() - }) - } - - public async down() { - this.schema.dropTable(this.tableName) - } -} diff --git a/database/migrations/dataset_10_link_documents_persons.ts b/database/migrations/dataset_10_link_documents_persons.ts new file mode 100644 index 0000000..8ff78b0 --- /dev/null +++ b/database/migrations/dataset_10_link_documents_persons.ts @@ -0,0 +1,80 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { PersonRoles, ContributorTypes } from 'Contracts/enums'; + +export default class LinkDocumentsPersons extends BaseSchema { + protected tableName = 'link_documents_persons'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('person_id').index('ix_fk_link_documents_persons_persons').notNullable(); + table + .foreign('person_id', 'fk_link_documents_persons_persons') + .references('id') + .inTable('persons') + .onDelete('NO ACTION') // don't delete this when license is deleted + .onUpdate('NO ACTION'); + table.integer('document_id').index('ix_fk_link_persons_documents_documents').notNullable(); + table + .foreign('document_id', 'fk_link_persons_documents_documents') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this when document is deleted + .onUpdate('CASCADE'); + + // table.string('role').notNullable().defaultTo("'other'"); + table.enum('role', Object.values(PersonRoles)).notNullable().defaultTo('other'); + + table.specificType('sort_order', 'smallint').notNullable(); + table.boolean('allow_email_contact').notNullable().defaultTo(false); + + // table.string('contributor_type'); + table.enum('contributor_type', Object.values(ContributorTypes)); + + table.primary(['person_id', 'document_id', 'role']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: gba.link_documents_persons +// -- DROP TABLE IF EXISTS gba.link_documents_persons; + +// CREATE TABLE IF NOT EXISTS link_documents_persons +// ( +// person_id integer NOT NULL, +// document_id integer NOT NULL, +// role character varying(255) NOT NULL DEFAULT 'other'::character varying, +// sort_order smallint NOT NULL, +// allow_email_contact boolean NOT NULL DEFAULT false, +// contributor_type character varying(255), +// CONSTRAINT link_documents_persons_pkey PRIMARY KEY (person_id, document_id, role), +// CONSTRAINT fk_link_documents_persons_persons FOREIGN KEY (person_id) +// REFERENCES persons (id) MATCH SIMPLE +// ON UPDATE NO ACTION +// ON DELETE NO ACTION, +// CONSTRAINT fk_link_persons_documents_documents FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT link_documents_persons_contributor_type_check CHECK (contributor_type::text = ANY (ARRAY['ContactPerson'::character varying::text, 'DataCollector'::character varying::text, 'DataCurator'::character varying::text, 'DataManager'::character varying::text, 'Distributor'::character varying::text, 'Editor'::character varying::text, 'HostingInstitution'::character varying::text, 'Producer'::character varying::text, 'ProjectLeader'::character varying::text, 'ProjectManager'::character varying::text, 'ProjectMember'::character varying::text, 'RegistrationAgency'::character varying::text, 'RegistrationAuthority'::character varying::text, 'RelatedPerson'::character varying::text, 'Researcher'::character varying::text, 'ResearchGroup'::character varying::text, 'RightsHolder'::character varying::text, 'Sponsor'::character varying::text, 'Supervisor'::character varying::text, 'WorkPackageLeader'::character varying::text, 'Other'::character varying::text])), +// CONSTRAINT link_documents_persons_role_check CHECK (role::text = ANY (ARRAY['author'::character varying::text, 'contributor'::character varying::text, 'other'::character varying::text])) +// ) +// ALTER TABLE IF EXISTS link_documents_persons +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE link_documents_persons FROM tethys_app; +// GRANT ALL ON TABLE link_documents_persons TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE link_documents_persons TO tethys_app; + +// -- Index: ix_fk_link_documents_persons_persons +// -- DROP INDEX IF EXISTS ix_fk_link_documents_persons_persons; +// CREATE INDEX IF NOT EXISTS ix_fk_link_documents_persons_persons +// ON link_documents_persons USING btree +// (person_id ASC); +// -- Index: ix_fk_link_persons_documents_documents +// -- DROP INDEX IF EXISTS ix_fk_link_persons_documents_documents; +// CREATE INDEX IF NOT EXISTS ix_fk_link_persons_documents_documents +// ON link_documents_persons USING btree +// (document_id ASC); diff --git a/database/migrations/dataset_11_subjects.ts b/database/migrations/dataset_11_subjects.ts new file mode 100644 index 0000000..dab92c2 --- /dev/null +++ b/database/migrations/dataset_11_subjects.ts @@ -0,0 +1,41 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { SubjectTypes } from 'Contracts/enums'; + +export default class DatasetSubjects extends BaseSchema { + protected tableName = 'dataset_subjects'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.bigIncrements('id').defaultTo("nextval('dataset_subjects_id_seq')"); + table.string('language', 3); + // table.string('type', 255).notNullable().defaultTo('uncontrolled'); + table.enum('type', Object.values(SubjectTypes)).defaultTo('uncontrolled'); + table.string('value', 255).notNullable(); + table.string('external_key', 255); + table.timestamp('created_at', { useTz: false }).nullable(); + table.timestamp('updated_at', { useTz: false }).nullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: dataset_subjects +// CREATE TABLE IF NOT EXISTS dataset_subjects +// ( +// id bigint NOT NULL DEFAULT nextval('dataset_subjects_id_seq'::regclass), +// language character varying(3), +// type character varying(255) NOT NULL, +// value character varying(255) NOT NULL, +// external_key character varying(255), +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT dataset_subjects_pkey PRIMARY KEY (id), +// CONSTRAINT dataset_subjects_type_check CHECK (type::text = 'uncontrolled'::text) +// ) +// ALTER TABLE IF EXISTS dataset_subjects OWNER to tethys_admin; +// REVOKE ALL ON TABLE dataset_subjects FROM tethys_app; +// GRANT ALL ON TABLE dataset_subjects TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE dataset_subjects TO tethys_app; diff --git a/database/migrations/dataset_12_link_dataset_subjects.ts b/database/migrations/dataset_12_link_dataset_subjects.ts new file mode 100644 index 0000000..5947af8 --- /dev/null +++ b/database/migrations/dataset_12_link_dataset_subjects.ts @@ -0,0 +1,62 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class LinkDatasetSubjects extends BaseSchema { + protected tableName = 'link_dataset_subjects'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('subject_id').index('link_dataset_subjects_subject_id_index').notNullable(); + table + .foreign('subject_id', 'link_dataset_subjects_subject_id_foreign') + .references('id') + .inTable('dataset_subjects') + .onDelete('NO ACTION') // don't delete this when subject is deleted + .onUpdate('NO ACTION'); + + table.integer('document_id').index('link_dataset_subjects_document_id_index').notNullable(); + table + .foreign('document_id', 'link_dataset_subjects_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this when document is deleted + .onUpdate('CASCADE'); + + table.primary(['subject_id', 'document_id']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} +// -- Table: link_dataset_subjects +// CREATE TABLE IF NOT EXISTS link_dataset_subjects +// ( +// subject_id integer NOT NULL, +// document_id integer NOT NULL, +// CONSTRAINT link_dataset_subjects_pkey PRIMARY KEY (subject_id, document_id), +// CONSTRAINT link_dataset_subjects_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT link_dataset_subjects_subject_id_foreign FOREIGN KEY (subject_id) +// REFERENCES dataset_subjects (id) MATCH SIMPLE +// ON UPDATE NO ACTION +// ON DELETE NO ACTION +// ) +// ALTER TABLE IF EXISTS .link_dataset_subjects +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE link_dataset_subjects FROM tethys_app; +// GRANT ALL ON TABLE link_dataset_subjects TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE link_dataset_subjects TO tethys_app; + +// -- Index: link_dataset_subjects_document_id_index +// -- DROP INDEX IF EXISTS link_dataset_subjects_document_id_index; +// CREATE INDEX IF NOT EXISTS link_dataset_subjects_document_id_index +// ON link_dataset_subjects USING btree +// (document_id ASC); +// -- Index: link_dataset_subjects_subject_id_index +// -- DROP INDEX IF EXISTS link_dataset_subjects_subject_id_index; +// CREATE INDEX IF NOT EXISTS link_dataset_subjects_subject_id_index +// ON link_dataset_subjects USING btree +// (subject_id ASC); diff --git a/database/migrations/dataset_1_projects.ts b/database/migrations/dataset_1_projects.ts new file mode 100644 index 0000000..167dad7 --- /dev/null +++ b/database/migrations/dataset_1_projects.ts @@ -0,0 +1,37 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class Projects extends BaseSchema { + protected tableName = 'projects'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('projects_id_seq')"); + table.string('label', 50).notNullable(); + table.string('name', 255).notNullable(); + table.string('description', 255).nullable(); + table.timestamp('created_at', { useTz: false }).nullable(); + table.timestamp('updated_at', { useTz: false }).nullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: project +// CREATE TABLE IF NOT EXISTS projects +// ( +// id integer NOT NULL DEFAULT nextval('projects_id_seq'::regclass), +// label character varying(50) NOT NULL, +// name character varying(255) NOT NULL, +// description character varying(2500), +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT projects_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS projects +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE projects FROM tethys_app; +// GRANT ALL ON TABLE projects TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE projects TO tethys_app; \ No newline at end of file diff --git a/database/migrations/dataset_2_documents.ts b/database/migrations/dataset_2_documents.ts new file mode 100644 index 0000000..9b5396c --- /dev/null +++ b/database/migrations/dataset_2_documents.ts @@ -0,0 +1,93 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { DatasetTypes, ServerStates } from 'Contracts/enums'; + +export default class Documents extends BaseSchema { + protected tableName = 'documents'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('documents_id_seq')"); + table.string('contributing_corporation'); + table.string('creating_corporation').notNullable(); + table.string('publisher_name'); + table.timestamp('embargo_date'); + table.integer('publish_id').unique(); + table.integer('project_id').unsigned().nullable(); + table + .foreign('project_id', 'documents_project_id_foreign') + .references('id') + .inTable('projects') + .onDelete('NO ACTION') // don't delete this doc when project is deleted + .onUpdate('NO ACTION'); + table.enum('type', Object.values(DatasetTypes)).notNullable(); + table.string('language').notNullable(); + table.enum('server_state', Object.values(ServerStates)).notNullable().defaultTo("'inprogress'"); + table.boolean('belongs_to_bibliography').notNullable().defaultTo(false); + table.timestamp('created_at').notNullable(); + table.timestamp('server_date_modified').notNullable(); + table.timestamp('server_date_published'); + table.integer('account_id').unsigned().nullable(); + table + .foreign('account_id', 'documents_account_id_foreign') + .references('id') + .inTable('accounts') + .onDelete('NO ACTION') // don't delete this when account is deleted + .onUpdate('NO ACTION'); + table.integer('editor_id'); + table.integer('reviewer_id'); + table.string('preferred_reviewer'); + table.string('preferred_reviewer_email'); + table.string('reject_editor_note'); + table.string('reject_reviewer_note'); + table.boolean('reviewer_note_visible').notNullable().defaultTo(false); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: documents +// CREATE TABLE IF NOT EXISTS documents +// ( +// id integer NOT NULL DEFAULT nextval('documents_id_seq'::regclass), +// contributing_corporation character varying(255) , +// creating_corporation character varying(255) NOT NULL, +// publisher_name character varying(255) , +// embargo_date timestamp(0) without time zone, +// publish_id integer, +// project_id integer, +// type character varying(255) NOT NULL, +// language character varying(10) NOT NULL, +// server_state character varying(255) NOT NULL DEFAULT 'inprogress'::character varying, +// belongs_to_bibliography boolean NOT NULL DEFAULT false, +// created_at timestamp(0) without time zone NOT NULL, +// server_date_modified timestamp(0) without time zone NOT NULL, +// server_date_published timestamp(0) without time zone, +// account_id integer, +// editor_id integer, +// reviewer_id integer, +// preferred_reviewer character varying(25) , +// preferred_reviewer_email character varying(50) , +// reject_editor_note character varying(500) , +// reject_reviewer_note character varying(500) , +// reviewer_note_visible boolean NOT NULL DEFAULT false, +// CONSTRAINT documents_pkey PRIMARY KEY (id), +// CONSTRAINT documents_publish_id_unique UNIQUE (publish_id), +// CONSTRAINT documents_project_id_foreign FOREIGN KEY (project_id) +// REFERENCES projects (id) MATCH SIMPLE +// ON UPDATE NO ACTION +// ON DELETE NO ACTION, +// CONSTRAINT documents_account_id_foreign FOREIGN KEY (account_id) +// REFERENCES accounts (id) MATCH SIMPLE +// ON UPDATE NO ACTION +// ON DELETE NO ACTION, +// 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 IF EXISTS documents +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE documents FROM tethys_app; +// GRANT ALL ON TABLE documents TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE documents TO tethys_app; diff --git a/database/migrations/dataset_3_abstracts.ts b/database/migrations/dataset_3_abstracts.ts new file mode 100644 index 0000000..4b04af5 --- /dev/null +++ b/database/migrations/dataset_3_abstracts.ts @@ -0,0 +1,48 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { DescriptionTypes } from 'Contracts/enums'; + +export default class DatasetTitles extends BaseSchema { + protected tableName = 'dataset_abstracts'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('dataset_abstracts_id_seq')"); + table.integer('document_id').unsigned().notNullable(); + table + .foreign('document_id', 'dataset_abstracts_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this abstract when document is deleted + .onUpdate('CASCADE'); + // table.string('type', 255).notNullable(); + table.enum('type', Object.values(DescriptionTypes)).notNullable(); + table.string('value', 255).notNullable(); + table.string('language', 3).notNullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: dataset_titles +// CREATE TABLE IF NOT EXISTS dataset_titles +// ( +// id integer NOT NULL DEFAULT nextval('dataset_titles_id_seq'::regclass), +// document_id integer NOT NULL, +// type character varying(255) NOT NULL, +// value character varying(255) NOT NULL, +// language character varying(3) NOT NULL, +// CONSTRAINT dataset_titles_pkey PRIMARY KEY (id), +// CONSTRAINT dataset_titles_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT dataset_titles_type_check CHECK (type::text = ANY (ARRAY['Main'::character varying::text, 'Sub'::character varying::text, 'Alternative'::character varying::text, 'Translated'::character varying::text, 'Other'::character varying::text])) +// ) +// ALTER TABLE IF EXISTS dataset_titles +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE dataset_titles FROM tethys_app; +// GRANT ALL ON TABLE dataset_titles TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE dataset_titles TO tethys_app; diff --git a/database/migrations/dataset_4_titles.ts b/database/migrations/dataset_4_titles.ts new file mode 100644 index 0000000..a7f677f --- /dev/null +++ b/database/migrations/dataset_4_titles.ts @@ -0,0 +1,48 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { TitleTypes } from 'Contracts/enums'; + +export default class DatasetTitles extends BaseSchema { + protected tableName = 'dataset_titles'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('dataset_titles_id_seq')"); + table.integer('document_id').unsigned().notNullable(); + table + .foreign('document_id', 'dataset_titles_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this titke when document is deleted + .onUpdate('CASCADE'); + // table.string('type', 255).notNullable(); + table.enum('type', Object.values(TitleTypes)).notNullable(); + table.string('value', 255).notNullable(); + table.string('language', 3).notNullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: dataset_titles +// CREATE TABLE IF NOT EXISTS dataset_titles +// ( +// id integer NOT NULL DEFAULT nextval('dataset_titles_id_seq'::regclass), +// document_id integer NOT NULL, +// type character varying(255) NOT NULL, +// value character varying(255) NOT NULL, +// language character varying(3) NOT NULL, +// CONSTRAINT dataset_titles_pkey PRIMARY KEY (id), +// CONSTRAINT dataset_titles_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT dataset_titles_type_check CHECK (type::text = ANY (ARRAY['Main'::character varying::text, 'Sub'::character varying::text, 'Alternative'::character varying::text, 'Translated'::character varying::text, 'Other'::character varying::text])) +// ) +// ALTER TABLE IF EXISTS dataset_titles +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE dataset_titles FROM tethys_app; +// GRANT ALL ON TABLE dataset_titles TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE dataset_titles TO tethys_app; diff --git a/database/migrations/dataset_6_collection_roles.ts b/database/migrations/dataset_6_collection_roles.ts new file mode 100644 index 0000000..6125546 --- /dev/null +++ b/database/migrations/dataset_6_collection_roles.ts @@ -0,0 +1,40 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class CollectionsRoles extends BaseSchema { + protected tableName = 'collections_roles'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('collections_roles_id_seq')"); + table.string('name', 255).notNullable(); + table.string('oai_name', 255).notNullable(); + table.integer('position').notNullable(); + table.boolean('visible').notNullable().defaultTo(true); + table.boolean('visible_frontdoor').notNullable().defaultTo(true); + table.boolean('visible_oai').notNullable().defaultTo(true); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: collection roles +// CREATE TABLE IF NOT EXISTS collections_roles +// ( +// id integer NOT NULL DEFAULT nextval('collections_roles_id_seq'::regclass), +// name character varying(255) NOT NULL, +// oai_name character varying(255) NOT NULL, +// "position" integer NOT NULL, +// visible boolean NOT NULL DEFAULT true, +// visible_frontdoor boolean NOT NULL DEFAULT true, +// visible_oai boolean NOT NULL DEFAULT true, +// CONSTRAINT collections_roles_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS collections_roles +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE collections_roles FROM tethys_app; +// GRANT ALL ON TABLE collections_roles TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE collections_roles TO tethys_app; + diff --git a/database/migrations/dataset_7_collections.ts b/database/migrations/dataset_7_collections.ts new file mode 100644 index 0000000..349e147 --- /dev/null +++ b/database/migrations/dataset_7_collections.ts @@ -0,0 +1,61 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class Collections extends BaseSchema { + protected tableName = 'collections'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').defaultTo("nextval('collections_id_seq')"); + table.integer('role_id').unsigned(); + table + .foreign('role_id', 'collections_role_id_foreign') + .references('id') + .inTable('collections_roles') + .onDelete('CASCADE') // delete this collection when collection_role is deleted + .onUpdate('CASCADE'); + table.string('number', 255); + table.string('name', 255).notNullable(); + table.string('oai_subset', 255); + table.integer('parent_id').unsigned(); + table + .foreign('parent_id', 'collections_parent_id_foreign') + .references('id') + .inTable('collections') + .onDelete('CASCADE') // delete this collection when parent collection is deleted + .onUpdate('CASCADE'); + table.boolean('visible').notNullable().defaultTo(true); + table.boolean('visible_publish').notNullable().defaultTo(true); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: collections +// CREATE TABLE IF NOT EXISTS collections +// ( +// id integer NOT NULL DEFAULT nextval('collections_id_seq'::regclass), +// role_id integer, +// "number" character varying(255), +// name character varying(255) NOT NULL, +// oai_subset character varying(255), +// parent_id integer, +// visible boolean NOT NULL DEFAULT true, +// visible_publish boolean NOT NULL DEFAULT true, +// CONSTRAINT collections_pkey PRIMARY KEY (id), +// CONSTRAINT collections_parent_id_foreign FOREIGN KEY (parent_id) +// REFERENCES collections (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT collections_role_id_foreign FOREIGN KEY (role_id) +// REFERENCES collections_roles (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS collections +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE collections FROM tethys_app; +// GRANT ALL ON TABLE collections TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE collections TO tethys_app; \ No newline at end of file diff --git a/database/migrations/dataset_8_link_documents_collections.ts b/database/migrations/dataset_8_link_documents_collections.ts new file mode 100644 index 0000000..02b5f8e --- /dev/null +++ b/database/migrations/dataset_8_link_documents_collections.ts @@ -0,0 +1,59 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class LinkDocumentsCollections extends BaseSchema { + protected tableName = 'link_documents_collections'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('collection_id').index('link_documents_collections_collection_id_index').notNullable(); + table + .foreign('collection_id', 'link_documents_collections_collection_id_foreign') + .references('id') + .inTable('collections') + .onDelete('CASCADE') // don't delete this when collection is deleted + .onUpdate('CASCADE'); + table.integer('document_id').index('link_documents_collections_document_id_index').notNullable(); + table + .foreign('document_id', 'link_documents_collections_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // don't delete this when document is deleted + .onUpdate('CASCADE'); + table.primary(['collection_id', 'document_id']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: link_documents_collections +// CREATE TABLE IF NOT EXISTS link_documents_collections +// ( +// collection_id integer NOT NULL, +// document_id integer NOT NULL, +// CONSTRAINT link_documents_collections_pkey PRIMARY KEY (collection_id, document_id), +// CONSTRAINT link_documents_collections_collection_id_foreign FOREIGN KEY (collection_id) +// REFERENCES collections (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT link_documents_collections_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS link_documents_collections +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE link_documents_collections FROM tethys_app; +// GRANT ALL ON TABLE link_documents_collections TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE link_documents_collections TO tethys_app; + +// -- Index: link_documents_collections_collection_id_index +// -- DROP INDEX IF EXISTS link_documents_collections_collection_id_index; +// CREATE INDEX IF NOT EXISTS link_documents_collections_collection_id_index +// ON link_documents_collections USING btree (collection_id ASC); +// -- Index: link_documents_collections_document_id_index +// -- DROP INDEX IF EXISTS link_documents_collections_document_id_index; +// CREATE INDEX IF NOT EXISTS link_documents_collections_document_id_index +// ON link_documents_collections USING btree (document_id ASC); \ No newline at end of file diff --git a/database/migrations/dataset_9_persons.ts b/database/migrations/dataset_9_persons.ts new file mode 100644 index 0000000..d0f208a --- /dev/null +++ b/database/migrations/dataset_9_persons.ts @@ -0,0 +1,56 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { PersonNameTypes } from 'Contracts/enums'; + +export default class Persons extends BaseSchema { + protected tableName = 'persons'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('persons_id_seq')"); + table.string('academic_title', 255); + table.string('date_of_birth', 100); + table.string('email', 100).notNullable(); + table.string('first_name', 255); + table.string('last_name', 255); + table.string('place_of_birth', 255); + table.string('identifier_orcid', 50); + table.string('identifier_gnd', 50); + table.string('identifier_misc', 50); + table.boolean('status').defaultTo(true); + table.integer('registered_at'); + // table.string('name_type', 255); + table.enum('name_type', Object.values(PersonNameTypes)).notNullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + + +// -- Table: persons +// CREATE TABLE IF NOT EXISTS persons +// ( +// id integer NOT NULL DEFAULT nextval('persons_id_seq'::regclass), +// academic_title character varying(255), +// date_of_birth character varying(100), +// email character varying(100) NOT NULL, +// first_name character varying(255), +// last_name character varying(255), +// place_of_birth character varying(255), +// identifier_orcid character varying(50), +// identifier_gnd character varying(50), +// identifier_misc character varying(50), +// status boolean DEFAULT true, +// registered_at integer, +// name_type character varying(255), +// CONSTRAINT persons_pkey PRIMARY KEY (id), +// CONSTRAINT persons_name_type_check CHECK (name_type::text = ANY (ARRAY['Organizational'::character varying::text, 'Personal'::character varying::text])) +// ) + +// ALTER TABLE IF EXISTS persons +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE persons FROM tethys_app; +// GRANT ALL ON TABLE persons TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE persons TO tethys_app; diff --git a/database/migrations/files_1_document_files.ts b/database/migrations/files_1_document_files.ts new file mode 100644 index 0000000..252cb72 --- /dev/null +++ b/database/migrations/files_1_document_files.ts @@ -0,0 +1,61 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class DocumentFiles extends BaseSchema { + protected tableName = 'document_files'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('document_files_id_seq')"); + table.integer('document_id').unsigned().notNullable(); + table + .foreign('document_id', 'document_files_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this when document is deleted + .onUpdate('CASCADE'); + table.string('path_name').notNullable(); + table.string('label'); + table.string('comment'); + table.string('mime_type'); + table.string('language'); + table.bigInteger('file_size').notNullable(); + table.boolean('visible_in_frontdoor').notNullable().defaultTo(true); + table.boolean('visible_in_oai').notNullable().defaultTo(true); + table.integer('sort_order').notNullable(); + table.timestamp('created_at'); + table.timestamp('updated_at'); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: document_files +// CREATE TABLE IF NOT EXISTS document_files +// ( +// id integer NOT NULL DEFAULT nextval('document_files_id_seq'::regclass), +// document_id integer NOT NULL, +// path_name character varying(100) NOT NULL, +// label character varying(100), +// comment character varying(255), +// mime_type character varying(255), +// language character varying(3), +// file_size bigint NOT NULL, +// visible_in_frontdoor boolean NOT NULL DEFAULT true, +// visible_in_oai boolean NOT NULL DEFAULT true, +// sort_order integer NOT NULL, +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT document_files_pkey PRIMARY KEY (id), +// CONSTRAINT document_files_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS document_files +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE document_files FROM tethys_app; +// GRANT ALL ON TABLE document_files TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE document_files TO tethys_app; diff --git a/database/migrations/files_2_file_hashvalues.ts b/database/migrations/files_2_file_hashvalues.ts new file mode 100644 index 0000000..7327d5e --- /dev/null +++ b/database/migrations/files_2_file_hashvalues.ts @@ -0,0 +1,42 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class FileHashvalues extends BaseSchema { + protected tableName = 'file_hashvalues'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('file_id').notNullable(); + table + .foreign('file_id', 'file_hashvalues_file_id_foreign') + .references('id') + .inTable('document_files') + .onDelete('CASCADE') // delete this when document_file is deleted + .onUpdate('CASCADE'); + table.string('type', 50).notNullable(); + table.string('value').notNullable(); + table.primary(['file_id', 'type']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: file_hashvalues +// CREATE TABLE IF NOT EXISTS file_hashvalues +// ( +// file_id integer NOT NULL, +// type character varying(50) NOT NULL, +// value character varying(255) NOT NULL, +// CONSTRAINT file_hashvalues_pkey PRIMARY KEY (file_id, type), +// CONSTRAINT file_hashvalues_file_id_foreign FOREIGN KEY (file_id) +// REFERENCES document_files (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE +// ) +// ALTER TABLE IF EXISTS file_hashvalues +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE file_hashvalues FROM tethys_app; +// GRANT ALL ON TABLE file_hashvalues TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE file_hashvalues TO tethys_app; diff --git a/database/migrations/files_3_document_licences.ts b/database/migrations/files_3_document_licences.ts new file mode 100644 index 0000000..8cbe1f7 --- /dev/null +++ b/database/migrations/files_3_document_licences.ts @@ -0,0 +1,53 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class DocumentLicences extends BaseSchema { + protected tableName = 'document_licences'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('document_licences_id_seq')"); + table.boolean('active').notNullable().defaultTo(true); + table.string('comment_internal', 4000); + table.string('desc_markup', 4000); + table.string('desc_text', 4000); + table.string('language', 3); + table.string('link_licence', 200).notNullable(); + table.string('link_logo', 200); + table.string('link_sign', 200); + table.string('mime_type', 30); + table.string('name_long', 200).notNullable(); + table.string('name', 50).notNullable(); + table.boolean('pod_allowed').notNullable().defaultTo(false); + table.specificType('sort_order', 'smallint').notNullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: document_licences +// CREATE TABLE IF NOT EXISTS document_licences +// ( +// id integer NOT NULL DEFAULT nextval('document_licences_id_seq'::regclass), +// active boolean NOT NULL DEFAULT true, +// comment_internal character varying(4000), +// desc_markup character varying(4000), +// desc_text character varying(4000), +// language character varying(3), +// link_licence character varying(200) NOT NULL, +// link_logo character varying(200), +// link_sign character varying(200), +// mime_type character varying(30), +// name_long character varying(200) NOT NULL, +// name character varying(50) NOT NULL, +// pod_allowed boolean NOT NULL DEFAULT false, +// sort_order smallint NOT NULL, +// CONSTRAINT document_licences_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS document_licences +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE document_licences FROM tethys_app; +// GRANT ALL ON TABLE document_licences TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE document_licences TO tethys_app; diff --git a/database/migrations/files_4_link_documents_licences.ts b/database/migrations/files_4_link_documents_licences.ts new file mode 100644 index 0000000..ac88cdf --- /dev/null +++ b/database/migrations/files_4_link_documents_licences.ts @@ -0,0 +1,63 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; +import { PersonRoles } from 'Contracts/enums'; + +export default class LinkDocumentsLicences extends BaseSchema { + protected tableName = 'link_documents_licences'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.integer('licence_id').index('link_documents_licences_licence_id_index').notNullable(); + table + .foreign('licence_id', 'link_documents_licences_licence_id_foreign') + .references('id') + .inTable('document_licences') + .onDelete('NO ACTION') // don't delete this when license is deleted + .onUpdate('NO ACTION'); + // table.index('licence_id', 'link_documents_licences_licence_id_index') + table.integer('document_id').index('link_documents_licences_document_id_index').notNullable(); + table + .foreign('document_id', 'link_documents_licences_document_id_foreign') + .references('id') + .inTable('documents') + .onDelete('CASCADE') // delete this when permission is deleted + .onUpdate(' CASCADE'); + // table.index('licence_id', 'link_documents_licences_document_id_index') + table.primary(['licence_id', 'document_id']); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: link_documents_licences +// CREATE TABLE IF NOT EXISTS link_documents_licences +// ( +// licence_id integer NOT NULL, +// document_id integer NOT NULL, +// role character varying(255) NOT NULL DEFAULT 'other'::character varying, +// CONSTRAINT link_documents_licences_pkey PRIMARY KEY (licence_id, document_id), +// CONSTRAINT link_documents_licences_document_id_foreign FOREIGN KEY (document_id) +// REFERENCES documents (id) MATCH SIMPLE +// ON UPDATE CASCADE +// ON DELETE CASCADE, +// CONSTRAINT link_documents_licences_licence_id_foreign FOREIGN KEY (licence_id) +// REFERENCES document_licences (id) MATCH SIMPLE +// ON UPDATE NO ACTION +// ON DELETE NO ACTION, +// ) +// ALTER TABLE IF EXISTS link_documents_licences +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE link_documents_licences FROM tethys_app; +// GRANT ALL ON TABLE link_documents_licences TO tethys_admin; +// GRANT DELETE, INSERT, SELECT, UPDATE ON TABLE link_documents_licences TO tethys_app; + +// -- Index: link_documents_licences_document_id_index +// CREATE INDEX IF NOT EXISTS link_documents_licences_document_id_index +// ON link_documents_licences USING btree +// (document_id ASC); +// -- Index: link_documents_licences_licence_id_index +// CREATE INDEX IF NOT EXISTS link_documents_licences_licence_id_index +// ON link_documents_licences USING btree +// (licence_id ASC); diff --git a/database/migrations/lookup_1_mime_types.ts b/database/migrations/lookup_1_mime_types.ts new file mode 100644 index 0000000..8592c43 --- /dev/null +++ b/database/migrations/lookup_1_mime_types.ts @@ -0,0 +1,37 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class MimeTypes extends BaseSchema { + protected tableName = 'mime_types'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('mime_types_id_seq')"); + table.string('name', 255).notNullable(); + table.string('file_extension', 255).notNullable(); + table.boolean('enabled').notNullable().defaultTo(false); + table.timestamp('created_at', { useTz: false }).nullable(); + table.timestamp('updated_at', { useTz: false }).nullable(); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: mime_types +// CREATE TABLE IF NOT EXISTS mime_types +// ( +// id integer NOT NULL DEFAULT nextval('mime_types_id_seq'::regclass), +// name character varying(255) NOT NULL, +// file_extension character varying(255) NOT NULL, +// enabled boolean NOT NULL DEFAULT false, +// created_at timestamp(0) without time zone, +// updated_at timestamp(0) without time zone, +// CONSTRAINT mime_types_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS mime_types +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE mime_types FROM tethys_app; +// GRANT ALL ON TABLE mime_types TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE mime_types TO tethys_app; \ No newline at end of file diff --git a/database/migrations/lookup_2_languages.ts b/database/migrations/lookup_2_languages.ts new file mode 100644 index 0000000..ac2d284 --- /dev/null +++ b/database/migrations/lookup_2_languages.ts @@ -0,0 +1,41 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class Languages extends BaseSchema { + protected tableName = 'languages'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('id').primary().defaultTo("nextval('languages_id_seq')"); + table.string('part2_b', 3).notNullable(); + table.string('part2_t', 3).notNullable(); + table.string('part1', 2).notNullable(); + table.string('scope', 20).notNullable(); + table.string('type', 20).notNullable(); + table.string('ref_name', 150).notNullable(); + table.boolean('active').notNullable().defaultTo(true); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: languages +// CREATE TABLE IF NOT EXISTS languages +// ( +// id integer NOT NULL DEFAULT nextval('languages_id_seq'::regclass), +// part2_b character varying(3) NOT NULL, +// part2_t character varying(3) NOT NULL, +// part1 character varying(2) NOT NULL, +// scope character varying(20) NOT NULL, +// type character varying(20) NOT NULL, +// ref_name character varying(150) NOT NULL, +// active boolean NOT NULL DEFAULT true, +// CONSTRAINT languages_pkey PRIMARY KEY (id) +// ) +// ALTER TABLE IF EXISTS languages +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE languages FROM tethys_app; +// GRANT ALL ON TABLE languages TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE languages TO tethys_app; diff --git a/database/migrations/lookup_3_document_xml_cache.ts b/database/migrations/lookup_3_document_xml_cache.ts new file mode 100644 index 0000000..93988fa --- /dev/null +++ b/database/migrations/lookup_3_document_xml_cache.ts @@ -0,0 +1,33 @@ +import BaseSchema from '@ioc:Adonis/Lucid/Schema'; + +export default class DocumentXmlCache extends BaseSchema { + protected tableName = 'document_xml_cache'; + + public async up() { + this.schema.createTable(this.tableName, (table) => { + table.increments('document_id').primary(); + table.integer('xml_version').notNullable(); + table.string('server_date_modified', 50); + table.text('xml_data'); + }); + } + + public async down() { + this.schema.dropTable(this.tableName); + } +} + +// -- Table: document_xml_cache +// CREATE TABLE IF NOT EXISTS document_xml_cache +// ( +// document_id integer NOT NULL, +// xml_version integer NOT NULL, +// server_date_modified character varying(50), +// xml_data text, +// CONSTRAINT document_xml_cache_pkey PRIMARY KEY (document_id) +// ) +// ALTER TABLE IF EXISTS document_xml_cache +// OWNER to tethys_admin; +// REVOKE ALL ON TABLE document_xml_cache FROM tethys_app; +// GRANT ALL ON TABLE document_xml_cache TO tethys_admin; +// GRANT DELETE, UPDATE, INSERT, SELECT ON TABLE document_xml_cache TO tethys_app; diff --git a/database/migrations/runMigrationsDocker.txt b/database/migrations/runMigrationsDocker.txt new file mode 100644 index 0000000..357e58e --- /dev/null +++ b/database/migrations/runMigrationsDocker.txt @@ -0,0 +1,32 @@ + + + +docker exec -it tethys_db /bin/bash +su -l postgres +psql +drop database test with (force); +create database test; +\q +psql -d test -U postgres -p 5432 +CREATE SCHEMA IF NOT EXISTS gba AUTHORIZATION tethys_admin; + +CREATE EXTENSION adminpack; +\q +exit +exit + + + +node ace migration:run + +❯ migrated database/migrations/acl_1_roles +❯ migrated database/migrations/acl_2_permissions +❯ migrated database/migrations/acl_3_role_has_permissions +❯ migrated database/migrations/acl_4_accounts +❯ migrated database/migrations/acl_5_link_accounts_roles +❯ migrated database/migrations/files_1681720090636_documents +❯ migrated database/migrations/files_1681720091636_document_files +❯ migrated database/migrations/files_1681720092636_file_hashvalues + + +node ace migration:rollback \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1d2a688..84e8601 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2662,9 +2662,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz", + "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2723,9 +2723,9 @@ "dev": true }, "node_modules/@inertiajs/core": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.2.tgz", - "integrity": "sha512-IJryvuNBcOIEZqKaA1vsX++hroovrLfb4jezym/W6NqxpsacoOkCLqWFneiScTaa5IiU0Wv0Li3lCuxK7DwTEQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-1.0.6.tgz", + "integrity": "sha512-l1fna4c9h2Tw8EWRGrYd8XVOsNI9rNGKLiAnTfbW+tbcpCtsoBIDmp2OZpeMsBw8tuO7qJV+V01G11nsajrJdQ==", "dependencies": { "axios": "^1.2.0", "deepmerge": "^4.0.0", @@ -2734,9 +2734,9 @@ } }, "node_modules/@inertiajs/core/node_modules/axios": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", - "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.6.tgz", + "integrity": "sha512-PEcdkk7JcdPiMDkvM4K6ZBRYq9keuVJsToxm2zQIM70Qqo2WHTdJZMXcG9X+RmRp2VPNUQC8W1RAGbgt6b1yMg==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -2754,11 +2754,11 @@ } }, "node_modules/@inertiajs/vue3": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.0.2.tgz", - "integrity": "sha512-8LU6fd3BcmmxN7kHWgF06zKXnqZibi3+2UJ5Im1WsMXfqZO4jwaz5qFU2NjOBQEgcm5t+FNv1fbAESGEC8eezg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.0.6.tgz", + "integrity": "sha512-s5I0SMm687RTH7L1sJ06tYLRJIxmYN5Y83fBKfP+ThnleBAjWq4kT1eMGXPWxvL8T7qu6rIjkrx4NsG89st4DA==", "dependencies": { - "@inertiajs/core": "1.0.2", + "@inertiajs/core": "1.0.6", "lodash.clonedeep": "^4.5.0", "lodash.isequal": "^4.5.0" }, @@ -3346,9 +3346,9 @@ "dev": true }, "node_modules/@symfony/webpack-encore": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-4.2.0.tgz", - "integrity": "sha512-m0ZGm7vZpmc9pVKE7YBppS1tb9bK8r0qzOvRI2uCK7UfXtzfV3VgXr0VdTAlfmC72vvLKI+s9YJpiesOFbR6Aw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@symfony/webpack-encore/-/webpack-encore-4.3.0.tgz", + "integrity": "sha512-YhM6xh+aKmrWS7X7Y2CUDte4wiUm9WIo0w07KTwDLLQnOUdMHRf3wa680WXH/I3oHqD+grFa7BHPpR0sfmoGMQ==", "dev": true, "dependencies": { "@nuxt/friendly-errors-webpack-plugin": "^2.5.1", @@ -3389,7 +3389,7 @@ "@vue/babel-preset-jsx": "^1.0.0", "@vue/compiler-sfc": "^2.6 || ^3.0.2", "eslint": "^8.0.0", - "eslint-webpack-plugin": "^3.1.0", + "eslint-webpack-plugin": "^3.1.0 || ^4.0.0", "file-loader": "^6.0.0", "fork-ts-checker-webpack-plugin": "^7.0.0", "handlebars": "^4.7.7", @@ -3403,7 +3403,7 @@ "stylus": "^0.58.1", "stylus-loader": "^7.0.0", "ts-loader": "^9.0.0", - "typescript": "^4.2.2", + "typescript": "^4.2.2 || ^5.0.0", "vue": "^2.6 || ^3.2.14", "vue-loader": "^15.0.11 || ^17.0.0", "vue-template-compiler": "^2.5", @@ -3709,9 +3709,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true, "peer": true }, @@ -3823,9 +3823,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.192", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.192.tgz", - "integrity": "sha512-km+Vyn3BYm5ytMO13k9KTp27O75rbQ0NFw+U//g+PX7VZyjCioXaRFisqSIJRECljcTv73G3i6BpglNGHgUQ5A==", + "version": "4.14.194", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", + "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", "dev": true }, "node_modules/@types/lodash-es": { @@ -3860,9 +3860,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + "version": "18.16.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.0.tgz", + "integrity": "sha512-BsAaKhB+7X+H4GnSjGhJG9Qi8Tw+inU9nJDwmD5CgOmBLEI6ArdhikpLX7DjbjDRDTbqZzU2LSQNZg8WGPiSZQ==" }, "node_modules/@types/pino": { "version": "6.3.12", @@ -3974,9 +3974,9 @@ } }, "node_modules/@types/validator": { - "version": "13.7.14", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.14.tgz", - "integrity": "sha512-J6OAed6rhN6zyqL9Of6ZMamhlsOEU/poBVvbHr/dKOYKTeuYYMlDkMv+b6UUV0o2i0tw73cgyv/97WTWaUl0/g==" + "version": "13.7.15", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.15.tgz", + "integrity": "sha512-yeinDVQunb03AEP8luErFcyf/7Lf7AzKCD0NXfgVoGCCQDNpZET8Jgq74oBgqKld3hafLbfzt/3inUdQvaFeXQ==" }, "node_modules/@types/ws": { "version": "8.5.4", @@ -4003,15 +4003,15 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz", - "integrity": "sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", + "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/type-utils": "5.58.0", - "@typescript-eslint/utils": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/type-utils": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -4037,14 +4037,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz", - "integrity": "sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", + "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/typescript-estree": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "debug": "^4.3.4" }, "engines": { @@ -4064,13 +4064,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz", - "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", + "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0" + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4081,13 +4081,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz", - "integrity": "sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", + "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.58.0", - "@typescript-eslint/utils": "5.58.0", + "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4108,9 +4108,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz", - "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", + "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4121,13 +4121,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz", - "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", + "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4198,17 +4198,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz", - "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", + "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/typescript-estree": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -4246,12 +4246,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz", - "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", + "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", + "@typescript-eslint/types": "5.59.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4390,73 +4390,73 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", + "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", + "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", "dev": true, "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", + "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", "dev": true, "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", + "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", "dev": true, "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", + "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", + "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", "dev": true, "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", + "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", + "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", "dev": true, "peer": true, "dependencies": { @@ -4464,9 +4464,9 @@ } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", + "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", "dev": true, "peer": true, "dependencies": { @@ -4474,79 +4474,79 @@ } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", + "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", "dev": true, "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", + "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", + "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", + "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", + "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", + "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", "dev": true, "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.5", "@xtuc/long": "4.2.2" } }, @@ -4579,9 +4579,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz", - "integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.2.tgz", + "integrity": "sha512-S9h3GmOmzUseyeFW3tYNnWS7gNUuwxZ3mmMq0JyW78Vx1SGKPSkt5bT4pB0rUnVfHjP0EL9gW2bOzmtiTfQt0A==", "dev": true, "peer": true, "engines": { @@ -5856,9 +5856,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001477", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001477.tgz", - "integrity": "sha512-lZim4iUHhGcy5p+Ri/G7m84hJwncj+Kz7S5aD4hoQfslKZJgt0tHc/hafVbqHC5bbhHb+mrW2JOUHkI5KH7toQ==", + "version": "1.0.30001481", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz", + "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==", "dev": true, "funding": [ { @@ -6499,9 +6499,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.0.tgz", - "integrity": "sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dev": true, "dependencies": { "browserslist": "^4.21.5" @@ -6823,15 +6823,15 @@ "dev": true }, "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -7344,9 +7344,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", - "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -7588,9 +7588,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.357", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.357.tgz", - "integrity": "sha512-UTkCbNTAcGXABmEnQrGcW4m3cG6fcyBfD4KDF0iyEAlbrGZiY9dmslyDAGOD1Kr5biN2F743Y30aRCOtau35Vw==", + "version": "1.4.369", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz", + "integrity": "sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg==", "dev": true }, "node_modules/emittery": { @@ -7636,9 +7636,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.13.0.tgz", + "integrity": "sha512-eyV8f0y1+bzyfh8xAwW/WTSZpLbjhqc4ne9eGSH4Zo2ejdyiNG9pU6mf9DG8a7+Auk6MFTlNOT4Y2y/9k8GKVg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -7738,15 +7738,15 @@ } }, "node_modules/eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", + "version": "8.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz", + "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", + "@eslint/js": "8.39.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -7756,7 +7756,7 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", + "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.0", "espree": "^9.5.1", "esquery": "^1.4.2", @@ -7844,9 +7844,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -7854,6 +7854,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -11100,9 +11103,9 @@ } }, "node_modules/memfs": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz", - "integrity": "sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.1.tgz", + "integrity": "sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==", "dependencies": { "fs-monkey": "^1.0.3" }, @@ -11251,15 +11254,15 @@ "dev": true }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -12414,9 +12417,9 @@ } }, "node_modules/pinia": { - "version": "2.0.34", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz", - "integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==", + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.35.tgz", + "integrity": "sha512-P1IKKQWhxGXiiZ3atOaNI75bYlFUbRxtJdhPLX059Z7+b9Z04rnTZdSY8Aph1LA+/4QEMAYHsTQ638Wfe+6K5g==", "dev": true, "dependencies": { "@vue/devtools-api": "^6.5.0", @@ -12440,9 +12443,9 @@ } }, "node_modules/pinia/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.0.tgz", + "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==", "dev": true, "hasInstallScript": true, "bin": { @@ -12727,9 +12730,9 @@ } }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "funding": [ { "type": "opencollective", @@ -12738,10 +12741,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -13394,9 +13401,9 @@ } }, "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -14139,9 +14146,9 @@ } }, "node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15421,9 +15428,9 @@ } }, "node_modules/terser": { - "version": "5.16.9", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", - "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -15473,9 +15480,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -16076,9 +16083,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -16088,6 +16095,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -16095,7 +16106,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -16396,23 +16407,23 @@ } }, "node_modules/webpack": { - "version": "5.78.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.78.0.tgz", - "integrity": "sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==", + "version": "5.80.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.80.0.tgz", + "integrity": "sha512-OIMiq37XK1rWO8mH9ssfFKZsXg4n6klTEDL7S8/HqbAOBBaiy8ABvXvz0dDCXeEF9gqwxSvVk611zFPjS8hJxA==", "dev": true, "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.13.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -16421,9 +16432,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.1.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -16444,18 +16455,18 @@ } }, "node_modules/webpack-cli": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz", - "integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.2.tgz", + "integrity": "sha512-4y3W5Dawri5+8dXm3+diW6Mn1Ya+Dei6eEVAdIduAmYNLzv1koKVAqsfgrrc9P2mhrYHQphx5htnGkcNwtubyQ==", "dev": true, "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.0.1", "@webpack-cli/info": "^2.0.1", - "@webpack-cli/serve": "^2.0.1", + "@webpack-cli/serve": "^2.0.2", "colorette": "^2.0.14", - "commander": "^9.4.1", + "commander": "^10.0.1", "cross-spawn": "^7.0.3", "envinfo": "^7.7.3", "fastest-levenshtein": "^1.0.12", @@ -16489,6 +16500,16 @@ } } }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "peer": true, + "engines": { + "node": ">=14" + } + }, "node_modules/webpack-cli/node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -16571,15 +16592,15 @@ "dev": true }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -16590,9 +16611,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz", - "integrity": "sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw==", + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz", + "integrity": "sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", @@ -16707,15 +16728,15 @@ } }, "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -16745,9 +16766,9 @@ } }, "node_modules/webpack/node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", "dev": true, "peer": true }, @@ -16776,9 +16797,9 @@ } }, "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dev": true, "peer": true, "dependencies": {