diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..a9ba028c --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +.eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..b27e4e80 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,18 @@ +const baseConfig = require('@unocha/hpc-repo-tools/eslintrc.base'); + +module.exports = { + ...baseConfig, + parserOptions: { + project: true, + tsconfigRootDir: __dirname, + }, + overrides: [ + ...baseConfig.overrides, + { + files: ['*.{ts,tsx}'], + rules: { + '@typescript-eslint/no-explicit-any': 'warn', + }, + }, + ], +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 9c81c91d..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["./node_modules/@unocha/hpc-repo-tools/eslintrc.base.json"], - "parserOptions": { - "project": "./tsconfig.json" - } -} diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..62f9ca19 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,4 @@ +a75798a4a9222ac2cc02eb6a007d038b8c3deab7 +37b192f172a0565f0404559813c5ef276896d5c5 +4264d288faff9b94878c60d274362a0764484610 +761b9128719fbd04312337d07dcb9ff720b197d8 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a1e8c4a9..a54adfd0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,10 +11,10 @@ jobs: timeout-minutes: 25 steps: - name: Checkout repository - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' - name: Install packages run: yarn install --frozen-lockfile - name: TypeScript compiler checks diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4a1c1196..7cd6650f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,10 +6,10 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' registry-url: 'https://registry.npmjs.org' - run: npm install - run: npm publish diff --git a/package.json b/package.json index 3969dfba..04e418d4 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { "name": "@unocha/hpc-api-core", - "version": "6.2.0", + "version": "7.0.0", "description": "Core libraries supporting HPC.Tools API Backend", "license": "Apache-2.0", "private": false, "scripts": { "check-types": "tsc --noEmit", - "prepare": "husky install", + "prepare": "[ -d .git ] && git config blame.ignoreRevsFile .git-blame-ignore-revs; husky install", "lint-prettier": "prettier -c .", "lint-eslint": "eslint --quiet .", "lint": "yarn lint-prettier && yarn lint-eslint" }, "engines": { - "node": ">=18.16.1", + "node": ">=18.18.2 || >=20.9.0", "yarn": ">=1.22.10" }, "dependencies": { @@ -23,16 +23,16 @@ "knex": "0.21.1", "lodash": "^4.17.21", "node-fetch": "2.6.9", - "pg": "^8.10.0" + "pg": "^8.11.3" }, "devDependencies": { - "@types/node": "^18.16.19", - "@unocha/hpc-repo-tools": "^3.0.1", - "eslint": "^8.44.0", + "@types/node": "^20.8.10", + "@unocha/hpc-repo-tools": "^4.0.0", + "eslint": "^8.52.0", "husky": "^8.0.3", - "lint-staged": "^13.2.2", - "prettier": "2.8.8", - "typescript": "^5.1.6" + "lint-staged": "^15.0.2", + "prettier": "3.0.3", + "typescript": "^5.2.2" }, "lint-staged": { "*.{ts,js}": [ diff --git a/src/auth/cache.ts b/src/auth/cache.ts index 4af4c334..56103166 100644 --- a/src/auth/cache.ts +++ b/src/auth/cache.ts @@ -4,7 +4,7 @@ * TODO: extend this with some cross-container cache such as redis or memcached */ -import { createHash } from 'crypto'; +import { createHash } from 'node:crypto'; const sha256 = (str: string) => createHash('sha256').update(str).digest('hex'); @@ -28,7 +28,7 @@ export class HashTableCache { public store = (key: string, value: V, cacheTime?: Date): void => { this.map.set(sha256(key), { value, - time: cacheTime || new Date(), + time: cacheTime ?? new Date(), }); this.clearExpiredValues(); }; diff --git a/src/auth/hid.ts b/src/auth/hid.ts index 727edc67..3da6950f 100644 --- a/src/auth/hid.ts +++ b/src/auth/hid.ts @@ -1,10 +1,10 @@ -import * as fetch from 'node-fetch'; -import { URL } from 'url'; import * as t from 'io-ts'; +import * as fetch from 'node-fetch'; +import { URL } from 'node:url'; -import { HashTableCache } from './cache'; -import { Context } from '../lib/context'; +import { type Context } from '../lib/context'; import { ForbiddenError } from '../util/error'; +import { HashTableCache } from './cache'; const HID_ACCOUNT_INFO = t.type({ sub: t.string, @@ -38,7 +38,7 @@ export const HID_CACHE = new HashTableCache({ export const getHidInfo = async ( context: Context ): Promise => { - const { token } = context; + const { config, token } = context; if (!token) { return undefined; @@ -53,7 +53,7 @@ export const getHidInfo = async ( throw new ForbiddenError(existing.message); } else { - const accountUrl = new URL('/account.json', context.config.authBaseUrl); + const accountUrl = new URL('/account.json', config.authBaseUrl); // Reference fetch.default to allow for mocking const res = await fetch.default(accountUrl, { headers: { diff --git a/src/auth/index.ts b/src/auth/index.ts index c3dedb68..77570a47 100644 --- a/src/auth/index.ts +++ b/src/auth/index.ts @@ -2,32 +2,32 @@ * This file is a new (type-safe) interface for common authentication functions * ahead of the auth refactor outlined in HPC-6999 */ -import v4Models from '../db'; -import { AuthTargetId } from '../db/models/authTarget'; -import { ParticipantId } from '../db/models/participant'; -import { InstanceOfModel } from '../db/util/types'; -import { createBrandedValue } from '../util/types'; -import * as crypto from 'crypto'; -import { promisify } from 'util'; +import * as crypto from 'node:crypto'; +import { promisify } from 'node:util'; +import type v4Models from '../db'; +import { type AuthTargetId } from '../db/models/authTarget'; +import { type ParticipantId } from '../db/models/participant'; import type { Database } from '../db/type'; +import { Op } from '../db/util/conditions'; import { createDeferredFetcher } from '../db/util/deferred'; +import { type InstanceOfModel } from '../db/util/types'; +import { type Context } from '../lib/context'; +import { type SharedLogContext } from '../lib/logging'; import { organizeObjectsByUniqueProperty } from '../util'; -import { Context } from '../lib/context'; -import { SharedLogContext } from '../lib/logging'; +import { createBrandedValue } from '../util/types'; import * as hid from './hid'; import { AUTH_PERMISSIONS, - GrantedPermissions, hasRequiredPermissions, - PermissionStrings, - RequiredPermissionsCondition, + type GrantedPermissions, + type PermissionStrings, + type RequiredPermissionsCondition, } from './permissions'; import { calculatePermissionsFromRolesGrant, filterValidRoleStrings, - RolesGrant, + type RolesGrant, } from './roles'; -import { Op } from '../db/util/conditions'; const randomBytes = promisify(crypto.randomBytes); @@ -182,7 +182,7 @@ export const getLoggedInParticipant = async ( * currently logged in user. */ export const actionIsPermitted = async < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( condition: RequiredPermissionsCondition, context: Context @@ -325,13 +325,13 @@ export const getRoleGrantsForUser = async ({ users: [user], context, }) - ).get(user) || []; + ).get(user) ?? []; /** * Calculate the complete set of permissions for the logged in participant */ export const calculatePermissions = async < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( context: Context ): Promise> => { @@ -353,12 +353,12 @@ export const calculatePermissions = async < }; export const getAllowedPermissionsFromGrants = async < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( participantId: ParticipantId, context: Context, calculatePermissionsFn: typeof calculatePermissionsFromRolesGrant -): Promise[]> => { +): Promise>> => { const { models } = context; const grants = await getRoleGrantsForUser({ @@ -373,13 +373,13 @@ export const getAllowedPermissionsFromGrants = async < // Calculate the allowed permissions for each of these grants return (await Promise.all( grants.map((grant) => calculatePermissionsFn(grant, fetchers)) - )) as GrantedPermissions[]; + )) as Array>; }; export const mergePermissionsFromGrants = < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( - allowedFromGrants: GrantedPermissions[] + allowedFromGrants: Array> ): GrantedPermissions => { const allowed: GrantedPermissions = {}; @@ -387,7 +387,7 @@ export const mergePermissionsFromGrants = < Type extends keyof Omit< GrantedPermissions, 'global' - > + >, >( type: Type, additions: Map>> @@ -415,15 +415,14 @@ export const mergePermissionsFromGrants = < continue; } if (granted.global) { - allowed.global = allowed.global || new Set(); + allowed.global = allowed.global ?? new Set(); for (const p of granted.global) { allowed.global.add(p); } } - for (const [key, obj] of Object.entries(granted) as [ - keyof typeof granted, - any - ][]) { + for (const [key, obj] of Object.entries(granted) as Array< + [keyof typeof granted, any] + >) { if (key !== 'global') { mergeAllowedPermissions(key, obj); } diff --git a/src/auth/permissions.ts b/src/auth/permissions.ts index 017a39bd..347db3c6 100644 --- a/src/auth/permissions.ts +++ b/src/auth/permissions.ts @@ -283,13 +283,13 @@ export type RequiredPermission = * A list of permissions that must all be granted for an access to be permitted */ type RequiredPermissionsConjunctionAnd< - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, > = { - and: RequiredPermissionsCondition[]; + and: Array>; }; export type RequiredPermissionsConjunction< - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, > = | RequiredPermissionsConjunctionAnd | RequiredPermission; @@ -305,13 +305,13 @@ export const isAnd = ( * Disjunctive Normal Form (https://en.wikipedia.org/wiki/Disjunctive_normal_form) */ export type RequiredPermissionsConditionOr< - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, > = { - or: RequiredPermissionsCondition[]; + or: Array>; }; export type RequiredPermissionsCondition< - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, > = | RequiredPermissionsConditionOr | RequiredPermissionsConjunction @@ -324,7 +324,7 @@ export const isOr = ( !!(conj as RequiredPermissionsConditionOr).or; export const hasRequiredPermissions = < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( granted: GrantedPermissions, condition: RequiredPermissionsCondition diff --git a/src/auth/roles.ts b/src/auth/roles.ts index befeb550..247eed7e 100644 --- a/src/auth/roles.ts +++ b/src/auth/roles.ts @@ -1,9 +1,9 @@ import type { Database } from '../db/type'; import type { DeferredFetcherForModel } from '../db/util/deferred'; -import { SharedLogContext } from '../lib/logging'; +import { type SharedLogContext } from '../lib/logging'; import { getOrCreate } from '../util'; import { createBrandedValue } from '../util/types'; -import { AUTH_PERMISSIONS as P, GrantedPermissions } from './permissions'; +import { AUTH_PERMISSIONS as P, type GrantedPermissions } from './permissions'; /** * A breakdown of the different types of roles are available @@ -106,31 +106,31 @@ export const filterValidRoleStrings = ( export type RolesGrant = | { type: 'global'; - roles: RolesStrings<'global'>[]; + roles: Array>; } | { type: 'operation'; - roles: RolesStrings<'operation'>[]; + roles: Array>; id: number; } | { type: 'operationCluster'; - roles: RolesStrings<'operationCluster'>[]; + roles: Array>; id: number; } | { type: 'plan'; - roles: RolesStrings<'plan'>[]; + roles: Array>; id: number; } | { type: 'project'; - roles: RolesStrings<'project'>[]; + roles: Array>; id: number; } | { type: 'governingEntity'; - roles: RolesStrings<'governingEntity'>[]; + roles: Array>; id: number; }; @@ -141,7 +141,8 @@ export type RolesGrant = export const getGrantValidator = (type: K, role: RolesStrings) => (grant: RolesGrant): grant is RolesGrant & { type: K } => - grant.type === type && (grant.roles as RolesStrings[]).includes(role); + grant.type === type && + (grant.roles as Array>).includes(role); /** * Calculate the effective permissions that are granted to a user based on a @@ -152,7 +153,7 @@ export const getGrantValidator = * to implement (such as cluster leads having read access to their operations). */ export const calculatePermissionsFromRolesGrant = async < - AdditionalGlobalPermissions extends string + AdditionalGlobalPermissions extends string, >( grant: RolesGrant, fetchers: { @@ -166,7 +167,8 @@ export const calculatePermissionsFromRolesGrant = async < ): Promise> => { const granted: GrantedPermissions = {}; if (grant.type === 'global') { - const global = (granted.global = granted.global || new Set()); + granted.global ??= new Set(); + const global = granted.global; for (const role of grant.roles) { if (role === 'hpc_admin') { // All new Permissions @@ -200,7 +202,8 @@ export const calculatePermissionsFromRolesGrant = async < } } } else if (grant.type === 'operation') { - const global = (granted.global = granted.global || new Set()); + granted.global ??= new Set(); + const global = granted.global; if (!granted.operation) { granted.operation = new Map(); } @@ -232,7 +235,8 @@ export const calculatePermissionsFromRolesGrant = async < createBrandedValue(grant.id) ); if (cluster) { - const global = (granted.global = granted.global || new Set()); + granted.global ??= new Set(); + const global = granted.global; if (!granted.operation) { granted.operation = new Map(); } @@ -341,7 +345,8 @@ export const calculatePermissionsFromRolesGrant = async < // Add additional global permissions if (additionalGlobalPermissions) { - const global = (granted.global = granted.global || new Set()); + granted.global ??= new Set(); + const global = granted.global; for (const permission of additionalGlobalPermissions) { global.add(permission); } diff --git a/src/db/fetching.ts b/src/db/fetching.ts index a4d65914..b2332a30 100644 --- a/src/db/fetching.ts +++ b/src/db/fetching.ts @@ -1,7 +1,7 @@ -import { Table } from '.'; -import { AnnotatedMap, organizeObjectsByUniqueValue } from '../util'; -import { InstanceDataOfModel, Model } from './util/raw-model'; -import { +import type { Table } from '.'; +import { organizeObjectsByUniqueValue, type AnnotatedMap } from '../util'; +import type { InstanceDataOfModel, Model } from './util/raw-model'; +import type { InstanceOfVersionedModel, VersionedModel, } from './util/versioned-model'; @@ -25,7 +25,7 @@ type InstanceOf = T extends Model */ export const findAndOrganizeObjectsByUniqueProperty = < T extends Table, - P extends keyof InstanceOf + P extends keyof InstanceOf, >( table: T, fetch: (tbl: T) => Promise>>, diff --git a/src/db/index.ts b/src/db/index.ts index fbd74b55..a53a9c65 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -96,7 +96,7 @@ import unitType from './models/unitType'; import usageYear from './models/usageYear'; import workflowStatusOption from './models/workflowStatusOption'; import workflowStatusOptionStep from './models/workflowStatusOptionStep'; -import { Op, Cond } from './util/conditions'; +import { Cond, Op } from './util/conditions'; /** * Utilities that are frequently used, and should also be included as part of diff --git a/src/db/models/attachmentVersion.ts b/src/db/models/attachmentVersion.ts index dd70c89f..986096e2 100644 --- a/src/db/models/attachmentVersion.ts +++ b/src/db/models/attachmentVersion.ts @@ -1,9 +1,9 @@ import * as t from 'io-ts'; +import { brandedType } from '../../util/io-ts'; import type { Brand } from '../../util/types'; import { defineLegacyVersionedModel } from '../util/legacy-versioned-model'; import { ATTACHMENT_ID } from './attachment'; -import { brandedType } from '../../util/io-ts'; import { ANY_ATTACHMENT_VERSION_VALUE } from './json/attachment'; export type AttachmentVersionId = Brand< diff --git a/src/db/models/authGrant.ts b/src/db/models/authGrant.ts index 92ed093b..7a94a6a1 100644 --- a/src/db/models/authGrant.ts +++ b/src/db/models/authGrant.ts @@ -1,12 +1,12 @@ import * as t from 'io-ts'; import Knex = require('knex'); -import { InstanceOfModel, UserDataOfModel } from '../util/types'; -import { AUTH_TARGET_ID } from './authTarget'; -import { ParticipantId } from './participant'; -import { AUTH_GRANTEE_ID } from './authGrantee'; import { defineSequelizeModel } from '../util/sequelize-model'; +import type { InstanceOfModel, UserDataOfModel } from '../util/types'; import initAuthGrantLog from './authGrantLog'; +import { AUTH_GRANTEE_ID } from './authGrantee'; +import { AUTH_TARGET_ID } from './authTarget'; +import type { ParticipantId } from './participant'; const authGrantModel = (conn: Knex) => { const authGrantLog = initAuthGrantLog(conn); diff --git a/src/db/models/authGrantLog.ts b/src/db/models/authGrantLog.ts index fd0329f9..684bfe64 100644 --- a/src/db/models/authGrantLog.ts +++ b/src/db/models/authGrantLog.ts @@ -1,13 +1,13 @@ import * as t from 'io-ts'; -import { Brand } from '../../util/types'; import { brandedType } from '../../util/io-ts'; +import type { Brand } from '../../util/types'; import { defineSequelizeModel } from '../util/sequelize-model'; -import { AUTH_TARGET_ID } from './authTarget'; +import { DATE } from '../util/datatypes'; import { AUTH_GRANTEE_ID } from './authGrantee'; +import { AUTH_TARGET_ID } from './authTarget'; import { PARTICIPANT_ID } from './participant'; -import { DATE } from '../util/datatypes'; export type AuthGrantLogId = Brand< number, diff --git a/src/db/models/authGrantee.ts b/src/db/models/authGrantee.ts index d7d97eae..4d8928a8 100644 --- a/src/db/models/authGrantee.ts +++ b/src/db/models/authGrantee.ts @@ -1,8 +1,8 @@ import * as t from 'io-ts'; import { defineIDModel } from '../util/id-model'; -import type { Brand } from '../../util/types'; import { brandedType } from '../../util/io-ts'; +import type { Brand } from '../../util/types'; export type AuthGranteeId = Brand< number, diff --git a/src/db/models/authInvite.ts b/src/db/models/authInvite.ts index e59bc7e9..e387a289 100644 --- a/src/db/models/authInvite.ts +++ b/src/db/models/authInvite.ts @@ -1,8 +1,8 @@ import * as t from 'io-ts'; +import { defineSequelizeModel } from '../util/sequelize-model'; import { AUTH_TARGET_ID } from './authTarget'; import { PARTICIPANT_ID } from './participant'; -import { defineSequelizeModel } from '../util/sequelize-model'; export default defineSequelizeModel({ tableName: 'authInvite', diff --git a/src/db/models/authTarget.ts b/src/db/models/authTarget.ts index f4872402..4d7356dd 100644 --- a/src/db/models/authTarget.ts +++ b/src/db/models/authTarget.ts @@ -1,8 +1,8 @@ import * as t from 'io-ts'; import { defineIDModel } from '../util/id-model'; -import { Brand } from '../../util/types'; import { brandedType } from '../../util/io-ts'; +import type { Brand } from '../../util/types'; export type AuthTargetId = Brand< number, diff --git a/src/db/models/entityPrototype.ts b/src/db/models/entityPrototype.ts index 978dacfb..43c56b74 100644 --- a/src/db/models/entityPrototype.ts +++ b/src/db/models/entityPrototype.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { LOCALIZED_PLURAL_STRING, LOCALIZED_STRING } from '../util/datatypes'; import { defineIDModel } from '../util/id-model'; diff --git a/src/db/models/form.ts b/src/db/models/form.ts index f2499cb1..5e4b0c57 100644 --- a/src/db/models/form.ts +++ b/src/db/models/form.ts @@ -3,9 +3,9 @@ import * as t from 'io-ts'; import type { Brand } from '../../util/types'; import { defineVersionedModel } from '../util/versioned-model'; -import { OPERATION_ID } from './operation'; -import { FILE_REFERENCE } from '../util/datatypes'; import { brandedType } from '../../util/io-ts'; +import { FILE_REFERENCE } from '../util/datatypes'; +import { OPERATION_ID } from './operation'; export type FormId = Brand; diff --git a/src/db/models/governingEntity.ts b/src/db/models/governingEntity.ts index 3c15c721..e2773711 100644 --- a/src/db/models/governingEntity.ts +++ b/src/db/models/governingEntity.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { defineLegacyVersionedModel } from '../util/legacy-versioned-model'; import { ENTITY_PROTOTYPE_ID } from './entityPrototype'; import { PLAN_ID } from './plan'; diff --git a/src/db/models/operation.ts b/src/db/models/operation.ts index 3e68eb85..3d7f87d5 100644 --- a/src/db/models/operation.ts +++ b/src/db/models/operation.ts @@ -1,9 +1,9 @@ import * as t from 'io-ts'; +import { brandedType } from '../../util/io-ts'; import type { Brand } from '../../util/types'; -import { PLAN_ID } from './plan'; import { defineVersionedModel } from '../util/versioned-model'; -import { brandedType } from '../../util/io-ts'; +import { PLAN_ID } from './plan'; export type OperationId = Brand< number, diff --git a/src/db/models/participant.ts b/src/db/models/participant.ts index 30907b58..1d68914e 100644 --- a/src/db/models/participant.ts +++ b/src/db/models/participant.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { defineIDModel } from '../util/id-model'; export type ParticipantId = Brand< diff --git a/src/db/models/plan.ts b/src/db/models/plan.ts index 577eb3cb..16dab09b 100644 --- a/src/db/models/plan.ts +++ b/src/db/models/plan.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { defineIDModel } from '../util/id-model'; export type PlanId = Brand; diff --git a/src/db/models/projectVersion.ts b/src/db/models/projectVersion.ts index c71f5bd4..0a413b1e 100644 --- a/src/db/models/projectVersion.ts +++ b/src/db/models/projectVersion.ts @@ -3,8 +3,11 @@ import * as t from 'io-ts'; import { DATE } from '../util/datatypes'; import { defineIDModel } from '../util/id-model'; import { PARTICIPANT_ID } from './participant'; -import { PROJECT_ID } from './project'; -import { ProjectVersionId, PROJECT_VERSION_ID } from './project'; +import { + PROJECT_ID, + PROJECT_VERSION_ID, + type ProjectVersionId, +} from './project'; export { PROJECT_VERSION_ID }; export type { ProjectVersionId }; diff --git a/src/db/models/projectVersionAttachment.ts b/src/db/models/projectVersionAttachment.ts index 7c92b398..287683fb 100644 --- a/src/db/models/projectVersionAttachment.ts +++ b/src/db/models/projectVersionAttachment.ts @@ -1,9 +1,9 @@ import * as t from 'io-ts'; import { defineSequelizeModel } from '../util/sequelize-model'; -import { PROJECT_VERSION_ID } from './projectVersion'; import { ATTACHMENT_ID } from './attachment'; import { ATTACHMENT_VERSION_ID } from './attachmentVersion'; +import { PROJECT_VERSION_ID } from './projectVersion'; export const PROJECT_VERSION_ATTACHMENT_VALUE = t.type({ targets: t.union([ diff --git a/src/db/models/projectVersionField.ts b/src/db/models/projectVersionField.ts index a572faa0..d77ff89e 100644 --- a/src/db/models/projectVersionField.ts +++ b/src/db/models/projectVersionField.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { defineIDModel } from '../util/id-model'; import { CONDITION_FIELD_ID } from './conditionField'; import { PROJECT_VERSION_PLAN_ID } from './projectVersionPlan'; diff --git a/src/db/models/projectVersionPlan.ts b/src/db/models/projectVersionPlan.ts index e2108c98..aef7aed8 100644 --- a/src/db/models/projectVersionPlan.ts +++ b/src/db/models/projectVersionPlan.ts @@ -1,7 +1,7 @@ import * as t from 'io-ts'; import { brandedType } from '../../util/io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; import { defineIDModel } from '../util/id-model'; import { PLAN_ID } from './plan'; import { PROJECT_VERSION_ID } from './projectVersion'; diff --git a/src/db/models/reportingWindow.ts b/src/db/models/reportingWindow.ts index 36dbba9a..9c68d7ff 100644 --- a/src/db/models/reportingWindow.ts +++ b/src/db/models/reportingWindow.ts @@ -1,8 +1,8 @@ import * as t from 'io-ts'; +import { brandedType } from '../../util/io-ts'; import type { Brand } from '../../util/types'; import { defineVersionedModel } from '../util/versioned-model'; -import { brandedType } from '../../util/io-ts'; import { OPERATION_ID } from './operation'; export type ReportingWindowId = Brand< diff --git a/src/db/models/reportingWindowAssignment.ts b/src/db/models/reportingWindowAssignment.ts index c6d8b425..21b7f5f7 100644 --- a/src/db/models/reportingWindowAssignment.ts +++ b/src/db/models/reportingWindowAssignment.ts @@ -3,12 +3,12 @@ import * as t from 'io-ts'; import type { Brand } from '../../util/types'; import { defineVersionedModel } from '../util/versioned-model'; -import { OperationId, OPERATION_ID } from './operation'; +import { brandedType } from '../../util/io-ts'; import { FILE_REFERENCE } from '../util/datatypes'; +import { FORM_ID } from './form'; +import { OPERATION_ID, type OperationId } from './operation'; import operationCluster, { OPERATION_CLUSTER_ID } from './operationCluster'; import { REPORTING_WINDOW_ID } from './reportingWindow'; -import { FORM_ID } from './form'; -import { brandedType } from '../../util/io-ts'; export type ReportingWindowAssignmentId = Brand< number, diff --git a/src/db/util/conditions.ts b/src/db/util/conditions.ts index 175008cd..cc2a8031 100644 --- a/src/db/util/conditions.ts +++ b/src/db/util/conditions.ts @@ -255,10 +255,12 @@ export const prepareCondition = } } else { // Combine all property conditions in a single - const propertyConditions = Object.entries(condition) as [ - keyof InstanceData, - PropertyConditions.Condition - ][]; + const propertyConditions = Object.entries(condition) as Array< + [ + keyof InstanceData, + PropertyConditions.Condition, + ] + >; for (const [property, propertyCondition] of propertyConditions) { if (propertyCondition === undefined) { throw new Error( diff --git a/src/db/util/deferred.ts b/src/db/util/deferred.ts index c110e647..1af1d859 100644 --- a/src/db/util/deferred.ts +++ b/src/db/util/deferred.ts @@ -35,15 +35,15 @@ export type DeferredFetcherForModel> = */ export const createDeferredFetcher = < IDType extends number, - Instance extends { id: IDType } + Instance extends { id: IDType }, >( model: DeferrableModel ): DeferredFetcher => { const get = createGroupableAsyncFunction({ - run: async (calls: [IDType][]): Promise<(Instance | null)[]> => { + run: async (calls: Array<[IDType]>): Promise> => { const ids = [...new Set(calls.map(([id]) => id))]; const result = await model.getAll(ids); - return calls.map(([id]) => result.get(id) || null); + return calls.map(([id]) => result.get(id) ?? null); }, }); diff --git a/src/db/util/id-model.ts b/src/db/util/id-model.ts index a88e25cb..38fc4bb2 100644 --- a/src/db/util/id-model.ts +++ b/src/db/util/id-model.ts @@ -1,18 +1,18 @@ import Knex = require('knex'); -import { Model } from './raw-model'; -import { +import { Op } from './conditions'; +import type { Field, - FieldTypeOf, FieldDefinition, + FieldTypeOf, InstanceDataOf, } from './model-definition'; +import type { Model } from './raw-model'; import { - AdditionalFindArgsForSequelizeTables, defineSequelizeModel, - FieldsWithSequelize, + type AdditionalFindArgsForSequelizeTables, + type FieldsWithSequelize, } from './sequelize-model'; -import { Op } from './conditions'; /** * Given a definition of fields, and the name of an ID prop, @@ -20,7 +20,7 @@ import { Op } from './conditions'; */ type IdOf< F extends FieldDefinition, - IDField extends null | keyof F['generated'] + IDField extends null | keyof F['generated'], > = IDField extends string ? F['generated'] extends { [K in IDField]: Field; @@ -39,7 +39,10 @@ type IdOf< */ export interface ModelWithId< F extends FieldDefinition, - IDField extends null | keyof F['generated'] | keyof F['generatedCompositeKey'] + IDField extends + | null + | keyof F['generated'] + | keyof F['generatedCompositeKey'], > extends Model { readonly get: (id: IdOf) => Promise>; readonly getAll: ( @@ -52,7 +55,10 @@ export interface ModelWithId< */ export type ModelWithIdInitializer< F extends FieldDefinition, - IDField extends null | keyof F['generated'] | keyof F['generatedCompositeKey'] + IDField extends + | null + | keyof F['generated'] + | keyof F['generatedCompositeKey'], > = (conn: Knex) => ModelWithId; const hasField = ( @@ -74,7 +80,7 @@ export const defineIDModel = F extends FieldDefinition, IDField extends string & (keyof F['generated'] | keyof F['generatedCompositeKey']), - SoftDeletionEnabled extends boolean + SoftDeletionEnabled extends boolean, >(opts: { tableName: string; fields: F; diff --git a/src/db/util/legacy-versioned-model.ts b/src/db/util/legacy-versioned-model.ts index f560c14c..dd64ab35 100644 --- a/src/db/util/legacy-versioned-model.ts +++ b/src/db/util/legacy-versioned-model.ts @@ -1,12 +1,12 @@ import merge = require('lodash/merge'); import * as t from 'io-ts'; -import { FieldDefinition } from './model-definition'; import { - ModelWithIdInitializer, - FieldsWithId, defineIDModel, + type FieldsWithId, + type ModelWithIdInitializer, } from './id-model'; +import { type FieldDefinition } from './model-definition'; const VERSIONED_FIELDS = { nonNullWithDefault: { @@ -33,7 +33,7 @@ type ExtendedFields = F & typeof VERSIONED_FIELDS; export type FieldsWithVersioned< F extends FieldDefinition, - SoftDeletionEnabled extends boolean + SoftDeletionEnabled extends boolean, > = FieldsWithId & ExtendedFields; /** @@ -46,7 +46,7 @@ export const defineLegacyVersionedModel = < F extends FieldDefinition, IDField extends string & (keyof F['generated'] | keyof F['generatedCompositeKey']), - SoftDeletionEnabled extends boolean + SoftDeletionEnabled extends boolean, >(opts: { tableName: string; fields: F; diff --git a/src/db/util/model-definition.ts b/src/db/util/model-definition.ts index b4829d26..ac46a36a 100644 --- a/src/db/util/model-definition.ts +++ b/src/db/util/model-definition.ts @@ -2,10 +2,10 @@ /** * Use of `any` in this module is generally deliberate to help with generics */ -import * as t from 'io-ts'; +import type * as t from 'io-ts'; -import { Brand } from '../../util/types'; -import { Nullable } from './datatypes'; +import type { Brand } from '../../util/types'; +import type { Nullable } from './datatypes'; // Fields diff --git a/src/db/util/raw-model.ts b/src/db/util/raw-model.ts index 59f8de5e..dec163cb 100644 --- a/src/db/util/raw-model.ts +++ b/src/db/util/raw-model.ts @@ -3,12 +3,12 @@ * Use of `any` in this module is generally deliberate to help with generics */ import Knex = require('knex'); -import { Condition, prepareCondition } from './conditions'; +import { prepareCondition, type Condition } from './conditions'; -import { +import type { FieldDefinition, - UserDataOf, InstanceDataOf, + UserDataOf, } from './model-definition'; import { dataValidator } from './validation'; @@ -20,7 +20,7 @@ export type CreateFn = ( ) => Promise>; export type CreateManyFn = ( - data: UserDataOf[], + data: Array>, opts?: { trx?: Knex.Transaction; } @@ -103,7 +103,7 @@ export type InstanceDataOfModel> = M extends Model */ export type ModelInitializer< F extends FieldDefinition, - AdditionalFindArgs = {} + AdditionalFindArgs = {}, > = (conn: Knex) => Model; export const defineRawModel = @@ -130,18 +130,18 @@ export const defineRawModel = const tbl = () => conn(tableName); - const create: CreateFn = async (data, opts) => { - const builder = opts?.trx ? tbl().transacting(opts.trx) : tbl(); + const create: CreateFn = async (data, options) => { + const builder = options?.trx ? tbl().transacting(options.trx) : tbl(); const res = await builder.insert([data as any]).returning('*'); return validateAndFilter(res[0]); }; - const createMany: CreateManyFn = async (data, opts) => { + const createMany: CreateManyFn = async (data, options) => { if (!data.length) { return []; } - const builder = opts?.trx ? tbl().transacting(opts.trx) : tbl(); + const builder = options?.trx ? tbl().transacting(options.trx) : tbl(); const res = await builder.insert(data).returning('*'); return res.map(validateAndFilter); }; @@ -155,7 +155,7 @@ export const defineRawModel = trx, } = {}) => { const builder = trx ? tbl().transacting(trx) : tbl(); - const query = builder.where(prepareCondition(where || {})).select('*'); + const query = builder.where(prepareCondition(where ?? {})).select('*'); if (limit !== undefined && limit > 0) { query.limit(limit); diff --git a/src/db/util/sequelize-model.ts b/src/db/util/sequelize-model.ts index 1c259fb2..c21f1502 100644 --- a/src/db/util/sequelize-model.ts +++ b/src/db/util/sequelize-model.ts @@ -4,18 +4,18 @@ */ import merge = require('lodash/merge'); +import { Cond, Op } from './conditions'; import { DATE } from './datatypes'; +import { type FieldDefinition } from './model-definition'; import { defineRawModel, - ModelInitializer, - CreateFn, - CreateManyFn, - UpdateFn, - FindFn, - FindOneFn, + type CreateFn, + type CreateManyFn, + type FindFn, + type FindOneFn, + type ModelInitializer, + type UpdateFn, } from './raw-model'; -import { FieldDefinition } from './model-definition'; -import { Cond, Op } from './conditions'; type DeletedAtField = SoftDeletionEnabled extends true @@ -46,7 +46,7 @@ type SequelizeFields = typeof SEQUELIZE_FIELDS; export type FieldsWithSequelize< F extends FieldDefinition, - SoftDeletionEnabled extends boolean + SoftDeletionEnabled extends boolean, > = F & SequelizeFields & DeletedAtField; const genDeletedAtField =

( @@ -113,21 +113,20 @@ export const defineSequelizeModel = ) => { if (args?.includeDeleted || !opts.softDeletionEnabled) { return model.find(args); - } else { - return model.find({ - ...args, - where: { - [Cond.AND]: [ - { - deletedAt: { - [Op.IS_NULL]: true, - }, - }, - args?.where || {}, - ], - }, - }); } + return model.find({ + ...args, + where: { + [Cond.AND]: [ + { + deletedAt: { + [Op.IS_NULL]: true, + }, + }, + args?.where ?? {}, + ], + }, + }); }; const findOne: FindOneFn = ( @@ -135,21 +134,20 @@ export const defineSequelizeModel = ) => { if (args?.includeDeleted || !opts.softDeletionEnabled) { return model.findOne(args); - } else { - return model.findOne({ - ...args, - where: { - [Cond.AND]: [ - { - deletedAt: { - [Op.IS_NULL]: true, - }, - }, - args?.where || {}, - ], - }, - }); } + return model.findOne({ + ...args, + where: { + [Cond.AND]: [ + { + deletedAt: { + [Op.IS_NULL]: true, + }, + }, + args?.where || {}, + ], + }, + }); }; const create: CreateFn = (data, opts) => { diff --git a/src/db/util/types.ts b/src/db/util/types.ts index 512be4c0..338592ba 100644 --- a/src/db/util/types.ts +++ b/src/db/util/types.ts @@ -2,9 +2,9 @@ /** * Use of `any` in this module is generally deliberate to help with generics */ -import { Model } from './raw-model'; -import { InstanceDataOf, UserDataOf } from './model-definition'; -import { ModelWithId } from './id-model'; +import type { ModelWithId } from './id-model'; +import type { InstanceDataOf, UserDataOf } from './model-definition'; +import type { Model } from './raw-model'; export type AnyModel = Model | ModelWithId; diff --git a/src/db/util/validation.ts b/src/db/util/validation.ts index 024c885c..0da9c43d 100644 --- a/src/db/util/validation.ts +++ b/src/db/util/validation.ts @@ -3,19 +3,19 @@ * Use of `any` in this module is generally deliberate to help with generics */ import Knex = require('knex'); -import * as t from 'io-ts'; import { isRight } from 'fp-ts/lib/Either'; +import * as t from 'io-ts'; +import { ioTsErrorFormatter } from '../../util/io-ts'; import { nullable } from './datatypes'; +import { DataValidationError } from './errors'; import type { Field, FieldDefinition, FieldSet, InstanceDataOf, } from './model-definition'; -import { ModelInternals } from './raw-model'; -import { ioTsErrorFormatter } from '../../util/io-ts'; -import { DataValidationError } from './errors'; +import { type ModelInternals } from './raw-model'; /** * Given a model definition, @@ -42,11 +42,11 @@ export const validateModelAgainstTable = async ( // Get all column names from model, and check for duplicates const modelColumns = new Map(); - for (const group of Object.keys( - modelInternals.fields - ) as (keyof FieldDefinition)[]) { + for (const group of Object.keys(modelInternals.fields) as Array< + keyof FieldDefinition + >) { for (const [name, def] of Object.entries( - modelInternals.fields[group] || {} + modelInternals.fields[group] ?? {} )) { if (modelColumns.has(name)) { throw new Error( @@ -134,20 +134,19 @@ export const dataValidator = ( } if (isNullable) { return t.exact(nullable(props)); - } else { - return t.exact(t.type(props)); } + return t.exact(t.type(props)); }; const instanceValidator = t.intersection([ t.intersection([ - fieldSetValidator(fields.generated || {}, false), - fieldSetValidator(fields.generatedCompositeKey || {}, false), + fieldSetValidator(fields.generated ?? {}, false), + fieldSetValidator(fields.generatedCompositeKey ?? {}, false), ]), - fieldSetValidator(fields.nonNullWithDefault || {}, false), - fieldSetValidator(fields.required || {}, false), - fieldSetValidator(fields.optional || {}, true), - fieldSetValidator(fields.accidentallyOptional || {}, true), + fieldSetValidator(fields.nonNullWithDefault ?? {}, false), + fieldSetValidator(fields.required ?? {}, false), + fieldSetValidator(fields.optional ?? {}, true), + fieldSetValidator(fields.accidentallyOptional ?? {}, true), ]) as t.Type as t.Type; const validateAndFilter = ( @@ -163,14 +162,13 @@ export const dataValidator = ( enumerable: false, }); return val; - } else { - const errors = ioTsErrorFormatter(decoded); - throw new DataValidationError({ - errors, - identifier: genIdentifier(), - data: val, - }); } + const errors = ioTsErrorFormatter(decoded); + throw new DataValidationError({ + errors, + identifier: genIdentifier(), + data: val, + }); }; return { diff --git a/src/db/util/versioned-model.ts b/src/db/util/versioned-model.ts index c974b887..9d826a49 100644 --- a/src/db/util/versioned-model.ts +++ b/src/db/util/versioned-model.ts @@ -6,15 +6,19 @@ import Knex = require('knex'); import merge = require('lodash/merge'); import * as t from 'io-ts'; -import { Brand } from '../../util/types'; +import type { Brand } from '../../util/types'; +import { PARTICIPANT_ID, type ParticipantId } from '../models/participant'; +import { Op } from './conditions'; import { ConcurrentModificationError } from './errors'; -import { defineSequelizeModel } from './sequelize-model'; -import { ParticipantId, PARTICIPANT_ID } from '../models/participant'; -import { FieldDefinition, UserDataOf } from './model-definition'; import { defineIDModel } from './id-model'; -import { InstanceDataOfModel, ModelInternals, WhereCond } from './raw-model'; -import { Op } from './conditions'; +import type { FieldDefinition, UserDataOf } from './model-definition'; +import type { + InstanceDataOfModel, + ModelInternals, + WhereCond, +} from './raw-model'; +import { defineSequelizeModel } from './sequelize-model'; type LookupColumnDefinition = Pick; @@ -41,7 +45,7 @@ type VersionedInstanceWithAllData = { type RootColumnDefinition< IDType, - LookupColumns extends LookupColumnDefinition + LookupColumns extends LookupColumnDefinition, > = LookupColumns & { generated: { id: { @@ -54,7 +58,7 @@ type RootColumnDefinition< export type VersionedModel< IDType, Data, - LookupColumns extends LookupColumnDefinition + LookupColumns extends LookupColumnDefinition, > = { _internals: { type: 'versioned-model'; @@ -105,7 +109,7 @@ export type VersionedModel< type VersionedModelInitializer< IDType, Data, - LookupColumns extends LookupColumnDefinition + LookupColumns extends LookupColumnDefinition, > = (conn: Knex) => VersionedModel; export type InstanceOfVersionedModel> = @@ -124,7 +128,7 @@ export const defineVersionedModel = < IDType extends Brand, Data, - LookupColumns extends LookupColumnDefinition + LookupColumns extends LookupColumnDefinition, >(opts: { tableBaseName: string; idType: t.Type; @@ -189,9 +193,8 @@ export const defineVersionedModel = genIdentifier: (data) => { if (hasRootAndVersion(data)) { return `${name}Version ${data.root}-v${data.version}`; - } else { - return `unknown ${name}Version`; } + return `unknown ${name}Version`; }, })(conn); @@ -207,7 +210,7 @@ export const defineVersionedModel = const instance: VersionedInstance = { id, version: version.version, - modifiedBy: version.modifiedBy || null, + modifiedBy: version.modifiedBy, modifiedAt: version.updatedAt, data, update: (data, modifiedBy) => @@ -241,7 +244,7 @@ export const defineVersionedModel = const version = await versionModel.create({ root: root.id, version: 1, - modifiedBy: modifiedBy || undefined, + modifiedBy: modifiedBy ?? undefined, isLatest: true, data, }); @@ -293,13 +296,12 @@ export const defineVersionedModel = const [root, version] = await Promise.all([getRoot, getVersion]); if (!root || !version) { return null; - } else { - return createInstance({ - root, - version, - data: version.data, - }); } + return createInstance({ + root, + version, + data: version.data, + }); }, getAll: async (ids) => { const items = await result.findAll({ @@ -328,32 +330,31 @@ export const defineVersionedModel = if (!root || !versions) { // TODO: log invalid data return null; - } else { - versions.sort((a, b) => a.version - b.version); - const processedVersions: Array> = []; - let currentVersion: null | number = null; - for (const v of versions) { - if (v.isLatest) { - currentVersion = v.version; - } - processedVersions.push({ - version: v.version, - modifiedBy: v.modifiedBy || null, - modifiedAt: v.updatedAt, - data: v.data, - }); - } - if (!currentVersion) { - throw new Error( - `Could not find latest version of ${name} with id ${id}` - ); + } + versions.sort((a, b) => a.version - b.version); + const processedVersions: Array> = []; + let currentVersion: null | number = null; + for (const v of versions) { + if (v.isLatest) { + currentVersion = v.version; } - return { - id: root.id, - currentVersion, - versions: processedVersions, - }; + processedVersions.push({ + version: v.version, + modifiedBy: v.modifiedBy, + modifiedAt: v.updatedAt, + data: v.data, + }); } + if (!currentVersion) { + throw new Error( + `Could not find latest version of ${name} with id ${id}` + ); + } + return { + id: root.id, + currentVersion, + versions: processedVersions, + }; }, permanentlyDelete: async (id) => { const root = rootModel.findOne({ @@ -410,7 +411,7 @@ export const defineVersionedModel = isLatest: false, }, where: { - root: args.id, + root: id, version: prev.version, }, trx, @@ -421,7 +422,7 @@ export const defineVersionedModel = { root: id, version: prev.version + 1, - modifiedBy: modifiedBy || undefined, + modifiedBy: modifiedBy ?? undefined, isLatest: true, data: data, }, @@ -429,13 +430,13 @@ export const defineVersionedModel = trx, } ) - .catch((err) => { - if (err && err.name === 'SequelizeUniqueConstraintError') { + .catch((error) => { + if (error && error.name === 'SequelizeUniqueConstraintError') { throw new ConcurrentModificationError( 'New version already created' ); } else { - throw err; + throw error; } }); // Update lookup data @@ -443,7 +444,7 @@ export const defineVersionedModel = values: lookupData as any, trx, where: { - id: args.id, + id, } as any, }); return createInstance({ root: { id }, data, version }); diff --git a/src/lib/context.ts b/src/lib/context.ts index 5a6c4983..517e7716 100644 --- a/src/lib/context.ts +++ b/src/lib/context.ts @@ -1,6 +1,6 @@ -import { Database } from '../db/type'; -import { Config } from '../lib/config'; -import { SharedLogContext, SharedLogData } from '../lib/logging'; +import type { Database } from '../db/type'; +import type { Config } from '../lib/config'; +import type { SharedLogContext, SharedLogData } from '../lib/logging'; /** * An object that encapsulates all the context that may need to be passed to diff --git a/src/lib/data/attachments.ts b/src/lib/data/attachments.ts index 85399696..c1dea86d 100644 --- a/src/lib/data/attachments.ts +++ b/src/lib/data/attachments.ts @@ -1,34 +1,34 @@ import { isLeft } from 'fp-ts/lib/Either'; import * as t from 'io-ts'; import { findAndOrganizeObjectsByUniqueProperty } from '../../db/fetching'; -import { AttachmentId } from '../../db/models/attachment'; -import { +import type { AttachmentId } from '../../db/models/attachment'; +import type { AttachmentPrototypeId, AttachmentType, } from '../../db/models/attachmentPrototype'; -import { GoverningEntityId } from '../../db/models/governingEntity'; +import type { GoverningEntityId } from '../../db/models/governingEntity'; import { ATTACHMENT_VERSION_VALUE } from '../../db/models/json/attachment'; import type { CaseloadOrIndicatorMetricsValues } from '../../db/models/json/indicatorsAndCaseloads'; import { LOCATION_ID } from '../../db/models/location'; -import { PlanId } from '../../db/models/plan'; -import { PlanEntityId } from '../../db/models/planEntity'; -import { Database } from '../../db/type'; +import type { PlanId } from '../../db/models/plan'; +import type { PlanEntityId } from '../../db/models/planEntity'; +import type { Database } from '../../db/type'; import { Op } from '../../db/util/conditions'; -import { InstanceDataOfModel } from '../../db/util/raw-model'; +import type { InstanceDataOfModel } from '../../db/util/raw-model'; import { - AnnotatedMap, cleanNumberVal, getRequiredData, getRequiredDataByValue, toCamelCase, + type AnnotatedMap, } from '../../util'; import { EMPTY_TUPLE, ioTsErrorFormatter } from '../../util/io-ts'; import { createBrandedValue } from '../../util/types'; -import { SharedLogContext } from '../logging'; -import { MapOfGoverningEntities } from './governingEntities'; +import type { SharedLogContext } from '../logging'; +import type { MapOfGoverningEntities } from './governingEntities'; import { calculateReflectiveTransitiveEntitySupport, - ValidatedPlanEntities, + type ValidatedPlanEntities, } from './planEntities'; import isEqual = require('lodash/isEqual'); @@ -471,7 +471,7 @@ const getDisaggregations = ({ throw new Error('Unexpected number of datamatrix rows'); } - for (let lIndex = 0; lIndex < locations.length; lIndex++) { + for (const [lIndex, location] of locations.entries()) { const dmRow = disaggregated.dataMatrix[lIndex + 1]; if (dmRow.length !== categories.length * allMetrics.length) { throw new Error('Unexpected number of datamatrix columns'); @@ -485,16 +485,15 @@ const getDisaggregations = ({ ) { const dataMatrix: ExtendedDisaggregationData[number]['dataMatrix'] = []; - for (let mIndex = 0; mIndex < metrics.length; mIndex++) { - const dmCell = - dmRow[cIndex * allMetrics.length + metrics[mIndex].offset]; + for (const metric of metrics) { + const dmCell = dmRow[cIndex * allMetrics.length + metric.offset]; const value = cleanNumberVal(dmCell); dataMatrix.push({ metricType: !specificMetricTypes?.length - ? metrics[mIndex].type - : toCamelCase(metrics[mIndex].name), + ? metric.type + : toCamelCase(metric.name), lIndex, cIndex, value: value !== null && !Number.isNaN(value) ? value : null, @@ -503,7 +502,7 @@ const getDisaggregations = ({ if (dataMatrix.length) { disaggregationData.push({ - locationId: createBrandedValue(locations[lIndex]), + locationId: createBrandedValue(location), categoryLabel: categories[cIndex].label, categoryName: categories[cIndex].name, dataMatrix, diff --git a/src/lib/data/globalClusters.ts b/src/lib/data/globalClusters.ts index 2fdc4ba0..0dd2e7b0 100644 --- a/src/lib/data/globalClusters.ts +++ b/src/lib/data/globalClusters.ts @@ -1,5 +1,5 @@ -import { Database } from '../../db'; -import { PlanId } from '../../db/models/plan'; +import type { Database } from '../../db'; +import type { PlanId } from '../../db/models/plan'; import { Op } from '../../db/util/conditions'; /** diff --git a/src/lib/data/governingEntities.ts b/src/lib/data/governingEntities.ts index dbed87b8..ee272df9 100644 --- a/src/lib/data/governingEntities.ts +++ b/src/lib/data/governingEntities.ts @@ -1,11 +1,11 @@ import { findAndOrganizeObjectsByUniqueProperty } from '../../db/fetching'; -import { EntityPrototypeId } from '../../db/models/entityPrototype'; -import { GoverningEntityId } from '../../db/models/governingEntity'; -import { PlanId } from '../../db/models/plan'; -import { Database } from '../../db/type'; +import type { EntityPrototypeId } from '../../db/models/entityPrototype'; +import type { GoverningEntityId } from '../../db/models/governingEntity'; +import type { PlanId } from '../../db/models/plan'; +import type { Database } from '../../db/type'; import { Op } from '../../db/util/conditions'; -import { InstanceDataOfModel } from '../../db/util/raw-model'; -import { annotatedMap, AnnotatedMap, getRequiredData } from '../../util'; +import type { InstanceDataOfModel } from '../../db/util/raw-model'; +import { annotatedMap, getRequiredData, type AnnotatedMap } from '../../util'; /** * A map from governing entity ids to an object that contains both the diff --git a/src/lib/data/locations.ts b/src/lib/data/locations.ts index 8273d16b..96cf0c35 100644 --- a/src/lib/data/locations.ts +++ b/src/lib/data/locations.ts @@ -32,7 +32,7 @@ export const getPlanCountries = async ( export const getAllCountryLocations = async ( database: Database, countryId: LocationId -): Promise[]>> => { +): Promise>>> => { const country = await database.location.findOne({ where: { id: countryId, diff --git a/src/lib/data/planEntities.ts b/src/lib/data/planEntities.ts index dbbfc1ed..e47f1cb7 100644 --- a/src/lib/data/planEntities.ts +++ b/src/lib/data/planEntities.ts @@ -1,19 +1,19 @@ import { findAndOrganizeObjectsByUniqueProperty } from '../../db/fetching'; -import { EntityPrototypeId } from '../../db/models/entityPrototype'; -import { GoverningEntityId } from '../../db/models/governingEntity'; -import { PlanId } from '../../db/models/plan'; -import { PlanEntityId } from '../../db/models/planEntity'; -import { Database } from '../../db/type'; +import type { EntityPrototypeId } from '../../db/models/entityPrototype'; +import type { GoverningEntityId } from '../../db/models/governingEntity'; +import type { PlanId } from '../../db/models/plan'; +import type { PlanEntityId } from '../../db/models/planEntity'; +import type { Database } from '../../db/type'; import { Op } from '../../db/util/conditions'; -import { InstanceDataOfModel } from '../../db/util/raw-model'; +import type { InstanceDataOfModel } from '../../db/util/raw-model'; import { - isDefined, annotatedMap, - AnnotatedMap, getRequiredData, getRequiredDataByValue, + isDefined, + type AnnotatedMap, } from '../../util'; -import { MapOfGoverningEntities } from './governingEntities'; +import type { MapOfGoverningEntities } from './governingEntities'; export type ValidatedPlanEntity = { id: PlanEntityId; @@ -130,7 +130,7 @@ export const getAndValidateAllPlanEntities = async ({ customRef: refAndType.customRef, description: null, supports: [], - governingEntity: eaByChildId.get(planEntity.id)?.parentId || null, + governingEntity: eaByChildId.get(planEntity.id)?.parentId ?? null, }; // Use entity details if possible @@ -181,7 +181,7 @@ export const calculateReflectiveTransitiveEntitySupport = ({ planEntity: ValidatedPlanEntity; planEntities: ValidatedPlanEntities; }): Set => { - const supportsEntitiesIDs: Set = new Set(); + const supportsEntitiesIDs = new Set(); const entities = [planEntity]; let entity: ValidatedPlanEntity | undefined; while ((entity = entities.pop())) { diff --git a/src/lib/data/projects.ts b/src/lib/data/projects.ts index 2a557d1a..348306e6 100644 --- a/src/lib/data/projects.ts +++ b/src/lib/data/projects.ts @@ -1,15 +1,15 @@ -import { GoverningEntityId } from '../../db/models/governingEntity'; -import { OrganizationId } from '../../db/models/organization'; import { findAndOrganizeObjectsByUniqueProperty } from '../../db/fetching'; -import { PlanId } from '../../db/models/plan'; -import { ProjectId } from '../../db/models/project'; -import { Database } from '../../db/type'; -import { InstanceOfModel } from '../../db/util/types'; -import { getRequiredData, groupObjectsByProperty } from '../../util'; +import type { GlobalClusterId } from '../../db/models/globalCluster'; +import type { GoverningEntityId } from '../../db/models/governingEntity'; +import type { OrganizationId } from '../../db/models/organization'; +import type { PlanId } from '../../db/models/plan'; +import type { ProjectId } from '../../db/models/project'; +import type { Database } from '../../db/type'; import { Op } from '../../db/util/conditions'; -import { GlobalClusterId } from '../../db/models/globalCluster'; +import type { InstanceOfModel } from '../../db/util/types'; +import { getRequiredData, groupObjectsByProperty } from '../../util'; import { createBrandedValue } from '../../util/types'; -import { SharedLogContext } from '../logging'; +import type { SharedLogContext } from '../logging'; import isEqual = require('lodash/isEqual'); /** @@ -122,7 +122,7 @@ export async function getAllProjectsForPlan({ export async function getOrganizationIDsForProjects< Data extends { projectVersion: Pick; - } + }, >({ database, projects, @@ -149,7 +149,7 @@ export async function getOrganizationIDsForProjects< for (const [projectId, projectData] of projects) { const projectVersionId = projectData.projectVersion.id; - const pvos = groupedPVOs.get(projectVersionId) || []; + const pvos = groupedPVOs.get(projectVersionId) ?? []; const organizationIds = new Set([...pvos].map((o) => o.organizationId)); result.set(projectId, organizationIds); } @@ -160,7 +160,7 @@ export async function getOrganizationIDsForProjects< export async function getGoverningEntityIDsForProjects< Data extends { projectVersion: Pick; - } + }, >({ database, projects, @@ -187,7 +187,7 @@ export async function getGoverningEntityIDsForProjects< for (const [projectId, projectData] of projects) { const projectVersionId = projectData.projectVersion.id; - const pvges = groupedPVGEs.get(projectVersionId) || []; + const pvges = groupedPVGEs.get(projectVersionId) ?? []; const governingEntityIds = new Set( [...pvges].map((pvge) => pvge.governingEntityId) ); @@ -200,7 +200,7 @@ export async function getGoverningEntityIDsForProjects< export const getConditionFieldsForProjects = async < Data extends { projectVersionPlan: Pick; - } + }, >({ database, projects, @@ -233,7 +233,7 @@ export const getConditionFieldsForProjects = async < for (const [projectId, projectData] of projects) { const projectVersionPlanId = projectData.projectVersionPlan.id; const conditionFields = groupedConditionFields.get(projectVersionPlanId); - result.set(projectId, conditionFields || new Set()); + result.set(projectId, conditionFields ?? new Set()); } return result; @@ -252,7 +252,7 @@ export const getProjectBudgetsByOrgAndCluster = async < ProjectData['projectVersion'], 'id' | 'currentRequestedFunds' >; - } + }, >({ database, projects, @@ -273,7 +273,7 @@ export const getProjectBudgetsByOrgAndCluster = async < * to for example calculate a plan's overall requirements. */ ignoreInconsistentBudgets?: true; -}): Promise>> => { +}): Promise> => { const projectVersionIds = [...projects.values()].map( (p) => p.projectVersion.id ); @@ -318,7 +318,7 @@ export const getProjectBudgetsByOrgAndCluster = async < 'budgetSegmentBreakdownId' ); - const result = new Map>(); + const result = new Map(); const pOrgs = await database.projectVersionOrganization.find({ where: { @@ -349,7 +349,7 @@ export const getProjectBudgetsByOrgAndCluster = async < continue; } - const breakdowns = breakdownsBySegment.get(segment.id) || new Set(); + const breakdowns = breakdownsBySegment.get(segment.id) ?? new Set(); const projectResult: ProjectBudgetSegmentBreakdown[] = []; @@ -359,9 +359,7 @@ export const getProjectBudgetsByOrgAndCluster = async < const amountUSD = typeof content.amount === 'string' ? parseInt(content.amount) - : content.amount === null - ? 0 - : content.amount; + : content.amount ?? 0; // Determine all entities associated with the breakdown @@ -369,7 +367,7 @@ export const getProjectBudgetsByOrgAndCluster = async < let governingEntity: GoverningEntityId | null = null; let organization: OrganizationId | null = null; - const entities = entitiesByBreakdown.get(b.id) || new Set(); + const entities = entitiesByBreakdown.get(b.id) ?? new Set(); for (const e of entities) { if (e.objectType === 'globalCluster') { globalCluster = createBrandedValue(e.objectId); @@ -432,7 +430,7 @@ export const getProjectBudgetsByOrgAndCluster = async < // Ensure that the organization IDs match the projectVersionOrganization const budgetOrgIDs = new Set(projectResult.map((i) => i.organization)); const prvOrgIDs = new Set( - [...(orgsByProjectVersion.get(p.projectVersion.id) || [])].map( + [...(orgsByProjectVersion.get(p.projectVersion.id) ?? [])].map( (pvo) => pvo.organizationId ) ); diff --git a/src/util/async.ts b/src/util/async.ts index 0e81249b..24465329 100644 --- a/src/util/async.ts +++ b/src/util/async.ts @@ -8,7 +8,7 @@ */ export const createGroupableAsyncFunction = < Args extends readonly any[], - Result + Result, >(opts: { /** * This function should asynchronously return an array of results where each @@ -39,13 +39,13 @@ export const createGroupableAsyncFunction = < if (result.length !== cs.length) { throw new Error('Received unexpected number of results'); } - for (let i = 0; i < cs.length; i++) { - cs[i].resolve(result[i]); + for (const [i, c] of cs.entries()) { + c.resolve(result[i]); } - } catch (err) { + } catch (error) { for (const call of cs) { - if (err instanceof Error) { - call.reject(err); + if (error instanceof Error) { + call.reject(error); } } } diff --git a/src/util/index.ts b/src/util/index.ts index c2b6aff8..39f38d01 100644 --- a/src/util/index.ts +++ b/src/util/index.ts @@ -8,7 +8,7 @@ export const isDefined = (v: T | null | undefined): v is T => export const definedEntries = (o: { [key in K]?: V; }): Array<[K, V]> => - [...(Object.entries(o) as [K, V][])].filter(([_k, v]) => isDefined(v)); + [...(Object.entries(o) as Array<[K, V]>)].filter(([_k, v]) => isDefined(v)); export const delay = (ms: number): Promise => new Promise((resolve) => setTimeout(resolve, ms)); @@ -194,7 +194,7 @@ export const mapObjectEntries = ( map: (v: V1) => V2 ): { [key in K]: V2 } => { return Object.fromEntries( - (Object.entries(obj) as [K, V1][]).map(([k, v]) => [k, map(v)]) + (Object.entries(obj) as Array<[K, V1]>).map(([k, v]) => [k, map(v)]) ) as { [key in K]: V2 }; }; @@ -237,7 +237,7 @@ export const getRequiredData = < E extends { [key in P]: K; }, - P extends keyof E + P extends keyof E, >( map: AnnotatedMap, entity: E, @@ -277,7 +277,7 @@ export const cleanNumberVal = (value: number | string | null): number | null => typeof value === 'number' ? value : typeof value === 'string' && value !== '' - ? parseFloat(value.trim().replace(/,/g, '')) + ? parseFloat(value.trim().replaceAll(',', '')) : null; export const toCamelCase = (originalString: string) => { diff --git a/src/util/io-ts.ts b/src/util/io-ts.ts index e1897744..a7366fe9 100644 --- a/src/util/io-ts.ts +++ b/src/util/io-ts.ts @@ -1,7 +1,7 @@ +import { isRight, left, type Left } from 'fp-ts/lib/Either'; import * as t from 'io-ts'; -import { isRight, left, Left } from 'fp-ts/lib/Either'; -import { Brand } from './types'; +import type { Brand } from './types'; /** * Create an `io-ts` type from a branded type definition and base `io-ts` type. diff --git a/yarn.lock b/yarn.lock index fcf9f529..9221a279 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,22 +7,44 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@eslint-community/eslint-utils@^4.2.0": +"@babel/code-frame@^7.0.0": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" - integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" + integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -34,17 +56,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" + integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -53,10 +75,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -87,10 +109,10 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@types/json-schema@^7.0.9": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@^7.0.12": + version "7.0.14" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" + integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== "@types/lodash@^4.14.194": version "4.14.194" @@ -110,108 +132,123 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.2.tgz#31c249c136c3f9b35d4b60fb8e50e01a1f0cc9a5" integrity sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw== -"@types/node@^18.16.19": - version "18.16.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" - integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@typescript-eslint/eslint-plugin@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz#a1a5290cf33863b4db3fb79350b3c5275a7b1223" - integrity sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/type-utils" "5.61.0" - "@typescript-eslint/utils" "5.61.0" +"@types/node@^20.8.10": + version "20.8.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e" + integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w== + dependencies: + undici-types "~5.26.4" + +"@types/normalize-package-data@^2.4.0": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c" + integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== + +"@types/semver@^7.5.0": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" + integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== + +"@typescript-eslint/eslint-plugin@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz#d8ce497dc0ed42066e195c8ecc40d45c7b1254f4" + integrity sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.9.1" + "@typescript-eslint/type-utils" "6.9.1" + "@typescript-eslint/utils" "6.9.1" + "@typescript-eslint/visitor-keys" "6.9.1" debug "^4.3.4" graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.61.0.tgz#7fbe3e2951904bb843f8932ebedd6e0635bffb70" - integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg== - dependencies: - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.1.tgz#4f685f672f8b9580beb38d5fb99d52fc3e34f7a3" + integrity sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg== + dependencies: + "@typescript-eslint/scope-manager" "6.9.1" + "@typescript-eslint/types" "6.9.1" + "@typescript-eslint/typescript-estree" "6.9.1" + "@typescript-eslint/visitor-keys" "6.9.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz#b670006d069c9abe6415c41f754b1b5d949ef2b2" - integrity sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw== +"@typescript-eslint/scope-manager@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz#e96afeb9a68ad1cd816dba233351f61e13956b75" + integrity sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg== dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "6.9.1" + "@typescript-eslint/visitor-keys" "6.9.1" -"@typescript-eslint/type-utils@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz#e90799eb2045c4435ea8378cb31cd8a9fddca47a" - integrity sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg== +"@typescript-eslint/type-utils@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz#efd5db20ed35a74d3c7d8fba51b830ecba09ce32" + integrity sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg== dependencies: - "@typescript-eslint/typescript-estree" "5.61.0" - "@typescript-eslint/utils" "5.61.0" + "@typescript-eslint/typescript-estree" "6.9.1" + "@typescript-eslint/utils" "6.9.1" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" - integrity sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ== +"@typescript-eslint/types@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.1.tgz#a6cfc20db0fcedcb2f397ea728ef583e0ee72459" + integrity sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ== -"@typescript-eslint/typescript-estree@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz#4c7caca84ce95bb41aa585d46a764bcc050b92f3" - integrity sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw== +"@typescript-eslint/typescript-estree@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz#8c77910a49a04f0607ba94d78772da07dab275ad" + integrity sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw== dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "6.9.1" + "@typescript-eslint/visitor-keys" "6.9.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.1.tgz#763da41281ef0d16974517b5f0d02d85897a1c1e" + integrity sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.9.1" + "@typescript-eslint/types" "6.9.1" + "@typescript-eslint/typescript-estree" "6.9.1" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz#6753a9225a0ba00459b15d6456b9c2780b66707d" + integrity sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw== + dependencies: + "@typescript-eslint/types" "6.9.1" + eslint-visitor-keys "^3.4.1" -"@typescript-eslint/utils@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" - integrity sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.61.0": - version "5.61.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz#c79414fa42158fd23bd2bb70952dc5cdbb298140" - integrity sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg== - dependencies: - "@typescript-eslint/types" "5.61.0" - eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@unocha/hpc-repo-tools@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@unocha/hpc-repo-tools/-/hpc-repo-tools-3.0.1.tgz#180da5402e3665180d575d1005853bca739890c2" - integrity sha512-HNoxiyYAz9PuLNrBOXBSZSbeLgNrGgeMajobHpzyFybEJcdSWUXoUKcIOIlbx51OuggPvtW1Jb+qflK2zCxR1Q== +"@unocha/hpc-repo-tools@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@unocha/hpc-repo-tools/-/hpc-repo-tools-4.0.0.tgz#3b1cc39552996fcee1f2e6de71e8c0884dc26ef5" + integrity sha512-BDAd0blUXuBxHoVTC9rHCII/dpPgPLMdTnyW98d7+CjRiat+2TUAGk2z9/1pu+lq319lKvhWpodKKL1nnFWCMg== dependencies: - "@typescript-eslint/eslint-plugin" "5.61.0" - "@typescript-eslint/parser" "5.61.0" - eslint-config-prettier "8.8.0" + "@typescript-eslint/eslint-plugin" "6.9.1" + "@typescript-eslint/parser" "6.9.1" + eslint-config-prettier "9.0.0" + eslint-plugin-unicorn "49.0.0" + prettier-plugin-organize-imports "3.2.3" acorn-jsx@^5.3.2: version "5.3.2" @@ -223,15 +260,7 @@ acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -241,14 +270,14 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== dependencies: - type-fest "^0.21.3" + type-fest "^1.0.2" -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -258,7 +287,14 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -270,6 +306,11 @@ ansi-styles@^6.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -315,11 +356,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -384,6 +420,11 @@ buffer-writer@2.0.0: resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -404,10 +445,19 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" - integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== +chalk@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" chalk@^4.0.0: version "4.1.1" @@ -417,6 +467,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +ci-info@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -427,25 +482,19 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== dependencies: - restore-cursor "^3.1.0" + escape-string-regexp "^1.0.5" -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== +cli-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" + restore-cursor "^4.0.0" cli-truncate@^3.1.0: version "3.1.0" @@ -463,6 +512,13 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -470,6 +526,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -480,7 +541,7 @@ colorette@1.1.0: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== -colorette@^2.0.19: +colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -492,10 +553,10 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== commander@^5.1.0: version "5.1.0" @@ -533,6 +594,13 @@ debug@4.1.1: dependencies: ms "^2.1.1" +debug@4.3.4, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -554,13 +622,6 @@ debug@^4.3.2: dependencies: ms "2.1.2" -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - decode-uri-component@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -617,38 +678,62 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-config-prettier@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + +eslint-plugin-unicorn@49.0.0: + version "49.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-49.0.0.tgz#4449ea954d7e1455eec8518f9417d7021b245fa8" + integrity sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + "@eslint-community/eslint-utils" "^4.4.0" + ci-info "^3.8.0" + clean-regexp "^1.0.0" + esquery "^1.5.0" + indent-string "^4.0.0" + is-builtin-module "^3.2.1" + jsesc "^3.0.2" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.27" + regjsparser "^0.10.0" + semver "^7.5.4" + strip-indent "^3.0.0" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -663,27 +748,33 @@ eslint-visitor-keys@^3.4.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.44.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.52.0: + version "8.52.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" + integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" - "@humanwhocodes/config-array" "^0.11.10" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.2" + "@eslint/js" "8.52.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -693,7 +784,6 @@ eslint@^8.44.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -705,7 +795,6 @@ eslint@^8.44.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" esm@^3.2.25: @@ -722,7 +811,16 @@ espree@^9.6.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esquery@^1.4.2: +espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2, esquery@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -736,11 +834,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" @@ -751,19 +844,24 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +execa@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" + get-stream "^8.0.1" + human-signals "^5.0.0" is-stream "^3.0.0" merge-stream "^2.0.0" npm-run-path "^5.1.0" onetime "^6.0.0" - signal-exit "^3.0.7" + signal-exit "^4.1.0" strip-final-newline "^3.0.0" expand-brackets@^2.1.4: @@ -877,6 +975,14 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -967,10 +1073,15 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -1052,6 +1163,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -1095,6 +1211,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -1102,10 +1225,15 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== husky@^8.0.3: version "8.0.3" @@ -1117,7 +1245,12 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1185,11 +1318,30 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -1246,11 +1398,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-fullwidth-code-point@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" @@ -1340,6 +1487,11 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1347,6 +1499,21 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1429,38 +1596,45 @@ lilconfig@2.1.0: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +lint-staged@^15.0.2: + version "15.0.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.0.2.tgz#abef713182ec2770143e40a5d6d0130fe61ed442" + integrity sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw== dependencies: - chalk "5.2.0" - cli-truncate "^3.1.0" - commander "^10.0.0" - debug "^4.3.4" - execa "^7.0.0" + chalk "5.3.0" + commander "11.1.0" + debug "4.3.4" + execa "8.0.1" lilconfig "2.1.0" - listr2 "^5.0.7" - micromatch "^4.0.5" - normalize-path "^3.0.0" - object-inspect "^1.12.3" - pidtree "^0.6.0" - string-argv "^0.3.1" - yaml "^2.2.2" - -listr2@^5.0.7: - version "5.0.8" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" - integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.19" - log-update "^4.0.0" - p-map "^4.0.0" + listr2 "7.0.2" + micromatch "4.0.5" + pidtree "0.6.0" + string-argv "0.3.2" + yaml "2.3.3" + +listr2@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" + integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^5.0.1" rfdc "^1.3.0" - rxjs "^7.8.0" - through "^2.3.8" - wrap-ansi "^7.0.0" + wrap-ansi "^8.1.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" @@ -1479,15 +1653,16 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== +log-update@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" + integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" + ansi-escapes "^5.0.0" + cli-cursor "^4.0.0" + slice-ansi "^5.0.0" + strip-ansi "^7.0.1" + wrap-ansi "^8.0.1" lru-cache@^6.0.0: version "6.0.0" @@ -1525,6 +1700,14 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromatch@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + micromatch@^3.0.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -1552,14 +1735,6 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - mime-db@1.50.0: version "1.50.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" @@ -1582,6 +1757,11 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -1634,11 +1814,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -1651,10 +1826,15 @@ node-fetch@2.6.9: dependencies: whatwg-url "^5.0.0" -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" npm-run-path@^5.1.0: version "5.1.0" @@ -1672,11 +1852,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -1742,6 +1917,13 @@ optionator@^0.9.3: prelude-ls "^1.2.1" type-check "^0.4.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -1749,6 +1931,13 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -1756,12 +1945,10 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== packet-reader@1.0.0: version "1.0.0" @@ -1784,6 +1971,16 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -1814,7 +2011,7 @@ path-key@^4.0.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -1836,25 +2033,30 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + pg-connection-string@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.2.0.tgz#caab4d38a9de4fdc29c9317acceed752897de41c" integrity sha512-xB/+wxcpFipUZOQcSzcgkjcNOosGhEoPSjz06jC89lv1dj7mc9bZv6wLVy8M2fVjP0a/xN0N988YDq1L0FhK3A== -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== +pg-connection-string@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" - integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== +pg-pool@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" + integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== pg-protocol@^1.6.0: version "1.6.0" @@ -1872,18 +2074,20 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.10.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.10.0.tgz#5b8379c9b4a36451d110fc8cd98fc325fe62ad24" - integrity sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ== +pg@^8.11.3: + version "8.11.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== dependencies: buffer-writer "2.0.0" packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.6.0" + pg-connection-string "^2.6.2" + pg-pool "^3.6.1" pg-protocol "^1.6.0" pg-types "^2.1.0" pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" pgpass@1.x: version "1.0.4" @@ -1902,11 +2106,16 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@^0.6.0: +pidtree@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -1939,10 +2148,15 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier@2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier-plugin-organize-imports@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-3.2.3.tgz#6b0141ac71f7ee9a673ce83e95456319e3a7cf0d" + integrity sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg== + +prettier@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" + integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== punycode@^2.1.0: version "2.1.1" @@ -1954,6 +2168,25 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + readable-stream@^3.0.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -1978,6 +2211,18 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-tree@^0.1.27: + version "0.1.27" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== + +regjsparser@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" + integrity sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== + dependencies: + jsesc "~0.5.0" + repeat-element@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" @@ -2014,10 +2259,19 @@ resolve@^1.1.6, resolve@^1.1.7: is-core-module "^2.2.0" path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +resolve@^1.10.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" @@ -2051,13 +2305,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.8.0: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2070,10 +2317,15 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -semver@^7.3.7: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -2104,34 +2356,16 @@ signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" @@ -2191,6 +2425,32 @@ source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -2213,19 +2473,10 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -string-argv@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" +string-argv@0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" + integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== string-width@^5.0.0: version "5.0.1" @@ -2236,6 +2487,15 @@ string-width@^5.0.0: is-fullwidth-code-point "^4.0.0" strip-ansi "^7.0.1" +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2243,13 +2503,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2269,11 +2522,25 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2281,6 +2548,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tarn@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.1.tgz#ebac2c6dbc6977d34d4526e0a7814200386a8aec" @@ -2291,11 +2563,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - tildify@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a" @@ -2338,22 +2605,10 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -2367,21 +2622,36 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -typescript@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +typescript@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -2434,6 +2704,14 @@ v8flags@^3.1.3: dependencies: homedir-polyfill "^1.0.1" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -2461,23 +2739,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" wrappy@1: version "1.0.2" @@ -2494,10 +2763,10 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" - integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== +yaml@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" + integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== yocto-queue@^0.1.0: version "0.1.0"