From 34dd5946e44c1c39569ecabb9ce0d7ba0fa2b9ea Mon Sep 17 00:00:00 2001 From: mrkvon Date: Wed, 29 Jan 2025 12:49:26 +0100 Subject: [PATCH] fix: remove reliance on non-standard predicate in type indexes See also: https://github.com/solid/type-indexes/issues/29 https://github.com/solidcouch/solidcouch/pull/135 And somehow also switch to ESM, change tsconfig, and switch to vitest --- .eslintignore | 1 + .mocharc.yml | 4 - package.json | 15 +- src/app.ts | 18 +- src/config/index.ts | 10 +- src/controllers/integration.ts | 15 +- src/controllers/notification.ts | 8 +- src/controllers/status.ts | 10 +- src/generate-api-docs.ts | 2 +- src/index.ts | 4 +- src/middlewares/authorizeGroup.ts | 2 +- src/middlewares/validate.ts | 6 +- src/services/mailerService.ts | 2 +- src/templates/generateMessage.ts | 2 +- src/test/helpers/index.ts | 34 +- src/test/helpers/setupPod.ts | 6 +- src/test/integration-finish.spec.ts | 27 +- src/test/integration-start.spec.ts | 40 +- src/test/notification.spec.ts | 36 +- src/test/{testSetup.spec.ts => setup.ts} | 49 +- src/test/showcase.spec.ts | 11 +- src/test/status.spec.ts | 9 +- src/utils.ts | 17 +- tsconfig.json | 23 +- tsconfig.production.json | 14 +- vitest.config.ts | 14 + yarn.lock | 774 +++++++++++++++++------ 27 files changed, 794 insertions(+), 359 deletions(-) delete mode 100644 .mocharc.yml rename src/test/{testSetup.spec.ts => setup.ts} (79%) create mode 100644 vitest.config.ts diff --git a/.eslintignore b/.eslintignore index 181a62b..2aa5dc6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ dist apidocs +vitest.config.ts diff --git a/.mocharc.yml b/.mocharc.yml deleted file mode 100644 index e20a211..0000000 --- a/.mocharc.yml +++ /dev/null @@ -1,4 +0,0 @@ -extension: [ts] -spec: src/test/*.spec.ts -require: ts-node/register -timeout: 10000 diff --git a/package.json b/package.json index 52b59f4..1d80b79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "simple-email-notifications", "version": "0.0.1", + "type": "module", "main": "dist/index.js", "scripts": { "start": "yarn build && node dist/index.js", @@ -8,7 +9,7 @@ "copy-hbs": "cp src/templates/*.hbs dist/templates && cp src/templates/*.css dist/templates", "format": "prettier 'src/**/*.ts' '**/*.{md,yml,yaml,json}' --write", "lint": "eslint . --ext .ts", - "test": "mocha", + "test": "NODE_ENV=vitest vitest", "generate-key": "openssl ecparam -name prime256v1 -genkey -noout -out ecdsa-p256-private.pem", "generate-api-docs": "tsc && node dist/generate-api-docs.js" }, @@ -17,7 +18,6 @@ "@solid/community-server": "^7.0.2", "@types/chai": "^4.3.5", "@types/maildev": "^0.0.7", - "@types/mocha": "^10.0.1", "@types/sinon": "^10.0.15", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.19.0", @@ -30,19 +30,19 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.0.0", "maildev": "^2.1.0", - "mocha": "^10.2.0", "msw": "^2.0.14", "prettier": "^3.0.0", "puppeteer": "^22.2.0", "sinon": "^15.2.0", "swagger-autogen": "^2.23.6", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "vitest": "^3.0.4" }, "dependencies": { "@koa/bodyparser": "^5.0.0", "@koa/cors": "^4.0.0", "@koa/router": "^12.0.0", - "@ldhop/core": "^0.0.0-alpha.1", + "@ldhop/core": "^0.1.0", "@solid/access-token-verifier": "^2.0.5", "@types/co-body": "^6.1.0", "@types/fs-extra": "^11.0.4", @@ -53,7 +53,7 @@ "@types/koa__router": "^12.0.0", "@types/lodash": "^4.14.196", "@types/n3": "^1.16.0", - "@types/node": "^20.4.2", + "@types/node": "^22.12.0", "@types/nodemailer": "^6.4.9", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", @@ -71,5 +71,6 @@ "nodemailer": "^6.9.4", "rdf-namespaces": "^1.11.0", "typescript": "^5.1.6" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/app.ts b/src/app.ts index f1ff699..b50372f 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,24 +1,24 @@ -import bodyParser from '@koa/bodyparser' +import { bodyParser } from '@koa/bodyparser' import cors from '@koa/cors' import Router from '@koa/router' import Koa from 'koa' import helmet from 'koa-helmet' import serve from 'koa-static' -import { allowedGroups, isBehindProxy } from './config' +import { allowedGroups, isBehindProxy } from './config/index.js' import { checkVerificationLink, finishIntegration, initializeIntegration, -} from './controllers/integration' -import { notification } from './controllers/notification' -import { getStatus } from './controllers/status' +} from './controllers/integration.js' +import { notification } from './controllers/notification.js' +import { getStatus } from './controllers/status.js' import { authorizeGroups, checkGroupMembership, -} from './middlewares/authorizeGroup' -import { solidAuth } from './middlewares/solidAuth' -import { validateBody } from './middlewares/validate' -import * as schema from './schema' +} from './middlewares/authorizeGroup.js' +import { solidAuth } from './middlewares/solidAuth.js' +import { validateBody } from './middlewares/validate.js' +import * as schema from './schema.js' const app = new Koa() app.proxy = isBehindProxy diff --git a/src/config/index.ts b/src/config/index.ts index a455e16..56da5d6 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -5,7 +5,13 @@ import SMTPTransport from 'nodemailer/lib/smtp-transport' // either via .env file, or via environment variables directly (depends on your setup) // server base url, e.g. to construct correct email verification links -export const baseUrl = process.env.BASE_URL ?? 'http://localhost:3005' +// export const baseUrl = process.env.BASE_URL ?? 'http://localhost:3005' +export const port: number = +(process.env.PORT ?? 3005) + +export const baseUrl = + process.env.NODE_ENV === 'vitest' || !process.env.BASE_URL + ? `http://localhost:${port}` + : process.env.BASE_URL export const appName = process.env.APP_NAME ?? 'Tired.bike' @@ -51,8 +57,6 @@ export const smtpTransportOptions: SMTPTransport.Options = { export const emailSender = process.env.EMAIL_SENDER ?? 'noreply@notifications.tired.bike' -export const port: number = +(process.env.PORT ?? 3005) - // email verification expiration in seconds (1 hour) export const emailVerificationExpiration = 3600 diff --git a/src/controllers/integration.ts b/src/controllers/integration.ts index 0127645..d13a243 100644 --- a/src/controllers/integration.ts +++ b/src/controllers/integration.ts @@ -1,12 +1,13 @@ -import { readFile } from 'fs-extra' import * as jsonwebtoken from 'jsonwebtoken' -import { JsonWebTokenError, TokenExpiredError } from 'jsonwebtoken' import { Middleware } from 'koa' -import { pick } from 'lodash' -import * as config from '../config' -import { sendMail } from '../services/mailerService' -import { generateHtmlMessage } from '../templates/generateMessage' -import { findWritableSettings, getBotFetch } from '../utils' +import pick from 'lodash/pick.js' +import { readFile } from 'node:fs/promises' +import * as config from '../config/index.js' +import { sendMail } from '../services/mailerService.js' +import { generateHtmlMessage } from '../templates/generateMessage.js' +import { findWritableSettings, getBotFetch } from '../utils.js' + +const { JsonWebTokenError, TokenExpiredError } = jsonwebtoken export const initializeIntegration: Middleware<{ user: string diff --git a/src/controllers/notification.ts b/src/controllers/notification.ts index b48c2cb..00b777e 100644 --- a/src/controllers/notification.ts +++ b/src/controllers/notification.ts @@ -1,8 +1,8 @@ import { DefaultContext, Middleware } from 'koa' -import { appName, emailSender } from '../config' -import { sendMail } from '../services/mailerService' -import { generateHtmlMessage } from '../templates/generateMessage' -import { getVerifiedEmails } from './status' +import { appName, emailSender } from '../config/index.js' +import { sendMail } from '../services/mailerService.js' +import { generateHtmlMessage } from '../templates/generateMessage.js' +import { getVerifiedEmails } from './status.js' export type GoodBody = { '@context': 'https://www.w3.org/ns/activitystreams' diff --git a/src/controllers/status.ts b/src/controllers/status.ts index f8285f4..7e31fbf 100644 --- a/src/controllers/status.ts +++ b/src/controllers/status.ts @@ -1,8 +1,8 @@ -import { readFile } from 'fs-extra' -import { verify } from 'jsonwebtoken' +import * as jsonwebtoken from 'jsonwebtoken' import type { DefaultContext, DefaultState, Middleware } from 'koa' -import * as config from '../config' -import { findEmailVerificationTokens } from '../utils' +import { readFile } from 'node:fs/promises' +import * as config from '../config/index.js' +import { findEmailVerificationTokens } from '../utils.js' export const getVerifiedEmails = async (webId: string) => { const tokens = await findEmailVerificationTokens(webId) @@ -12,7 +12,7 @@ export const getVerifiedEmails = async (webId: string) => { const verifiedEmails = tokens .map(token => { try { - return verify(token, pem) as { + return jsonwebtoken.verify(token, pem) as { webId: string email: string emailVerified: boolean diff --git a/src/generate-api-docs.ts b/src/generate-api-docs.ts index 174d20b..047ee18 100644 --- a/src/generate-api-docs.ts +++ b/src/generate-api-docs.ts @@ -1,6 +1,6 @@ // https://swagger-autogen.github.io/docs/getting-started/advanced-usage#openapi-3x import swaggerAutogen from 'swagger-autogen' -import { init, notification } from './schema' +import { init, notification } from './schema.js' const doc = { info: { diff --git a/src/index.ts b/src/index.ts index 7612379..8a8790b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ -import app from './app' -import { port } from './config' +import app from './app.js' +import { port } from './config/index.js' app.listen(port, () => { // eslint-disable-next-line no-console diff --git a/src/middlewares/authorizeGroup.ts b/src/middlewares/authorizeGroup.ts index 322d427..2d6afe2 100644 --- a/src/middlewares/authorizeGroup.ts +++ b/src/middlewares/authorizeGroup.ts @@ -1,5 +1,5 @@ import { Middleware } from 'koa' -import { get } from 'lodash' +import get from 'lodash/get.js' import { Parser } from 'n3' import { vcard } from 'rdf-namespaces' diff --git a/src/middlewares/validate.ts b/src/middlewares/validate.ts index 3749e32..570f644 100644 --- a/src/middlewares/validate.ts +++ b/src/middlewares/validate.ts @@ -1,9 +1,9 @@ import addFormats from 'ajv-formats' -import Ajv2020 from 'ajv/dist/2020' +import { default as Ajv2020 } from 'ajv/dist/2020.js' import type { Middleware } from 'koa' -const ajv = new Ajv2020({ allErrors: true }) -addFormats(ajv) +const ajv = new Ajv2020.default({ allErrors: true }) +addFormats.default(ajv) /** * This middleware generator accepts json-schema and returns Middleware diff --git a/src/services/mailerService.ts b/src/services/mailerService.ts index 8f80635..83bc5ed 100644 --- a/src/services/mailerService.ts +++ b/src/services/mailerService.ts @@ -1,7 +1,7 @@ import * as nodemailer from 'nodemailer' import Mail from 'nodemailer/lib/mailer' import * as path from 'path' -import { appLogo, smtpTransportOptions } from '../config' +import { appLogo, smtpTransportOptions } from '../config/index.js' export const sendMail = async (options: Mail.Options) => { const smtpTransport = nodemailer.createTransport(smtpTransportOptions) diff --git a/src/templates/generateMessage.ts b/src/templates/generateMessage.ts index 5bea4a3..855c9a6 100644 --- a/src/templates/generateMessage.ts +++ b/src/templates/generateMessage.ts @@ -2,7 +2,7 @@ import * as fs from 'fs-extra' import Handlebars from 'handlebars' import juice from 'juice' import path from 'path' -import * as config from '../config' +import * as config from '../config/index.js' Handlebars.registerHelper('encodeURIComponent', encodeURIComponent) diff --git a/src/test/helpers/index.ts b/src/test/helpers/index.ts index 7a400e0..7943c5e 100644 --- a/src/test/helpers/index.ts +++ b/src/test/helpers/index.ts @@ -1,13 +1,12 @@ -import { expect } from 'chai' import * as cheerio from 'cheerio' -import { createAccount } from 'css-authn/dist/7.x' +import { createAccount } from 'css-authn/dist/7.x.js' import * as puppeteer from 'puppeteer' -import { createSandbox } from 'sinon' import { v4 as uuidv4 } from 'uuid' -import * as config from '../../config' -import * as mailerService from '../../services/mailerService' -import { setupEmailSettings } from './setupPod' -import { Person } from './types' +import { expect, vi } from 'vitest' +import * as config from '../../config/index.js' +import * as mailerService from '../../services/mailerService.js' +import { setupEmailSettings } from './setupPod.js' +import { Person } from './types.js' export const createRandomAccount = ({ solidServer, @@ -29,8 +28,7 @@ export const initIntegration = async ({ email: string authenticatedFetch: typeof fetch }) => { - const sandbox = createSandbox() - const sendMailSpy = sandbox.spy(mailerService, 'sendMail') + const sendMailSpy = vi.spyOn(mailerService, 'sendMail') const initResponse = await authenticatedFetch(`${config.baseUrl}/init`, { method: 'post', headers: { 'content-type': 'application/json' }, @@ -39,11 +37,12 @@ export const initIntegration = async ({ expect(initResponse.status).to.equal(200) // email was sent - const emailMessage = sendMailSpy.firstCall.firstArg.html - const $ = cheerio.load(emailMessage) - const verificationLink = $('a').first().attr('href') as string + const emailMessage = sendMailSpy.mock.calls[0][0].html as string + expect(emailMessage).toBeDefined() + const $ = cheerio.load(emailMessage as string) + const verificationLink = $('a').first().attr('href') expect(verificationLink).to.not.be.null - sandbox.restore() + vi.restoreAllMocks() return { verificationLink } } @@ -77,13 +76,18 @@ export const verifyEmail = async ({ authenticatedFetch, }) - const { token } = await finishIntegration(verificationLink) + expect(verificationLink).toBeDefined() + + const { token } = await finishIntegration(verificationLink!) return token } export const takeScreenshot = async (email: { html: string }, name: string) => { - const browser = await puppeteer.launch() + const browser = await puppeteer.launch({ + headless: true, + args: ['--no-sandbox'], + }) const page = await browser.newPage() await page.setContent(email.html) diff --git a/src/test/helpers/setupPod.ts b/src/test/helpers/setupPod.ts index 8bb63c1..0ad373a 100644 --- a/src/test/helpers/setupPod.ts +++ b/src/test/helpers/setupPod.ts @@ -1,7 +1,7 @@ -import { expect } from 'chai' import { foaf, solid, space } from 'rdf-namespaces' -import * as config from '../../config' -import { Person } from './types' +import { expect } from 'vitest' +import * as config from '../../config/index.js' +import { Person } from './types.js' const createFile = async ({ url, diff --git a/src/test/integration-finish.spec.ts b/src/test/integration-finish.spec.ts index 94f5187..8f57f03 100644 --- a/src/test/integration-finish.spec.ts +++ b/src/test/integration-finish.spec.ts @@ -1,34 +1,31 @@ -import { expect } from 'chai' import fetch from 'cross-fetch' import * as jsonwebtoken from 'jsonwebtoken' -import { describe } from 'mocha' -import { SinonSandbox, createSandbox } from 'sinon' -import * as config from '../config' -import { fetchRdf } from '../utils' -import { initIntegration, takeScreenshot } from './helpers' -import { setupEmailSettings } from './helpers/setupPod' -import { authenticatedFetch, person } from './testSetup.spec' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import * as config from '../config/index.js' +import { fetchRdf } from '../utils.js' +import { initIntegration, takeScreenshot } from './helpers/index.js' +import { setupEmailSettings } from './helpers/setupPod.js' +import { authenticatedFetch, person } from './setup.js' describe('email verification via /verify-email?token=jwt', () => { let verificationLink: string - let sandbox: SinonSandbox let settings: string beforeEach(() => { - sandbox = createSandbox() - sandbox.useFakeTimers({ now: Date.now(), toFake: ['Date'] }) + vi.useFakeTimers({ now: Date.now(), toFake: ['Date'] }) }) afterEach(() => { - sandbox.restore() + vi.useRealTimers() }) beforeEach(async () => { // initialize the integration - ;({ verificationLink } = await initIntegration({ + const initIntegrationResponse = await initIntegration({ email: 'email@example.com', authenticatedFetch, - })) + }) + verificationLink = initIntegrationResponse.verificationLink! }) beforeEach(async () => { @@ -114,7 +111,7 @@ describe('email verification via /verify-email?token=jwt', () => { }) it('[expired token] should respond with 400', async () => { - sandbox.clock.tick(3601 * 1000) + vi.advanceTimersByTime(3601 * 1000) const response = await fetch(verificationLink) // wait one hour and one second expect(response.status).to.equal(400) diff --git a/src/test/integration-start.spec.ts b/src/test/integration-start.spec.ts index cac72a6..d0e5efa 100644 --- a/src/test/integration-start.spec.ts +++ b/src/test/integration-start.spec.ts @@ -1,26 +1,30 @@ -import { expect } from 'chai' import fetch from 'cross-fetch' -import { describe } from 'mocha' import Mail from 'nodemailer/lib/mailer' -import { SinonSandbox, SinonSpy, createSandbox } from 'sinon' -import { baseUrl } from '../config' -import * as mailerService from '../services/mailerService' -import { authenticatedFetch, otherAuthenticatedFetch } from './testSetup.spec' +import { + afterEach, + beforeEach, + describe, + expect, + it, + MockInstance, + vi, +} from 'vitest' +import { baseUrl } from '../config/index.js' +import * as mailerService from '../services/mailerService.js' +import { authenticatedFetch, otherAuthenticatedFetch } from './setup.js' describe('Initialize email integration via /init', () => { - let sendMailSpy: SinonSpy<[options: Mail.Options], Promise> - let sandbox: SinonSandbox + let sendMailSpy: MockInstance<(options: Mail.Options) => Promise> beforeEach(() => { - sandbox = createSandbox() - sendMailSpy = sandbox.spy(mailerService, 'sendMail') + sendMailSpy = vi.spyOn(mailerService, 'sendMail') }) afterEach(() => { - sandbox.restore() + vi.restoreAllMocks() }) - context('everything ok', () => { + describe('everything ok', () => { let response: Response beforeEach(async () => { response = await authenticatedFetch(`${baseUrl}/init`, { @@ -35,15 +39,15 @@ describe('Initialize email integration via /init', () => { }) it('should send email with verification link', async () => { - expect(sendMailSpy.calledOnce).to.be.true - expect(sendMailSpy.firstCall.firstArg).to.haveOwnProperty( + expect(sendMailSpy.mock.calls).to.have.length(1) + expect(sendMailSpy.mock.calls[0][0]).to.haveOwnProperty( 'to', 'email@example.com', ) - expect(sendMailSpy.firstCall.firstArg) + expect(sendMailSpy.mock.calls[0][0]) .to.haveOwnProperty('text') .include(`verify-email?token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.`) - expect(sendMailSpy.firstCall.firstArg) + expect(sendMailSpy.mock.calls[0][0]) .to.haveOwnProperty('html') .include(`verify-email?token=eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.`) // maybe TODO we can perhaps also check the payload of the token @@ -60,7 +64,7 @@ describe('Initialize email integration via /init', () => { expect(response.status).to.equal(400) }) - context('person not signed in', () => { + describe('person not signed in', () => { it('should respond with 401', async () => { const response = await fetch(`${baseUrl}/init`, { method: 'post', @@ -72,7 +76,7 @@ describe('Initialize email integration via /init', () => { }) }) - context('person is not in the allowed group(s)', () => { + describe('person is not in the allowed group(s)', () => { it('should respond with 403', async () => { const response = await otherAuthenticatedFetch(`${baseUrl}/init`, { method: 'post', diff --git a/src/test/notification.spec.ts b/src/test/notification.spec.ts index 606e327..d30d025 100644 --- a/src/test/notification.spec.ts +++ b/src/test/notification.spec.ts @@ -1,12 +1,18 @@ -import { expect } from 'chai' import fetch from 'cross-fetch' -import { describe } from 'mocha' -import Mail from 'nodemailer/lib/mailer' -import { SinonSandbox, SinonSpy, createSandbox } from 'sinon' -import { baseUrl } from '../config' -import type { GoodBody } from '../controllers/notification' -import * as mailerService from '../services/mailerService' -import { verifyEmail } from './helpers' +import Mail from 'nodemailer/lib/mailer/index.js' +import { + afterEach, + beforeEach, + describe, + expect, + it, + MockInstance, + vi, +} from 'vitest' +import { baseUrl } from '../config/index.js' +import type { GoodBody } from '../controllers/notification.js' +import * as mailerService from '../services/mailerService.js' +import { verifyEmail } from './helpers/index.js' import { authenticatedFetch, authenticatedFetch3, @@ -14,7 +20,7 @@ import { otherPerson, person, person3, -} from './testSetup.spec' +} from './setup.js' const email = 'email@example.com' @@ -38,8 +44,7 @@ const getBody = ({ }) describe('send notification via /notification', () => { - let sendMailSpy: SinonSpy<[options: Mail.Options], Promise> - let sandbox: SinonSandbox + let sendMailSpy: MockInstance<(options: Mail.Options) => Promise> beforeEach(async () => { // setup email for receiver @@ -51,12 +56,11 @@ describe('send notification via /notification', () => { }) beforeEach(() => { - sandbox = createSandbox() - sendMailSpy = sandbox.spy(mailerService, 'sendMail') + sendMailSpy = vi.spyOn(mailerService, 'sendMail') }) afterEach(() => { - sandbox.restore() + vi.restoreAllMocks() }) it('[everything ok] should send email to email address when requested', async () => { @@ -72,8 +76,8 @@ describe('send notification via /notification', () => { // TODO this should be improved. waiting without knowing how long isn't great // await promisify(setTimeout)(2000) - expect(sendMailSpy.callCount).to.equal(1) - const emailNotification = sendMailSpy.firstCall.firstArg + expect(sendMailSpy.mock.calls.length).to.equal(1) + const emailNotification = sendMailSpy.mock.calls[0][0] expect(emailNotification).to.exist expect(emailNotification.to).to.haveOwnProperty('address', email) diff --git a/src/test/testSetup.spec.ts b/src/test/setup.ts similarity index 79% rename from src/test/testSetup.spec.ts rename to src/test/setup.ts index 869f78e..c827ddf 100644 --- a/src/test/testSetup.spec.ts +++ b/src/test/setup.ts @@ -1,14 +1,15 @@ import * as css from '@solid/community-server' import fetch from 'cross-fetch' -import { getAuthenticatedFetch } from 'css-authn/dist/7.x' +import { getAuthenticatedFetch } from 'css-authn/dist/7.x.js' import { IncomingMessage, Server, ServerResponse } from 'http' import MailDev from 'maildev' import { HttpResponse, http } from 'msw' import { SetupServer, setupServer } from 'msw/node' -import app from '../app' -import { port } from '../config' -import { createRandomAccount } from './helpers' -import type { Person } from './helpers/types' +import { afterAll, afterEach, beforeAll, beforeEach } from 'vitest' +import app from '../app.js' +import { port } from '../config/index.js' +import { createRandomAccount } from './helpers/index.js' +import type { Person } from './helpers/types.js' let server: Server let authenticatedFetch: typeof fetch @@ -20,8 +21,7 @@ let person3: Person let cssServer: css.App let mockServer: SetupServer -before(async function () { - this.timeout(60000) +beforeAll(async () => { const start = Date.now() // eslint-disable-next-line no-console @@ -47,30 +47,39 @@ before(async function () { // eslint-disable-next-line no-console console.log('CSS server started in', (Date.now() - start) / 1000, 'seconds') -}) +}, 60000) -after(async () => { +afterAll(async () => { await cssServer.stop() }) -before(done => { - server = app.listen(port, done) +beforeAll(async () => { + await new Promise(resolve => { + server = app.listen(port, resolve) + }) }) -after(done => { - server.close(done) + +afterAll(async () => { + await new Promise(resolve => { + server.close(resolve) + }) }) // run maildev server let maildev: InstanceType -before(done => { - maildev = new MailDev({ - silent: true, // Set to false if you want to see server logs - disableWeb: false, // Disable the web interface for testing +beforeAll(async () => { + await new Promise(resolve => { + maildev = new MailDev({ + silent: true, // Set to false if you want to see server logs + disableWeb: false, // Disable the web interface for testing + }) + maildev.listen(resolve) }) - maildev.listen(done) }) -after(done => { - maildev.close(done) +afterAll(async () => { + await new Promise(resolve => { + maildev.close(resolve) + }) }) /** diff --git a/src/test/showcase.spec.ts b/src/test/showcase.spec.ts index cccef69..b593c71 100644 --- a/src/test/showcase.spec.ts +++ b/src/test/showcase.spec.ts @@ -1,15 +1,14 @@ -import { expect } from 'chai' import fetch from 'cross-fetch' -import { describe } from 'mocha' -import { baseUrl } from '../config' -import type { GoodBody } from '../controllers/notification' -import { takeScreenshot, verifyEmail } from './helpers' +import { beforeEach, describe, expect, it } from 'vitest' +import { baseUrl } from '../config/index.js' +import type { GoodBody } from '../controllers/notification.js' +import { takeScreenshot, verifyEmail } from './helpers/index.js' import { authenticatedFetch, authenticatedFetch3, person, person3, -} from './testSetup.spec' +} from './setup.js' const email = 'email@example.com' diff --git a/src/test/status.spec.ts b/src/test/status.spec.ts index e5daeaf..59a8b35 100644 --- a/src/test/status.spec.ts +++ b/src/test/status.spec.ts @@ -1,8 +1,7 @@ -import { expect } from 'chai' import fetch from 'cross-fetch' -import { describe } from 'mocha' -import { baseUrl } from '../config' -import { verifyEmail } from './helpers' +import { beforeEach, describe, expect, it } from 'vitest' +import { baseUrl } from '../config/index.js' +import { verifyEmail } from './helpers/index.js' import { authenticatedFetch, authenticatedFetch3, @@ -10,7 +9,7 @@ import { otherPerson, person, person3, -} from './testSetup.spec' +} from './setup.js' const email = 'email@example.com' diff --git a/src/utils.ts b/src/utils.ts index bf51340..b29b2d0 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,10 +1,8 @@ -import { RdfQuery } from '@ldhop/core/dist/src' -import { QueryAndStore } from '@ldhop/core/dist/src/QueryAndStore' -import { fetchRdfDocument } from '@ldhop/core/dist/src/utils/helpers' +import { fetchRdfDocument, QueryAndStore, RdfQuery } from '@ldhop/core' import { v6, v7 } from 'css-authn' import { NamedNode, Quad } from 'n3' -import { dct, rdfs, solid, space } from 'rdf-namespaces' -import * as config from './config' +import { rdf, rdfs, solid, space } from 'rdf-namespaces' +import * as config from './config/index.js' /** * To find verified email of a person @@ -36,9 +34,10 @@ const findEmailQuery: RdfQuery = [ // Find instances of specific class defined in config (EMAIL_DISCOVERY_TYPE) { type: 'match', - subject: '?publicTypeIndex', - predicate: dct.references, - pick: 'object', + predicate: rdf.type, + object: solid.TypeRegistration, + graph: '?publicTypeIndex', + pick: 'subject', target: '?typeRegistration', }, { @@ -150,7 +149,7 @@ const parseWACAllowHeader = (header: string): PermissionDict => { */ const getAllowedAccess = async ( url: string, - authenticatedFetch: typeof fetch, + authenticatedFetch: typeof globalThis.fetch, ) => { const response = await authenticatedFetch(url, { method: 'head' }) const header = response.headers.get('wac-allow') diff --git a/tsconfig.json b/tsconfig.json index 91acc3d..4e6f7fb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,15 +1,22 @@ { "compilerOptions": { - "module": "commonjs", "esModuleInterop": true, - "target": "es6", - "moduleResolution": "node", - "sourceMap": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + // "verbatimModuleSyntax": true, + "strict": true, + // "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "module": "NodeNext", "outDir": "dist", "rootDir": "src", - "strict": true, - "noImplicitAny": true, - "downlevelIteration": true + "sourceMap": true, + "lib": ["ESNext"], + "types": ["node"] }, - "lib": ["esnext"] + "include": ["./src"] } diff --git a/tsconfig.production.json b/tsconfig.production.json index 990b885..96edd2f 100644 --- a/tsconfig.production.json +++ b/tsconfig.production.json @@ -1,16 +1,4 @@ { - "compilerOptions": { - "module": "commonjs", - "esModuleInterop": true, - "target": "es6", - "moduleResolution": "node", - "sourceMap": true, - "outDir": "dist", - "rootDir": "src", - "strict": true, - "noImplicitAny": true, - "downlevelIteration": true - }, - "lib": ["esnext"], + "extends": "./tsconfig.json", "exclude": ["src/test", "src/generate-api-docs.ts"] } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..d986e3b --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + setupFiles: './src/test/setup.ts', + testTimeout: 10000, + poolOptions: { + // threads: { execArgv: ['--env-file=.env.test'] }, + // Or another pool: + // forks: { execArgv: ['--env-file=.env.test'] }, + }, + fileParallelism: false, + }, +}) diff --git a/yarn.lock b/yarn.lock index 5c0aaa7..3fe65c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2392,6 +2392,136 @@ enabled "2.0.x" kuler "^2.0.0" +"@emotion/hash@^0.9.1": + version "0.9.2" + resolved "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.3.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -2485,6 +2615,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + "@jridgewell/trace-mapping@0.3.9": version "0.3.9" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" @@ -2537,11 +2672,13 @@ methods "^1.1.2" path-to-regexp "^6.2.1" -"@ldhop/core@^0.0.0-alpha.1": - version "0.0.0-alpha.1" - resolved "https://registry.yarnpkg.com/@ldhop/core/-/core-0.0.0-alpha.1.tgz#c18ed9427cfd69dab55ab314d18305759d2d2dcb" - integrity sha512-64g79eUg2ev1KlZju0WgNeF5xZITO3WNdcaVb3sU/2jAI8mki89cQyY24AuoTWWcEl46FBZFEmmTDRORkWRd1Q== +"@ldhop/core@^0.1.0": + version "0.1.0" + resolved "https://registry.npmjs.org/@ldhop/core/-/core-0.1.0.tgz#b67f1f3503cc4cf02d69c442e47c54db6376d32d" + integrity sha512-89LP9lwgKYXZWM49mcnQS5ZGkRp5cCXEirL8bopNLK9r84wBDhgQVKU9/YG5hgeJHjHcyP64dUCDwrmDcysANQ== dependencies: + "@emotion/hash" "^0.9.1" + "@types/n3" "^1.16.4" n3 "^1.17.2" utility-types "^3.10.0" @@ -2667,6 +2804,101 @@ dependencies: "@types/node" "*" +"@rollup/rollup-android-arm-eabi@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz#c18bad635ba24220a6c8cc427ab2cab12e1531a3" + integrity sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA== + +"@rollup/rollup-android-arm64@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz#b5c00344b80f20889b72bfe65d3c209cef247362" + integrity sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q== + +"@rollup/rollup-darwin-arm64@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz#78e5358d4a2a08c090f75dd87fa2eada42eca1e5" + integrity sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA== + +"@rollup/rollup-darwin-x64@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz#c04c9e173244d44de50278f3f893fb68d987fcc6" + integrity sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q== + +"@rollup/rollup-freebsd-arm64@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz#3bdf18d4ef32dcfe9b20bba18d7a53a101ed79d9" + integrity sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA== + +"@rollup/rollup-freebsd-x64@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz#35867b15c276f4b4ca8eb226f7dd6df8c64640db" + integrity sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw== + +"@rollup/rollup-linux-arm-gnueabihf@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz#92c212d1b38c105bd1eb101254722d27d869b1ac" + integrity sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g== + +"@rollup/rollup-linux-arm-musleabihf@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz#ebb94d8cd438f23e38caa4a87ca80d4cf5b50fa1" + integrity sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q== + +"@rollup/rollup-linux-arm64-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz#ce6a5eacbd5fd4bdf7bf27bd818980230bdb9fab" + integrity sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw== + +"@rollup/rollup-linux-arm64-musl@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz#31b4e0a543607e6eb4f982ffb45830919a952a83" + integrity sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw== + +"@rollup/rollup-linux-loongarch64-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz#ad7b35f193f1d2e0dc37eba733069b4af5f6498d" + integrity sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz#b713a55d7eac4d2c8a0109c3daca6ea85fc178b3" + integrity sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg== + +"@rollup/rollup-linux-riscv64-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz#bea4fd8ad190e9bc1d11efafa2efc9d121f50b96" + integrity sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g== + +"@rollup/rollup-linux-s390x-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz#cc98c32733ca472635759c78a79b5f8d887b2a6a" + integrity sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ== + +"@rollup/rollup-linux-x64-gnu@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz#5c009c264a7ce0e19b40890ca9945440bb420691" + integrity sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg== + +"@rollup/rollup-linux-x64-musl@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz#73d2f44070c23e031262b601927fdb4eec253bc1" + integrity sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA== + +"@rollup/rollup-win32-arm64-msvc@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz#fa106304818078f9d3fc9005642ad99f596eed2d" + integrity sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ== + +"@rollup/rollup-win32-ia32-msvc@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz#a1a394c705a0d2a974a124c4b471fc1cf851a56f" + integrity sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ== + +"@rollup/rollup-win32-x64-msvc@4.32.1": + version "4.32.1" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz#512db088df67afee8f07183cdf8c9eecd64f6ef8" + integrity sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q== + "@rubensworks/saxes@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@rubensworks/saxes/-/saxes-6.0.1.tgz#2f394548493a415c522d2bfd4f12fad67c9a6317" @@ -2957,6 +3189,11 @@ dependencies: "@types/node" "*" +"@types/estree@1.0.6", "@types/estree@^1.0.0": + version "1.0.6" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/express-serve-static-core@^4.17.33": version "4.17.35" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" @@ -3130,11 +3367,6 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/mocha@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" - integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== - "@types/n3@^1.10.4", "@types/n3@^1.16.0": version "1.16.0" resolved "https://registry.yarnpkg.com/@types/n3/-/n3-1.16.0.tgz#6ab894bd2004cc5b6d1a8e09f27d39ceb157b377" @@ -3151,6 +3383,14 @@ "@rdfjs/types" "^1.1.0" "@types/node" "*" +"@types/n3@^1.16.4": + version "1.21.1" + resolved "https://registry.npmjs.org/@types/n3/-/n3-1.21.1.tgz#5e9f93f50e7a77f8c40bffa3e66f67209633c235" + integrity sha512-9KxFlFj3etnpdI2nyQEp/jHry5DHxWT22z9Nc/y/hdHe0CHVc9rKu+NacWKUyN06dDLDh7ZnjCzY8yBJ9lmzdw== + dependencies: + "@rdfjs/types" "^1.1.0" + "@types/node" "*" + "@types/node@*", "@types/node@>=10.0.0": version "20.4.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" @@ -3168,10 +3408,12 @@ dependencies: undici-types "~5.26.4" -"@types/node@^20.4.2": - version "20.4.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" - integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== +"@types/node@^22.12.0": + version "22.12.0" + resolved "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz#bf8af3b2af0837b5a62a368756ff2b705ae0048c" + integrity sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA== + dependencies: + undici-types "~6.20.0" "@types/nodemailer@^6.4.11": version "6.4.14" @@ -3480,6 +3722,65 @@ "@typescript-eslint/types" "6.19.0" eslint-visitor-keys "^3.4.1" +"@vitest/expect@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz#95c0a73980e99a30d3994c35b4468c4bb257d093" + integrity sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg== + dependencies: + "@vitest/spy" "3.0.4" + "@vitest/utils" "3.0.4" + chai "^5.1.2" + tinyrainbow "^2.0.0" + +"@vitest/mocker@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz#91eba38f720d47aa708d1bcc5e4c7d885b1fc435" + integrity sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A== + dependencies: + "@vitest/spy" "3.0.4" + estree-walker "^3.0.3" + magic-string "^0.30.17" + +"@vitest/pretty-format@3.0.4", "@vitest/pretty-format@^3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz#18d5da3bad9a0eebf49f5c5daa84d0d5f7d2bbfa" + integrity sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g== + dependencies: + tinyrainbow "^2.0.0" + +"@vitest/runner@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz#5bdc965c32721c7cf025481124f73589deea313a" + integrity sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw== + dependencies: + "@vitest/utils" "3.0.4" + pathe "^2.0.2" + +"@vitest/snapshot@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz#7e64c19ca1ab9abb2f01fd246817b5f0404798fd" + integrity sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w== + dependencies: + "@vitest/pretty-format" "3.0.4" + magic-string "^0.30.17" + pathe "^2.0.2" + +"@vitest/spy@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz#966fd3422ba093568a6a33c437751a91061f8622" + integrity sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q== + dependencies: + tinyspy "^3.0.2" + +"@vitest/utils@3.0.4": + version "3.0.4" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz#9dd2336170097b20a6e5b778bb5ea7786cc56008" + integrity sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ== + dependencies: + "@vitest/pretty-format" "3.0.4" + loupe "^3.1.2" + tinyrainbow "^2.0.0" + abab@^2.0.5, abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -3579,11 +3880,6 @@ ajv@^8.0.0, ajv@^8.12.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-colors@^4.1.1: version "4.1.3" resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -3716,6 +4012,11 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + ast-types@^0.13.4: version "0.13.4" resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -3898,11 +4199,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -3953,6 +4249,11 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + cache-content-type@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" @@ -4001,11 +4302,6 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - canonicalize@^1.0.1: version "1.0.8" resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" @@ -4029,6 +4325,17 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" +chai@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" + integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4056,6 +4363,11 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + cheerio-select@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" @@ -4081,7 +4393,7 @@ cheerio@^1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -chokidar@3.5.3, chokidar@^3.4.2: +chokidar@^3.4.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4121,15 +4433,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -4459,10 +4762,12 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +debug@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" decimal.js@^10.3.1: version "10.4.3" @@ -4483,6 +4788,11 @@ deep-eql@^4.1.2: dependencies: type-detect "^4.0.0" +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== + deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -4595,11 +4905,6 @@ devtools-protocol@0.0.1249869: resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1249869.tgz#000c3cf1afc189a18db98135a50d4a8f95a47d29" integrity sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -4847,6 +5152,11 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" +es-module-lexer@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz#da49f587fd9e68ee2404fe4e256c0c7d3a81be21" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + es-set-tostringtag@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" @@ -4872,6 +5182,37 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +esbuild@^0.24.2: + version "0.24.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4887,16 +5228,16 @@ escape-html@^1.0.3, escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@4.0.0, 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== - escape-string-regexp@^1.0.5, 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== + escodegen@^2.0.0, escodegen@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" @@ -5077,6 +5418,13 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5132,6 +5480,11 @@ execa@^7.1.1: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +expect-type@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" + integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== + express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -5321,7 +5674,7 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-up@5.0.0, find-up@^5.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" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -5337,11 +5690,6 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" @@ -5411,6 +5759,11 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5517,18 +5870,6 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.3, glob@^7.1.7: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -5701,11 +6042,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - headers-polyfill@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.2.tgz#9115a76eee3ce8fbf95b6e3c6bf82d936785b44a" @@ -6122,11 +6458,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -6252,7 +6583,7 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -6617,7 +6948,7 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.1.0, log-symbols@^4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -6644,6 +6975,11 @@ loupe@^2.3.1: dependencies: get-func-name "^2.0.0" +loupe@^3.1.0, loupe@^3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz#042a8f7986d77f3d0f98ef7990a2b2fef18b0fd2" + integrity sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug== + lowercase-keys@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" @@ -6666,6 +7002,13 @@ lru-cache@^7.14.1: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + maildev@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/maildev/-/maildev-2.1.0.tgz#0370b5a0bfc27bc3cb6f44172440118862283c00" @@ -6798,13 +7141,6 @@ minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - minimatch@9.0.3: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" @@ -6812,7 +7148,7 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -6836,33 +7172,6 @@ mitt@3.0.1: resolved "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== -mocha@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6873,7 +7182,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6926,10 +7235,10 @@ n3@^1.17.1, n3@^1.17.2: queue-microtask "^1.1.2" readable-stream "^4.0.0" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +nanoid@^3.3.8: + version "3.3.8" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== nanoid@^5.0.4: version "5.0.4" @@ -7351,11 +7660,21 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz#5ed86644376915b3c7ee4d00ac8c348d671da3a5" + integrity sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + pend@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -7366,11 +7685,25 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +postcss@^8.4.49: + version "8.5.1" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz#e2272a1f8a807fafa413218245630b5db10a3214" + integrity sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7527,13 +7860,6 @@ quick-lru@^7.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-7.0.0.tgz#447f6925b33ae4d2d637e211967d74bae4b99c3f" integrity sha512-MX8gB7cVYTrYcFfAnfLlhRd0+Toyl8yX8uBx1MrX7K0jegiz9TumwOK27ldXrgDlHRdVi+MqU9Ssw6dr4BNreg== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -7961,6 +8287,34 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rollup@^4.23.0: + version "4.32.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz#95309604d92c3d21cbf06c3ee46a098209ce13a4" + integrity sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.32.1" + "@rollup/rollup-android-arm64" "4.32.1" + "@rollup/rollup-darwin-arm64" "4.32.1" + "@rollup/rollup-darwin-x64" "4.32.1" + "@rollup/rollup-freebsd-arm64" "4.32.1" + "@rollup/rollup-freebsd-x64" "4.32.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.32.1" + "@rollup/rollup-linux-arm-musleabihf" "4.32.1" + "@rollup/rollup-linux-arm64-gnu" "4.32.1" + "@rollup/rollup-linux-arm64-musl" "4.32.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.32.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.32.1" + "@rollup/rollup-linux-riscv64-gnu" "4.32.1" + "@rollup/rollup-linux-s390x-gnu" "4.32.1" + "@rollup/rollup-linux-x64-gnu" "4.32.1" + "@rollup/rollup-linux-x64-musl" "4.32.1" + "@rollup/rollup-win32-arm64-msvc" "4.32.1" + "@rollup/rollup-win32-ia32-msvc" "4.32.1" + "@rollup/rollup-win32-x64-msvc" "4.32.1" + fsevents "~2.3.2" + run-applescript@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" @@ -8002,7 +8356,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8071,13 +8425,6 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -8156,6 +8503,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -8248,6 +8600,11 @@ socks@^2.7.1: ip-address "^9.0.5" smart-buffer "^4.2.0" +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -8336,6 +8693,11 @@ stack-trace@0.0.x: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + standard-as-callback@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" @@ -8351,6 +8713,11 @@ statuses@2.0.1, statuses@^2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== +std-env@^3.8.0: + version "3.8.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" + integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== + stream-to-string@^1.1.0, stream-to-string@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.1.tgz#15cb325d88b33cc62accb032c7093f85eb785db2" @@ -8453,18 +8820,11 @@ 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.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.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@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8552,6 +8912,31 @@ tiny-case@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinypool@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" + integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== + +tinyrainbow@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz#9509b2162436315e80e3eee0fcce4474d2444294" + integrity sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw== + +tinyspy@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== + titleize@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" @@ -8769,6 +9154,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + undici@^5.19.1: version "5.22.1" resolved "https://registry.yarnpkg.com/undici/-/undici-5.22.1.tgz#877d512effef2ac8be65e695f3586922e1a57d7b" @@ -8879,6 +9269,54 @@ vary@^1, vary@^1.1.2, vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +vite-node@3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz#6db5bc4c182baf04986265d46bc3193c5491f41f" + integrity sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA== + dependencies: + cac "^6.7.14" + debug "^4.4.0" + es-module-lexer "^1.6.0" + pathe "^2.0.2" + vite "^5.0.0 || ^6.0.0" + +"vite@^5.0.0 || ^6.0.0": + version "6.0.11" + resolved "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz#224497e93e940b34c3357c9ebf2ec20803091ed8" + integrity sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg== + dependencies: + esbuild "^0.24.2" + postcss "^8.4.49" + rollup "^4.23.0" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz#c1d1c7ed1b21308906cd06d9cdee28b2eefddf97" + integrity sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw== + dependencies: + "@vitest/expect" "3.0.4" + "@vitest/mocker" "3.0.4" + "@vitest/pretty-format" "^3.0.4" + "@vitest/runner" "3.0.4" + "@vitest/snapshot" "3.0.4" + "@vitest/spy" "3.0.4" + "@vitest/utils" "3.0.4" + chai "^5.1.2" + debug "^4.4.0" + expect-type "^1.1.0" + magic-string "^0.30.17" + pathe "^2.0.2" + std-env "^3.8.0" + tinybench "^2.9.0" + tinyexec "^0.3.2" + tinypool "^1.0.2" + tinyrainbow "^2.0.0" + vite "^5.0.0 || ^6.0.0" + vite-node "3.0.4" + why-is-node-running "^2.3.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -8992,6 +9430,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== + dependencies: + siginfo "^2.0.0" + stackback "0.0.2" + winston-transport@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" @@ -9040,11 +9486,6 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - wrap-ansi@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -9103,44 +9544,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yargs@17.7.2, yargs@^17.3.1, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"