From 48d99641f6361c52ea6324eee21d27f904e84cd2 Mon Sep 17 00:00:00 2001 From: Julien Ripouteau Date: Sat, 20 Jan 2024 15:24:42 +0100 Subject: [PATCH] feat: add dynamic og images --- app/controllers/og_images_controller.ts | 19 + app/controllers/packages_controller.ts | 7 +- app/services/og_image/adonis_logo.ts | 2 + app/services/og_image/og_image_renderer.ts | 146 +++ config/cache.ts | 3 + package.json | 23 +- pnpm-lock.yaml | 1118 ++++++++++++-------- resources/views/app_root.edge | 15 +- resources/views/components/meta.edge | 21 + start/kernel.ts | 2 +- start/routes.ts | 2 + 11 files changed, 906 insertions(+), 452 deletions(-) create mode 100644 app/controllers/og_images_controller.ts create mode 100644 app/services/og_image/adonis_logo.ts create mode 100644 app/services/og_image/og_image_renderer.ts create mode 100644 resources/views/components/meta.edge diff --git a/app/controllers/og_images_controller.ts b/app/controllers/og_images_controller.ts new file mode 100644 index 0000000..10a0d05 --- /dev/null +++ b/app/controllers/og_images_controller.ts @@ -0,0 +1,19 @@ +import { inject } from '@adonisjs/core' +import { HttpContext } from '@adonisjs/core/http' + +import { PackagesFetcher } from '#services/packages_fetcher' +import { OgImageGenerator } from '#services/og_image/og_image_renderer' + +export default class OgImagesController { + @inject() + async handle( + { params, response }: HttpContext, + pkgFetcher: PackagesFetcher, + ogImageGenerator: OgImageGenerator, + ) { + const { package: pkg } = await pkgFetcher.fetchPackage(params.name) + const img = await ogImageGenerator.generate(pkg.name, pkg.description) + + return response.type('image/png').send(img) + } +} diff --git a/app/controllers/packages_controller.ts b/app/controllers/packages_controller.ts index a34794b..e9701a9 100644 --- a/app/controllers/packages_controller.ts +++ b/app/controllers/packages_controller.ts @@ -1,5 +1,6 @@ import { inject } from '@adonisjs/core' import { HttpContext } from '@adonisjs/core/http' +import router from '@adonisjs/core/services/router' import { getHomeValidator } from '#validators/main' import { PackagesFetcher } from '#services/packages_fetcher' @@ -27,7 +28,11 @@ export default class PackagesController { const result = await statsFetcher.fetchPackage(ctx.params.name) return ctx.inertia.render('package/main', result, { - meta: { title: result.package.name, description: result.package.description }, + meta: { + title: result.package.name, + description: result.package.description, + image: router.builder().params({ name: result.package.name }).make('og_image'), + }, }) } } diff --git a/app/services/og_image/adonis_logo.ts b/app/services/og_image/adonis_logo.ts new file mode 100644 index 0000000..2171d59 --- /dev/null +++ b/app/services/og_image/adonis_logo.ts @@ -0,0 +1,2 @@ +export const adonisLogo = + 'data:image/png;base64,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' diff --git a/app/services/og_image/og_image_renderer.ts b/app/services/og_image/og_image_renderer.ts new file mode 100644 index 0000000..a51572d --- /dev/null +++ b/app/services/og_image/og_image_renderer.ts @@ -0,0 +1,146 @@ +import satori from 'satori' +import { html } from 'satori-html' +import { Resvg } from '@resvg/resvg-js' +import { readFile } from 'node:fs/promises' +import app from '@adonisjs/core/services/app' +import cache from '@adonisjs/cache/services/main' + +import { adonisLogo } from './adonis_logo.js' + +export class OgImageGenerator { + #buildMarkup(name: string, description: string) { + return html` +
+ +
+ + +
+ + + + + + + + +
+ ${name} +
+ + +
+ ${description} +
+
+ ` + } + + async #generateSvg(name: string, description: string) { + const markup = this.#buildMarkup(name, description) + + const fontsPath = app.makePath('resources/assets/fonts') + + const fontPath1 = `${fontsPath}/Graphik-Regular.ttf` + const fontPath2 = `${fontsPath}/PolySans-Median.ttf` + const svg = await satori(markup, { + width: 1200, + height: 630, + fonts: [ + { name: 'Graphik', data: await readFile(fontPath1), weight: 700, style: 'normal' }, + { name: 'PolySans', data: await readFile(fontPath2), weight: 400, style: 'normal' }, + ], + }) + + return svg + } + + /** + * Generate a new OpenGraph image for the given package name and description + * + * - First, convert HTML to SVG markup using Satori + * - Then, convert SVG to PNG using Resvg + * - Finally, cache the result so that we don't have to generate it again and again + */ + async generate(name: string, description: string) { + const base64Og = await cache.use('ogImage').getOrSet(`og-image:${name}`, async () => { + console.log('Generating new OG image for %s', name) + const svg = await this.#generateSvg(name, description) + return new Resvg(svg).render().asPng().toString('base64') + }) + + return Buffer.from(base64Og, 'base64') + } +} diff --git a/config/cache.ts b/config/cache.ts index 717c6fa..e83a4d4 100644 --- a/config/cache.ts +++ b/config/cache.ts @@ -1,3 +1,4 @@ +import app from '@adonisjs/core/services/app' import { defineConfig, store, drivers } from '@adonisjs/cache' import env from '#start/env' @@ -41,6 +42,8 @@ const cacheConfig = defineConfig({ .useL1Layer(drivers.memory({ maxSize: 50 * 1024 * 1024 })) .useL2Layer(drivers.database({ connectionName: 'sqlite' })), + ogImage: store({ ttl: null }).useL2Layer(drivers.file({ directory: app.tmpPath('og_images') })), + test: store().useL1Layer(drivers.memory({})), }, }) diff --git a/package.json b/package.json index 6f2c0e6..2140c37 100644 --- a/package.json +++ b/package.json @@ -36,21 +36,22 @@ "dependencies": { "@adonisjs/cache": "1.0.0-1", "@adonisjs/core": "6.2.0", - "@adonisjs/inertia": "1.0.0-6", - "@adonisjs/lucid": "19.0.0-8", + "@adonisjs/inertia": "1.0.0-7", + "@adonisjs/lucid": "19.0.0", "@adonisjs/session": "7.0.0", "@adonisjs/shield": "8.0.1", "@adonisjs/static": "^1.1.1", "@adonisjs/vite": "2.0.2", "@headlessui/vue": "^1.7.17", "@inertiajs/vue3": "^1.0.14", - "@poppinss/utils": "^6.7.0", + "@poppinss/utils": "^6.7.1", + "@resvg/resvg-js": "^2.6.0", "@sindresorhus/slugify": "^2.2.1", "@vinejs/vine": "^1.7.0", - "@vueuse/core": "^10.7.1", + "@vueuse/core": "^10.7.2", "cron": "^3.1.6", "edge.js": "^6.0.1", - "floating-vue": "5.0.2", + "floating-vue": "5.2.0", "github-markdown-css": "^5.5.0", "globby": "^14.0.0", "gsap": "^3.12.4", @@ -63,6 +64,8 @@ "p-limit": "^4.0.0", "reflect-metadata": "^0.2.1", "sanitize-html": "^2.11.0", + "satori": "^0.10.11", + "satori-html": "^0.3.2", "sqlite3": "^5.1.7", "vue": "^3.4.7" }, @@ -76,23 +79,23 @@ "@japa/assert": "^2.1.0", "@japa/browser-client": "^2.0.2", "@japa/file-system": "^2.1.1", - "@japa/plugin-adonisjs": "^2.0.3", + "@japa/plugin-adonisjs": "^3.0.0", "@japa/runner": "^3.1.1", "@julr/tooling-configs": "2.1.0", "@julr/unocss-preset-forms": "^0.1.0", "@swc/core": "^1.3.102", "@types/js-yaml": "^4.0.9", - "@types/luxon": "^3.3.7", + "@types/luxon": "^3.4.1", "@types/markdown-it": "^13.0.7", - "@types/node": "^20.10.7", + "@types/node": "^20.11.5", "@types/sanitize-html": "^2.9.5", "@unocss/reset": "^0.58.3", - "@vitejs/plugin-vue": "^5.0.2", + "@vitejs/plugin-vue": "^5.0.3", "eslint": "^8.56.0", "pino-pretty": "^10.3.1", "playwright": "^1.40.1", "postcss-nested": "^6.0.1", - "prettier": "^3.1.1", + "prettier": "^3.2.4", "ts-node": "^10.9.2", "typescript": "~5.2.2", "unocss": "^0.58.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 387fa11..6ec3ce2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,16 +7,16 @@ settings: dependencies: '@adonisjs/cache': specifier: 1.0.0-1 - version: 1.0.0-1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(@adonisjs/lucid@19.0.0-8)(tslib@2.6.2) + version: 1.0.0-1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(@adonisjs/lucid@19.0.0)(tslib@2.6.2) '@adonisjs/core': specifier: 6.2.0 version: 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) '@adonisjs/inertia': - specifier: 1.0.0-6 - version: 1.0.0-6(@adonisjs/core@6.2.0)(@adonisjs/session@7.0.0)(@japa/api-client@2.0.2)(edge.js@6.0.1) + specifier: 1.0.0-7 + version: 1.0.0-7(@adonisjs/core@6.2.0)(@adonisjs/session@7.0.0)(@japa/api-client@2.0.2)(edge.js@6.0.1) '@adonisjs/lucid': - specifier: 19.0.0-8 - version: 19.0.0-8(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7) + specifier: 19.0.0 + version: 19.0.0(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7) '@adonisjs/session': specifier: 7.0.0 version: 7.0.0(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(edge.js@6.0.1) @@ -31,13 +31,16 @@ dependencies: version: 2.0.2(@adonisjs/core@6.2.0)(@adonisjs/shield@8.0.1)(edge.js@6.0.1)(vite@5.0.11) '@headlessui/vue': specifier: ^1.7.17 - version: 1.7.17(vue@3.4.7) + version: 1.7.17(vue@3.4.14) '@inertiajs/vue3': specifier: ^1.0.14 - version: 1.0.14(vue@3.4.7) + version: 1.0.14(vue@3.4.14) '@poppinss/utils': - specifier: ^6.7.0 - version: 6.7.0 + specifier: ^6.7.1 + version: 6.7.1 + '@resvg/resvg-js': + specifier: ^2.6.0 + version: 2.6.0 '@sindresorhus/slugify': specifier: ^2.2.1 version: 2.2.1 @@ -45,8 +48,8 @@ dependencies: specifier: ^1.7.0 version: 1.7.0 '@vueuse/core': - specifier: ^10.7.1 - version: 10.7.1(vue@3.4.7) + specifier: ^10.7.2 + version: 10.7.2(vue@3.4.14) cron: specifier: ^3.1.6 version: 3.1.6 @@ -54,8 +57,8 @@ dependencies: specifier: ^6.0.1 version: 6.0.1 floating-vue: - specifier: 5.0.2 - version: 5.0.2(vue@3.4.7) + specifier: 5.2.0 + version: 5.2.0(vue@3.4.14) github-markdown-css: specifier: ^5.5.0 version: 5.5.0 @@ -92,12 +95,18 @@ dependencies: sanitize-html: specifier: ^2.11.0 version: 2.11.0 + satori: + specifier: ^0.10.11 + version: 0.10.11 + satori-html: + specifier: ^0.3.2 + version: 0.3.2 sqlite3: specifier: ^5.1.7 version: 5.1.7 vue: specifier: ^3.4.7 - version: 3.4.7(typescript@5.2.2) + version: 3.4.14(typescript@5.2.2) devDependencies: '@adonisjs/assembler': @@ -111,10 +120,10 @@ devDependencies: version: 8.3.1 '@iconify/json': specifier: ^2.2.166 - version: 2.2.166 + version: 2.2.170 '@iconify/utils': specifier: ^2.1.14 - version: 2.1.14 + version: 2.1.15 '@japa/api-client': specifier: ^2.0.2 version: 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1) @@ -123,37 +132,37 @@ devDependencies: version: 2.1.0(@japa/runner@3.1.1)(openapi-types@12.1.3) '@japa/browser-client': specifier: ^2.0.2 - version: 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.40.1) + version: 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.41.0) '@japa/file-system': specifier: ^2.1.1 version: 2.1.1(@japa/assert@2.1.0)(@japa/runner@3.1.1) '@japa/plugin-adonisjs': - specifier: ^2.0.3 - version: 2.0.3(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(@japa/runner@3.1.1)(playwright@1.40.1) + specifier: ^3.0.0 + version: 3.0.0(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(@japa/runner@3.1.1)(playwright@1.41.0) '@japa/runner': specifier: ^3.1.1 version: 3.1.1 '@julr/tooling-configs': specifier: 2.1.0 - version: 2.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.2.2) + version: 2.1.0(eslint@8.56.0)(prettier@3.2.4)(typescript@5.2.2) '@julr/unocss-preset-forms': specifier: ^0.1.0 version: 0.1.0(unocss@0.58.3) '@swc/core': specifier: ^1.3.102 - version: 1.3.102 + version: 1.3.104 '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 '@types/luxon': - specifier: ^3.3.7 - version: 3.3.7 + specifier: ^3.4.1 + version: 3.4.1 '@types/markdown-it': specifier: ^13.0.7 version: 13.0.7 '@types/node': - specifier: ^20.10.7 - version: 20.10.7 + specifier: ^20.11.5 + version: 20.11.5 '@types/sanitize-html': specifier: ^2.9.5 version: 2.9.5 @@ -161,8 +170,8 @@ devDependencies: specifier: ^0.58.3 version: 0.58.3 '@vitejs/plugin-vue': - specifier: ^5.0.2 - version: 5.0.2(vite@5.0.11)(vue@3.4.7) + specifier: ^5.0.3 + version: 5.0.3(vite@5.0.11)(vue@3.4.14) eslint: specifier: ^8.56.0 version: 8.56.0 @@ -171,28 +180,28 @@ devDependencies: version: 10.3.1 playwright: specifier: ^1.40.1 - version: 1.40.1 + version: 1.41.0 postcss-nested: specifier: ^6.0.1 - version: 6.0.1(postcss@8.4.32) + version: 6.0.1(postcss@8.4.33) prettier: - specifier: ^3.1.1 - version: 3.1.1 + specifier: ^3.2.4 + version: 3.2.4 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.2.2) + version: 10.9.2(@swc/core@1.3.104)(@types/node@20.11.5)(typescript@5.2.2) typescript: specifier: ~5.2.2 version: 5.2.2 unocss: specifier: ^0.58.3 - version: 0.58.3(postcss@8.4.32)(vite@5.0.11) + version: 0.58.3(postcss@8.4.33)(vite@5.0.11) unocss-preset-radix: specifier: ^2.5.5 version: 2.5.5 vite: specifier: ^5.0.11 - version: 5.0.11(@types/node@20.10.7) + version: 5.0.11(@types/node@20.11.5) vue-tsc: specifier: ^1.8.27 version: 1.8.27(typescript@5.2.2) @@ -212,7 +221,7 @@ packages: '@poppinss/hooks': 7.2.2 '@poppinss/macroable': 1.0.1 '@poppinss/prompts': 3.1.2 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 fastest-levenshtein: 1.0.16 jsonschema: 1.4.1 string-width: 7.0.0 @@ -231,7 +240,7 @@ packages: '@adonisjs/fold': 10.0.0 '@poppinss/hooks': 7.2.2 '@poppinss/macroable': 1.0.1 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 glob-parent: 6.0.2 tempura: 0.4.0 @@ -266,7 +275,7 @@ packages: '@paralleldrive/cuid2': 2.2.2 '@poppinss/macroable': 1.0.1 '@poppinss/multiparty': 2.0.1 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 '@types/qs': 6.9.11 bytes: 3.1.2 file-type: 18.7.0 @@ -275,7 +284,7 @@ packages: qs: 6.11.2 raw-body: 2.5.2 - /@adonisjs/cache@1.0.0-1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(@adonisjs/lucid@19.0.0-8)(tslib@2.6.2): + /@adonisjs/cache@1.0.0-1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(@adonisjs/lucid@19.0.0)(tslib@2.6.2): resolution: {integrity: sha512-MBguRldWU+/VqhFrF++oEAgFUpceOP6/wg6Q1jONUOgbak2LVMxbKOypRGJRg3lXejwYaJ1wzWsig6D421j6+A==} engines: {node: '>=18.16.0'} peerDependencies: @@ -293,8 +302,8 @@ packages: dependencies: '@adonisjs/assembler': 7.0.0(typescript@5.2.2) '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) - '@adonisjs/lucid': 19.0.0-8(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7) - '@poppinss/utils': 6.7.0 + '@adonisjs/lucid': 19.0.0(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7) + '@poppinss/utils': 6.7.1 bentocache: 1.0.0-beta.6(tslib@2.6.2) transitivePeerDependencies: - '@aws-sdk/client-dynamodb' @@ -307,7 +316,7 @@ packages: resolution: {integrity: sha512-/AP+L5vv7TyPhUivYeSk1Qc0yGhGokXVhlUOIGT+IlImxF3+mrGL/QNxxpTHxzHy3lpX3hZ+Mrg+jcjkSkOmjw==} engines: {node: '>=18.16.0'} dependencies: - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 /@adonisjs/core@6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1): resolution: {integrity: sha512-fIucNf4YjX+nIbjp6amJSShBi+2b/cnxo0KgFtOsiFLgoPcG/rUgKKrRAuOiYSXhEyg0viXz1OVFFMqEtl3jCg==} @@ -346,7 +355,7 @@ packages: '@adonisjs/repl': 4.0.0 '@paralleldrive/cuid2': 2.2.2 '@poppinss/macroable': 1.0.1 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 '@sindresorhus/is': 6.1.0 '@types/he': 1.2.3 '@vinejs/vine': 1.7.0 @@ -362,13 +371,13 @@ packages: resolution: {integrity: sha512-FerB6eN93IMtTS1wWQsUwa4jjO71oW/68v/hQMeAROTuZdHmBVz+1CMx7338K+dn1rP1NIAEJ5QZ9W3NHISqeg==} engines: {node: '>=18.16.0'} dependencies: - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 /@adonisjs/env@5.0.0: resolution: {integrity: sha512-neLEWyi2NcMPIswqfyxB4cX0WOAHsFn/FqcQiHvBpdw7bCPSQGlo8v96xxcXvh8TVOw99rW4o9ZGnO5v09kIZg==} engines: {node: '>=18.16.0'} dependencies: - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 '@poppinss/validator-lite': 1.0.3 dotenv: 16.3.1 split-lines: 3.0.0 @@ -376,7 +385,7 @@ packages: /@adonisjs/eslint-plugin@1.2.1(eslint@8.56.0)(typescript@5.2.2): resolution: {integrity: sha512-dwL0x5An5n/q1sy4ZL3eUqqTGlTJKn/Z8m53m7/DpAHtvq4QZTaxUZ3rF5WgnNiI5Q8+wyc/JcQ+lvQ4T0vH+A==} dependencies: - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) transitivePeerDependencies: - eslint - supports-color @@ -392,7 +401,7 @@ packages: dependencies: '@adonisjs/application': 8.0.0(@adonisjs/config@5.0.0)(@adonisjs/fold@10.0.0) '@adonisjs/fold': 10.0.0 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 '@sindresorhus/is': 6.1.0 emittery: 1.0.1 @@ -400,7 +409,7 @@ packages: resolution: {integrity: sha512-DsCQOsSJyo0SwMCJ3+sPNJXW0VDC3fJQwlyFM2vucdV33MzMRaFxSQlK1wrtF6KWY33Nx3sgQsOeb1hzVeG3fw==} engines: {node: '>=18.16.0'} dependencies: - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 /@adonisjs/hash@9.0.0: resolution: {integrity: sha512-QP2Wqcxvk4YGMRgyoqctcLPFfrirRekvdBAKXeX/ErRi7tJGgVcgvHU8ENgqGIABahCJVEks0hK2tO2mtpUvxQ==} @@ -415,7 +424,7 @@ packages: optional: true dependencies: '@phc/format': 1.0.0 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 /@adonisjs/http-server@7.0.0(@adonisjs/application@8.0.0)(@adonisjs/encryption@6.0.0)(@adonisjs/events@9.0.0)(@adonisjs/fold@10.0.0)(@adonisjs/logger@6.0.0): resolution: {integrity: sha512-eq/4tdNiebw9tjiBTRa16Fn+i4K2bDCZGG5RkUkawzsJN4XtHfuGGm0tAAjGNvXHu25Pf4jn3Koux9rZKB/t5A==} @@ -436,7 +445,7 @@ packages: '@poppinss/macroable': 1.0.1 '@poppinss/matchit': 3.1.2 '@poppinss/middleware': 3.2.2 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 '@sindresorhus/is': 6.1.0 accepts: 1.3.8 content-disposition: 0.5.4 @@ -454,8 +463,8 @@ packages: vary: 1.1.2 youch: 3.3.3 - /@adonisjs/inertia@1.0.0-6(@adonisjs/core@6.2.0)(@adonisjs/session@7.0.0)(@japa/api-client@2.0.2)(edge.js@6.0.1): - resolution: {integrity: sha512-DBY0DG+oF5LwPoHzsXbZn3YDc6yYgJbJHzcXO2FGv1H9l7ByP9Rv5T3sUWGSRnF19aesyJtyuFO0p94o5Li5cg==} + /@adonisjs/inertia@1.0.0-7(@adonisjs/core@6.2.0)(@adonisjs/session@7.0.0)(@japa/api-client@2.0.2)(edge.js@6.0.1): + resolution: {integrity: sha512-g4mIsoir1hOqZzOS0LJwX8q+4PcdwJ1He9/3Ou7J+wv0D9Mf0ZGc41cjyP6jEYp+UKpdTPcA+eEUSDSXCMTUdw==} engines: {node: '>=18.16.0'} peerDependencies: '@adonisjs/core': ^6.2.0 @@ -469,7 +478,7 @@ packages: '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) '@adonisjs/session': 7.0.0(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(edge.js@6.0.1) '@japa/api-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1) - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 crc-32: 1.2.2 edge-error: 4.0.1 edge.js: 6.0.1 @@ -481,16 +490,16 @@ packages: resolution: {integrity: sha512-/6SjWTT25ySOWvFL0zg6MrHW8NrLHrhDufyDA9B9b4hPyiPSyapDwGw8+11PiQW6zZnmz+GHjHni9higs96w6Q==} engines: {node: '>=18.16.0'} dependencies: - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 abstract-logging: 2.0.1 pino: 8.17.2 - /@adonisjs/lucid@19.0.0-8(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7): - resolution: {integrity: sha512-+jt3zBDcXuHSlaVT6/kxBMhzRGT4251vo1OLAQTD+OU0C2oSOe9aLgST+yLPbAo6l2+NolQlLTJOxVIrAwnp/Q==} + /@adonisjs/lucid@19.0.0(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0)(luxon@3.4.4)(sqlite3@5.1.7): + resolution: {integrity: sha512-poCchuJKORlMIQ9jAL8wH7AihZjVwHWePNJo17ISbBxlFJxKr9BBAsaCePwqGQECZXXw7QLxr0fkmAWtbc8cGw==} engines: {node: '>=18.16.0'} peerDependencies: - '@adonisjs/assembler': ^7.0.0-1 - '@adonisjs/core': ^6.1.5-36 + '@adonisjs/assembler': ^7.0.0 + '@adonisjs/core': ^6.2.0 luxon: ^3.4.4 peerDependenciesMeta: '@adonisjs/assembler': @@ -500,11 +509,11 @@ packages: dependencies: '@adonisjs/assembler': 7.0.0(typescript@5.2.2) '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) - '@adonisjs/presets': 1.0.2(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0) + '@adonisjs/presets': 2.1.1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0) '@faker-js/faker': 8.3.1 '@poppinss/hooks': 7.2.2 '@poppinss/macroable': 1.0.1 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 fast-deep-equal: 3.1.3 igniculus: 1.5.0 kleur: 4.1.5 @@ -526,15 +535,15 @@ packages: - tedious dev: false - /@adonisjs/presets@1.0.2(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0): - resolution: {integrity: sha512-h3iw6jpbQUGR5gb2EXMdW1jD2/NATsU1CS8VVqCenqLpTYcJsHsCqx1CTWMxQcM0UDhmzks9MLJZzE/DuvpZRA==} + /@adonisjs/presets@2.1.1(@adonisjs/assembler@7.0.0)(@adonisjs/core@6.2.0): + resolution: {integrity: sha512-B7REU1DeUyxwhrDpGGwdjaC3DJeUVEtuxzHrPgUlUUNL+62WjqsE8FKXpVb9uFOUX43v2DkJYAznZkr2BjveYA==} peerDependencies: '@adonisjs/assembler': ^7.0.0-0 '@adonisjs/core': ^6.1.5-34 dependencies: '@adonisjs/assembler': 7.0.0(typescript@5.2.2) '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 dev: false /@adonisjs/repl@4.0.0: @@ -565,8 +574,8 @@ packages: dependencies: '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) '@japa/api-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1) - '@japa/browser-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.40.1) - '@poppinss/utils': 6.7.0 + '@japa/browser-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.41.0) + '@poppinss/utils': 6.7.1 edge.js: 6.0.1 dev: false @@ -587,7 +596,7 @@ packages: '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) '@adonisjs/session': 7.0.0(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(edge.js@6.0.1) '@japa/api-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1) - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 csrf: 3.1.0 edge.js: 6.0.1 helmet-csp: 3.4.0 @@ -630,7 +639,7 @@ packages: defu: 6.1.4 edge-error: 4.0.1 edge.js: 6.0.1 - vite: 5.0.11(@types/node@20.10.7) + vite: 5.0.11(@types/node@20.11.5) vite-plugin-restart: 0.4.0(vite@5.0.11) dev: false @@ -639,7 +648,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 dev: true /@antfu/install-pkg@0.1.1: @@ -712,7 +721,7 @@ packages: '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 + '@babel/helpers': 7.23.8 '@babel/parser': 7.23.6 '@babel/template': 7.22.15 '@babel/traverse': 7.23.7 @@ -732,7 +741,7 @@ packages: dependencies: '@babel/types': 7.23.6 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 jsesc: 2.5.2 dev: true @@ -878,8 +887,8 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + /@babel/helpers@7.23.8: + resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 @@ -1246,20 +1255,20 @@ packages: resolution: {integrity: sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} - /@floating-ui/core@1.5.2: - resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} + /@floating-ui/core@1.5.3: + resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} dependencies: - '@floating-ui/utils': 0.1.6 + '@floating-ui/utils': 0.2.1 dev: false /@floating-ui/dom@1.1.1: resolution: {integrity: sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==} dependencies: - '@floating-ui/core': 1.5.2 + '@floating-ui/core': 1.5.3 dev: false - /@floating-ui/utils@0.1.6: - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false /@gar/promisify@1.1.3: @@ -1268,21 +1277,21 @@ packages: dev: false optional: true - /@headlessui/vue@1.7.17(vue@3.4.7): + /@headlessui/vue@1.7.17(vue@3.4.14): resolution: {integrity: sha512-hmJChv8HzKorxd9F70RGnECAwZfkvmmwOqreuKLWY/19d5qbWnSdw+DNbuA/Uo6X5rb4U5B3NrT+qBKPmjhRqw==} engines: {node: '>=10'} peerDependencies: vue: ^3.2.0 dependencies: - '@tanstack/vue-virtual': 3.0.1(vue@3.4.7) - vue: 3.4.7(typescript@5.2.2) + '@tanstack/vue-virtual': 3.0.2(vue@3.4.14) + vue: 3.4.14(typescript@5.2.2) dev: false - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1294,23 +1303,23 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@iconify/json@2.2.166: - resolution: {integrity: sha512-Cq+t8xOBWU2Dt+bECLvGnF6yxj5hEEF5rmHiEvVR68flgcmG6/ph5xDr9+YWqT3Ita1WxDtj5lVWxoEe/c+U3A==} + /@iconify/json@2.2.170: + resolution: {integrity: sha512-KJQ+LPj5KOpBrTknm0vpb2A6+T12ZyIFInubW3kT/58eZRKtiDv5D87QWVXczL5/uyDr2rkRu8rAfOrGr/UFhA==} dependencies: '@iconify/types': 2.0.0 - pathe: 1.1.1 + pathe: 1.1.2 dev: true /@iconify/types@2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: true - /@iconify/utils@2.1.14: - resolution: {integrity: sha512-9pKIntkbLbjVVFxH32td21Am3AGGJfyI2KY2d8yDQxkZe4BBZtufJI8NgcamFn8B5QKLU9ai2VMo8OEov8jAtw==} + /@iconify/utils@2.1.15: + resolution: {integrity: sha512-8chdk3NhkYiqIVxPRBPN5wGnVYaTqc8XUagCNez84Ex7yK/oNrj1XINVn7zv+JljqZbF6r5B/bd1gRNlMSwYhg==} dependencies: '@antfu/install-pkg': 0.1.1 '@antfu/utils': 0.7.7 @@ -1325,7 +1334,7 @@ packages: /@inertiajs/core@1.0.14: resolution: {integrity: sha512-S33PU6mWEYbn/s2Op+CJ6MN7ON354vWw8Y+UvtQzPt0r7pVgOuIArrqqsoulf9oQz9sbP1+vp/tCvyBzm4XmpA==} dependencies: - axios: 1.6.3 + axios: 1.6.5 deepmerge: 4.3.1 nprogress: 0.2.0 qs: 6.11.2 @@ -1333,7 +1342,7 @@ packages: - debug dev: false - /@inertiajs/vue3@1.0.14(vue@3.4.7): + /@inertiajs/vue3@1.0.14(vue@3.4.14): resolution: {integrity: sha512-lKL3Bm9k95Gw1GAq4RxgjfwSMfklkeMbvEfzwmsEBsZ4BbbWwfpC/+KS+4O4faTjjijczvkDPhMKv4duzFxtGw==} peerDependencies: vue: ^3.0.0 @@ -1341,7 +1350,7 @@ packages: '@inertiajs/core': 1.0.14 lodash.clonedeep: 4.5.0 lodash.isequal: 4.5.0 - vue: 3.4.7(typescript@5.2.2) + vue: 3.4.14(typescript@5.2.2) transitivePeerDependencies: - debug dev: false @@ -1377,11 +1386,11 @@ packages: '@poppinss/macroable': 1.0.1 '@types/chai': 4.3.11 api-contract-validator: 2.2.8(openapi-types@12.1.3) - chai: 4.3.10 + chai: 4.4.1 transitivePeerDependencies: - openapi-types - /@japa/browser-client@2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.40.1): + /@japa/browser-client@2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.41.0): resolution: {integrity: sha512-pqxdhZXDWmFpAsZnMUnqPjko0y7IwOgnAzuzN+kZZZqkrgHclo3jVsjYdtCksGl+BKexJtNKpXxwjtHjV8dTSQ==} engines: {node: '>=18.16.0'} peerDependencies: @@ -1392,7 +1401,7 @@ packages: '@japa/assert': 2.1.0(@japa/runner@3.1.1)(openapi-types@12.1.3) '@japa/runner': 3.1.1 '@sindresorhus/slugify': 2.2.1 - playwright: 1.40.1 + playwright: 1.41.0 qs: 6.11.2 /@japa/core@9.0.0: @@ -1431,11 +1440,11 @@ packages: slash: 5.1.0 dev: true - /@japa/plugin-adonisjs@2.0.3(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(@japa/runner@3.1.1)(playwright@1.40.1): - resolution: {integrity: sha512-karUZq/trLR1/3lGvrNbcf1MqML9G8SNqsLOntxuweVESwjOuci/sz600Mtz4BfmCr/2otsBbmTI7XfKoa+qfg==} + /@japa/plugin-adonisjs@3.0.0(@adonisjs/core@6.2.0)(@japa/api-client@2.0.2)(@japa/browser-client@2.0.2)(@japa/runner@3.1.1)(playwright@1.41.0): + resolution: {integrity: sha512-gw92tnOlNeVuZoI/ysX/AW9AZdACd5cm50Jpa+dUPQ7VJU7J7PQCNGhp3FF98h7czdGvw8KJvszr/grr3SENEA==} engines: {node: '>=18.16.0'} peerDependencies: - '@adonisjs/core': ^6.1.5-38 + '@adonisjs/core': ^6.2.0 '@japa/api-client': ^2.0.2 '@japa/browser-client': ^2.0.2 '@japa/runner': ^3.1.1 @@ -1450,9 +1459,9 @@ packages: dependencies: '@adonisjs/core': 6.2.0(@adonisjs/assembler@7.0.0)(@vinejs/vine@1.7.0)(edge.js@6.0.1) '@japa/api-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1) - '@japa/browser-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.40.1) + '@japa/browser-client': 2.0.2(@japa/assert@2.1.0)(@japa/runner@3.1.1)(playwright@1.41.0) '@japa/runner': 3.1.1 - playwright: 1.40.1 + playwright: 1.41.0 dev: true /@japa/runner@3.1.1: @@ -1491,7 +1500,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.21 dev: true /@jridgewell/resolve-uri@3.1.1: @@ -1507,8 +1516,8 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.21: + resolution: {integrity: sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -1524,27 +1533,27 @@ packages: /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - /@julr/tooling-configs@2.1.0(eslint@8.56.0)(prettier@3.1.1)(typescript@5.2.2): + /@julr/tooling-configs@2.1.0(eslint@8.56.0)(prettier@3.2.4)(typescript@5.2.2): resolution: {integrity: sha512-Jw/ei+NmSig/PJ1QafY7bPGsZSJXKmUHvHQG89Id55CFgkZM33Gpa09T8zDeSgCHVTg+SBCAsEaYPieuFaqweg==} dependencies: '@adonisjs/eslint-plugin': 1.2.1(eslint@8.56.0)(typescript@5.2.2) '@eslint/eslintrc': 2.1.4 - '@typescript-eslint/eslint-plugin': 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2) - '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.2.2) '@unocss/eslint-plugin': 0.57.7(eslint@8.56.0)(typescript@5.2.2) eslint-config-flat-gitignore: 0.1.2 eslint-config-prettier: 9.1.0(eslint@8.56.0) - eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0) - eslint-plugin-jsdoc: 46.9.1(eslint@8.56.0) - eslint-plugin-jsonc: 2.11.2(eslint@8.56.0) - eslint-plugin-n: 16.6.0(eslint@8.56.0) - eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.2.2)(vue-eslint-parser@9.3.2) - eslint-plugin-prettier: 5.1.2(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1) + eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-plugin-jsdoc: 46.10.1(eslint@8.56.0) + eslint-plugin-jsonc: 2.12.2(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) + eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.2.2)(vue-eslint-parser@9.4.0) + eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) eslint-plugin-unicorn: 49.0.0(eslint@8.56.0) - eslint-plugin-vue: 9.19.2(eslint@8.56.0) + eslint-plugin-vue: 9.20.1(eslint@8.56.0) jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 - vue-eslint-parser: 9.3.2(eslint@8.56.0) + vue-eslint-parser: 9.4.0(eslint@8.56.0) transitivePeerDependencies: - '@types/eslint' - astro-eslint-parser @@ -1564,7 +1573,7 @@ packages: peerDependencies: unocss: '>= 0.31.13 < 1' dependencies: - unocss: 0.58.3(postcss@8.4.32)(vite@5.0.11) + unocss: 0.58.3(postcss@8.4.33)(vite@5.0.11) dev: true /@lukeed/ms@2.0.2: @@ -1622,8 +1631,8 @@ packages: resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} engines: {node: '>=10'} - /@pkgr/core@0.1.0: - resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true @@ -1697,7 +1706,7 @@ packages: engines: {node: '>=18.16.0'} dependencies: '@poppinss/colors': 4.1.2 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 enquirer: 2.4.1 /@poppinss/utils@6.7.0: @@ -1716,6 +1725,24 @@ packages: slash: 5.1.0 slugify: 1.6.6 truncatise: 0.0.8 + dev: false + + /@poppinss/utils@6.7.1: + resolution: {integrity: sha512-M/IiE/lp493QEcDXpFHqlJGU4Tw0mw2JLCH1NgmL2UtL9QL4aTgd0MPwjIYOtikA0ug/oJwM1e7z1NKTGig/rw==} + engines: {node: '>=18.16.0'} + dependencies: + '@lukeed/ms': 2.0.2 + '@types/bytes': 3.1.4 + '@types/pluralize': 0.0.33 + bytes: 3.1.2 + case-anything: 2.1.13 + flattie: 1.1.0 + pluralize: 8.0.0 + safe-stable-stringify: 2.4.3 + secure-json-parse: 2.7.0 + slash: 5.1.0 + slugify: 1.6.6 + truncatise: 0.0.8 /@poppinss/validator-lite@1.0.3: resolution: {integrity: sha512-u4dmT7PDHwNtxY3q1jHVp/u+hMEEcBlkzd37QwwM4tVt/0mLlEDttSfPQ+TT7sqPG4VEtWKwVSlMInwPUYyJpA==} @@ -1726,6 +1753,132 @@ packages: resolution: {integrity: sha512-dUG9WQCdjKPiiqbQsahUGmOuC+9kCltckQtej7hkVIQp56xirLaMsNrOs9xMYXnIbNqK/vZCmoEk+q1Nda+2AA==} dev: true + /@resvg/resvg-js-android-arm-eabi@2.6.0: + resolution: {integrity: sha512-lJnZ/2P5aMocrFMW7HWhVne5gH82I8xH6zsfH75MYr4+/JOaVcGCTEQ06XFohGMdYRP3v05SSPLPvTM/RHjxfA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-android-arm64@2.6.0: + resolution: {integrity: sha512-N527f529bjMwYWShZYfBD60dXA4Fux+D695QsHQ93BDYZSHUoOh1CUGUyICevnTxs7VgEl98XpArmUWBZQVMfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-darwin-arm64@2.6.0: + resolution: {integrity: sha512-MabUKLVayEwlPo0mIqAmMt+qESN8LltCvv5+GLgVga1avpUrkxj/fkU1TKm8kQegutUjbP/B0QuMuUr0uhF8ew==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-darwin-x64@2.6.0: + resolution: {integrity: sha512-zrFetdnSw/suXjmyxSjfDV7i61hahv6DDG6kM7BYN2yJ3Es5+BZtqYZTcIWogPJedYKmzN1YTMWGd/3f0ubFiA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm-gnueabihf@2.6.0: + resolution: {integrity: sha512-sH4gxXt7v7dGwjGyzLwn7SFGvwZG6DQqLaZ11MmzbCwd9Zosy1TnmrMJfn6TJ7RHezmQMgBPi18bl55FZ1AT4A==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm64-gnu@2.6.0: + resolution: {integrity: sha512-fCyMncqCJtrlANADIduYF4IfnWQ295UKib7DAxFXQhBsM9PLDTpizr0qemZcCNadcwSVHnAIzL4tliZhCM8P6A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-arm64-musl@2.6.0: + resolution: {integrity: sha512-ouLjTgBQHQyxLht4FdMPTvuY8xzJigM9EM2Tlu0llWkN1mKyTQrvYWi6TA6XnKdzDJHy7ZLpWpjZi7F5+Pg+Vg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-x64-gnu@2.6.0: + resolution: {integrity: sha512-n3zC8DWsvxC1AwxpKFclIPapDFibs5XdIRoV/mcIlxlh0vseW1F49b97F33BtJQRmlntsqqN6GMMqx8byB7B+Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-linux-x64-musl@2.6.0: + resolution: {integrity: sha512-n4tasK1HOlAxdTEROgYA1aCfsEKk0UOFDNd/AQTTZlTmCbHKXPq+O8npaaKlwXquxlVK8vrkcWbksbiGqbCAcw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-arm64-msvc@2.6.0: + resolution: {integrity: sha512-X2+EoBJFwDI5LDVb51Sk7ldnVLitMGr9WwU/i21i3fAeAXZb3hM16k67DeTy16OYkT2dk/RfU1tP1wG+rWbz2Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-ia32-msvc@2.6.0: + resolution: {integrity: sha512-L7oevWjQoUgK5W1fCKn0euSVemhDXVhrjtwqpc7MwBKKimYeiOshO1Li1pa8bBt5PESahenhWgdB6lav9O0fEg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js-win32-x64-msvc@2.6.0: + resolution: {integrity: sha512-8lJlghb+Unki5AyKgsnFbRJwkEj9r1NpwyuBG8yEJiG1W9eEGl03R3I7bsVa3haof/3J1NlWf0rzSa1G++A2iw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@resvg/resvg-js@2.6.0: + resolution: {integrity: sha512-Tf3YpbBKcQn991KKcw/vg7vZf98v01seSv6CVxZBbRkL/xyjnoYB6KgrFL6zskT1A4dWC/vg77KyNOW+ePaNlA==} + engines: {node: '>= 10'} + optionalDependencies: + '@resvg/resvg-js-android-arm-eabi': 2.6.0 + '@resvg/resvg-js-android-arm64': 2.6.0 + '@resvg/resvg-js-darwin-arm64': 2.6.0 + '@resvg/resvg-js-darwin-x64': 2.6.0 + '@resvg/resvg-js-linux-arm-gnueabihf': 2.6.0 + '@resvg/resvg-js-linux-arm64-gnu': 2.6.0 + '@resvg/resvg-js-linux-arm64-musl': 2.6.0 + '@resvg/resvg-js-linux-x64-gnu': 2.6.0 + '@resvg/resvg-js-linux-x64-musl': 2.6.0 + '@resvg/resvg-js-win32-arm64-msvc': 2.6.0 + '@resvg/resvg-js-win32-ia32-msvc': 2.6.0 + '@resvg/resvg-js-win32-x64-msvc': 2.6.0 + dev: false + /@rollup/pluginutils@5.1.0: resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} @@ -1740,97 +1893,106 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.9.1: - resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + /@rollup/rollup-android-arm-eabi@4.9.5: + resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} cpu: [arm] os: [android] requiresBuild: true optional: true - /@rollup/rollup-android-arm64@4.9.1: - resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + /@rollup/rollup-android-arm64@4.9.5: + resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==} cpu: [arm64] os: [android] requiresBuild: true optional: true - /@rollup/rollup-darwin-arm64@4.9.1: - resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + /@rollup/rollup-darwin-arm64@4.9.5: + resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-darwin-x64@4.9.1: - resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + /@rollup/rollup-darwin-x64@4.9.5: + resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.9.1: - resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.9.5: + resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.9.1: - resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + /@rollup/rollup-linux-arm64-gnu@4.9.5: + resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-arm64-musl@4.9.1: - resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + /@rollup/rollup-linux-arm64-musl@4.9.5: + resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.9.1: - resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + /@rollup/rollup-linux-riscv64-gnu@4.9.5: + resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==} cpu: [riscv64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-gnu@4.9.1: - resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + /@rollup/rollup-linux-x64-gnu@4.9.5: + resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-linux-x64-musl@4.9.1: - resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + /@rollup/rollup-linux-x64-musl@4.9.5: + resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.9.1: - resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + /@rollup/rollup-win32-arm64-msvc@4.9.5: + resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.9.1: - resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + /@rollup/rollup-win32-ia32-msvc@4.9.5: + resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@rollup/rollup-win32-x64-msvc@4.9.1: - resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + /@rollup/rollup-win32-x64-msvc@4.9.5: + resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==} cpu: [x64] os: [win32] requiresBuild: true optional: true + /@shuding/opentype.js@1.4.0-beta.0: + resolution: {integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==} + engines: {node: '>= 8.0.0'} + hasBin: true + dependencies: + fflate: 0.7.4 + string.prototype.codepointat: 0.2.1 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1861,8 +2023,8 @@ packages: dependencies: escape-string-regexp: 5.0.0 - /@swc/core-darwin-arm64@1.3.102: - resolution: {integrity: sha512-CJDxA5Wd2cUMULj3bjx4GEoiYyyiyL8oIOu4Nhrs9X+tlg8DnkCm4nI57RJGP8Mf6BaXPIJkHX8yjcefK2RlDA==} + /@swc/core-darwin-arm64@1.3.104: + resolution: {integrity: sha512-rCnVj8x3kn6s914Adddu+zROHUn6mUEMkNKUckofs3W9OthNlZXJA3C5bS2MMTRFXCWamJ0Zmh6INFpz+f4Tfg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -1870,8 +2032,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.102: - resolution: {integrity: sha512-X5akDkHwk6oAer49oER0qZMjNMkLH3IOZaV1m98uXIasAGyjo5WH1MKPeMLY1sY6V6TrufzwiSwD4ds571ytcg==} + /@swc/core-darwin-x64@1.3.104: + resolution: {integrity: sha512-LBCWGTYkn1UjyxrmcLS3vZgtCDVhwxsQMV7jz5duc7Gas8SRWh6ZYqvUkjlXMDX1yx0uvzHrkaRw445+zDRj7Q==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -1879,8 +2041,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.102: - resolution: {integrity: sha512-kJH3XtZP9YQdjq/wYVBeFuiVQl4HaC4WwRrIxAHwe2OyvrwUI43dpW3LpxSggBnxXcVCXYWf36sTnv8S75o2Gw==} + /@swc/core-linux-arm-gnueabihf@1.3.104: + resolution: {integrity: sha512-iFbsWcx0TKHWnFBNCuUstYqRtfkyBx7FKv5To1Hx14EMuvvoCD/qUoJEiNfDQN5n/xU9g5xq4RdbjEWCFLhAbA==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -1888,8 +2050,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.102: - resolution: {integrity: sha512-flQP2WDyCgO24WmKA1wjjTx+xfCmavUete2Kp6yrM+631IHLGnr17eu7rYJ/d4EnDBId/ytMyrnWbTVkaVrpbQ==} + /@swc/core-linux-arm64-gnu@1.3.104: + resolution: {integrity: sha512-1BIIp+nUPrRHHaJ35YJqrwXPwYSITp5robqqjyTwoKGw2kq0x+A964kpWul6v0d7A9Ial8fyH4m13eSWBodD2A==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1897,8 +2059,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.102: - resolution: {integrity: sha512-bQEQSnC44DyoIGLw1+fNXKVGoCHi7eJOHr8BdH0y1ooy9ArskMjwobBFae3GX4T1AfnrTaejyr0FvLYIb0Zkog==} + /@swc/core-linux-arm64-musl@1.3.104: + resolution: {integrity: sha512-IyDNkzpKwvLqmRwTW+s8f8OsOSSj1N6juZKbvNHpZRfWZkz3T70q3vJlDBWQwy8z8cm7ckd7YUT3eKcSBPPowg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1906,8 +2068,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.102: - resolution: {integrity: sha512-dFvnhpI478svQSxqISMt00MKTDS0e4YtIr+ioZDG/uJ/q+RpcNy3QI2KMm05Fsc8Y0d4krVtvCKWgfUMsJZXAg==} + /@swc/core-linux-x64-gnu@1.3.104: + resolution: {integrity: sha512-MfX/wiRdTjE5uXHTDnaX69xI4UBfxIhcxbVlMj//N+7AX/G2pl2UFityfVMU2HpM12BRckrCxVI8F/Zy3DZkYQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1915,8 +2077,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.102: - resolution: {integrity: sha512-+a0M3CvjeIRNA/jTCzWEDh2V+mhKGvLreHOL7J97oULZy5yg4gf7h8lQX9J8t9QLbf6fsk+0F8bVH1Ie/PbXjA==} + /@swc/core-linux-x64-musl@1.3.104: + resolution: {integrity: sha512-5yeILaxA31gGEmquErO8yxlq1xu0XVt+fz5mbbKXKZMRRILxYxNzAGb5mzV41r0oHz6Vhv4AXX/WMCmeWl+HkQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1924,8 +2086,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.102: - resolution: {integrity: sha512-w76JWLjkZNOfkB25nqdWUNCbt0zJ41CnWrJPZ+LxEai3zAnb2YtgB/cCIrwxDebRuMgE9EJXRj7gDDaTEAMOOQ==} + /@swc/core-win32-arm64-msvc@1.3.104: + resolution: {integrity: sha512-rwcImsYnWDWGmeESG0XdGGOql5s3cG5wA8C4hHHKdH76zamPfDKKQFBsjmoNi0f1IsxaI9AJPeOmD4bAhT1ZoQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -1933,8 +2095,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.102: - resolution: {integrity: sha512-vlDb09HiGqKwz+2cxDS9T5/461ipUQBplvuhW+cCbzzGuPq8lll2xeyZU0N1E4Sz3MVdSPx1tJREuRvlQjrwNg==} + /@swc/core-win32-ia32-msvc@1.3.104: + resolution: {integrity: sha512-ICDA+CJLYC7NkePnrbh/MvXwDQfy3rZSFgrVdrqRosv9DKHdFjYDnA9++7ozjrIdFdBrFW2NR7pyUcidlwhNzA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -1942,8 +2104,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.102: - resolution: {integrity: sha512-E/jfSD7sShllxBwwgDPeXp1UxvIqehj/ShSUqq1pjR/IDRXngcRSXKJK92mJkNFY7suH6BcCWwzrxZgkO7sWmw==} + /@swc/core-win32-x64-msvc@1.3.104: + resolution: {integrity: sha512-fZJ1Ju62U4lMZVU+nHxLkFNcu0hG5Y0Yj/5zjrlbuX5N8J5eDndWAFsVnQhxRTZqKhZB53pvWRQs5FItSDqgXg==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -1951,8 +2113,8 @@ packages: dev: true optional: true - /@swc/core@1.3.102: - resolution: {integrity: sha512-OAjNLY/f6QWKSDzaM3bk31A+OYHu6cPa9P/rFIx8X5d24tHXUpRiiq6/PYI6SQRjUPlB72GjsjoEU8F+ALadHg==} + /@swc/core@1.3.104: + resolution: {integrity: sha512-9LWH/qzR/Pmyco+XwPiPfz59T1sryI7o5dmqb593MfCkaX5Fzl9KhwQTI47i21/bXYuCdfa9ySZuVkzXMirYxA==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -1964,16 +2126,16 @@ packages: '@swc/counter': 0.1.2 '@swc/types': 0.1.5 optionalDependencies: - '@swc/core-darwin-arm64': 1.3.102 - '@swc/core-darwin-x64': 1.3.102 - '@swc/core-linux-arm-gnueabihf': 1.3.102 - '@swc/core-linux-arm64-gnu': 1.3.102 - '@swc/core-linux-arm64-musl': 1.3.102 - '@swc/core-linux-x64-gnu': 1.3.102 - '@swc/core-linux-x64-musl': 1.3.102 - '@swc/core-win32-arm64-msvc': 1.3.102 - '@swc/core-win32-ia32-msvc': 1.3.102 - '@swc/core-win32-x64-msvc': 1.3.102 + '@swc/core-darwin-arm64': 1.3.104 + '@swc/core-darwin-x64': 1.3.104 + '@swc/core-linux-arm-gnueabihf': 1.3.104 + '@swc/core-linux-arm64-gnu': 1.3.104 + '@swc/core-linux-arm64-musl': 1.3.104 + '@swc/core-linux-x64-gnu': 1.3.104 + '@swc/core-linux-x64-musl': 1.3.104 + '@swc/core-win32-arm64-msvc': 1.3.104 + '@swc/core-win32-ia32-msvc': 1.3.104 + '@swc/core-win32-x64-msvc': 1.3.104 dev: true /@swc/counter@0.1.2: @@ -1988,13 +2150,13 @@ packages: resolution: {integrity: sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==} dev: false - /@tanstack/vue-virtual@3.0.1(vue@3.4.7): - resolution: {integrity: sha512-85Cyi8m7h1xzGB2FyXMurPVFOZvatycVU7OfhQ8QFk27E4tQ7ISNfYEMrakTTaE0ZyNsKRFlAzHuwL1Bv1vuMw==} + /@tanstack/vue-virtual@3.0.2(vue@3.4.14): + resolution: {integrity: sha512-1iFpX+yZswHuf4wrA6GU9yJ/YzQ/8SacABwqghwCkcwrkZbOPLlRSdOAqZ1WQ50SftmfhZpaiZl2KmpV7cgfMQ==} peerDependencies: vue: ^2.7.0 || ^3.0.0 dependencies: '@tanstack/virtual-core': 3.0.0 - vue: 3.4.7(typescript@5.2.2) + vue: 3.4.14(typescript@5.2.2) dev: false /@tokenizer/token@0.3.0: @@ -2042,7 +2204,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/he@1.2.3: resolution: {integrity: sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==} @@ -2071,8 +2232,13 @@ packages: /@types/linkify-it@3.0.5: resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} - /@types/luxon@3.3.7: - resolution: {integrity: sha512-gKc9P2d4g5uYwmy4s/MO/yOVPmvHyvzka1YH6i5dM03UrFofHSmgc0D0ymbDRStFWHusk6cwwF6nhLm/ckBbbQ==} + /@types/luxon@3.3.8: + resolution: {integrity: sha512-jYvz8UMLDgy3a5SkGJne8H7VA7zPV2Lwohjx0V8V31+SqAjNmurWMkk9cQhfvlcnXWudBpK9xPM1n4rljOcHYQ==} + dev: false + + /@types/luxon@3.4.1: + resolution: {integrity: sha512-m1KQEZZCITtheRhMVq5jDvAl0HwFhunLs7x6tpFFvUTJpKfmewS/Ymg+YA97/s8w1I1nC4pJyi0aAnn+vf3yew==} + dev: true /@types/markdown-it@13.0.7: resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} @@ -2083,8 +2249,8 @@ packages: /@types/mdurl@1.0.5: resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} - /@types/node@20.10.7: - resolution: {integrity: sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==} + /@types/node@20.11.5: + resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==} dependencies: undici-types: 5.26.5 @@ -2112,10 +2278,10 @@ packages: resolution: {integrity: sha512-mEafCgyKiMFin24SDzWN7yAADt4gt6YawFiNMp0QS5ZPboORfyxFt0s3VzJKhTaKg9py/4FUmrHLTNfJKt9Rbw==} dependencies: '@types/cookiejar': 2.1.5 - '@types/node': 20.10.7 + '@types/node': 20.11.5 - /@types/validator@13.11.7: - resolution: {integrity: sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==} + /@types/validator@13.11.8: + resolution: {integrity: sha512-c/hzNDBh7eRF+KbCf+OoZxKbnkpaK/cKp9iLQWqB7muXtM+MtL9SUUH8vCFcLn6dH1Qm05jiexK0ofWY7TfOhQ==} /@types/web-bluetooth@0.0.20: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -2129,8 +2295,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2): - resolution: {integrity: sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==} + /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.2.2): + resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2141,11 +2307,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/type-utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 @@ -2158,8 +2324,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.2.2): - resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==} + /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.2.2): + resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2168,10 +2334,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 eslint: 8.56.0 typescript: 5.2.2 @@ -2179,16 +2345,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.16.0: - resolution: {integrity: sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw==} + /@typescript-eslint/scope-manager@6.19.0: + resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 dev: true - /@typescript-eslint/type-utils@6.16.0(eslint@8.56.0)(typescript@5.2.2): - resolution: {integrity: sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg==} + /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.2.2): + resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2197,8 +2363,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.2.2) @@ -2207,13 +2373,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.16.0: - resolution: {integrity: sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ==} + /@typescript-eslint/types@6.19.0: + resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.16.0(typescript@5.2.2): - resolution: {integrity: sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA==} + /@typescript-eslint/typescript-estree@6.19.0(typescript@5.2.2): + resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2221,8 +2387,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/visitor-keys': 6.16.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/visitor-keys': 6.19.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -2234,8 +2400,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.16.0(eslint@8.56.0)(typescript@5.2.2): - resolution: {integrity: sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==} + /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.2.2): + resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2243,9 +2409,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.16.0 - '@typescript-eslint/types': 6.16.0 - '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.19.0 + '@typescript-eslint/types': 6.19.0 + '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.2.2) eslint: 8.56.0 semver: 7.5.4 transitivePeerDependencies: @@ -2253,11 +2419,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.16.0: - resolution: {integrity: sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A==} + /@typescript-eslint/visitor-keys@6.19.0: + resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.16.0 + '@typescript-eslint/types': 6.19.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2276,7 +2442,7 @@ packages: '@unocss/core': 0.58.3 '@unocss/reset': 0.58.3 '@unocss/vite': 0.58.3(vite@5.0.11) - vite: 5.0.11(@types/node@20.10.7) + vite: 5.0.11(@types/node@20.11.5) transitivePeerDependencies: - rollup dev: true @@ -2297,7 +2463,7 @@ packages: consola: 3.2.3 fast-glob: 3.3.2 magic-string: 0.30.5 - pathe: 1.1.1 + pathe: 1.1.2 perfect-debounce: 1.0.0 transitivePeerDependencies: - rollup @@ -2335,7 +2501,7 @@ packages: resolution: {integrity: sha512-nwj7UJF7wCfPVl5B7cUB0xrSk6yuVMdMgABnsy4N5xBlds8cclrUO+boaTB9qzh8Lg9nfJVLB3+cW3po2SJoew==} engines: {node: '>=14'} dependencies: - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) '@unocss/config': 0.57.7 '@unocss/core': 0.57.7 magic-string: 0.30.5 @@ -2361,7 +2527,7 @@ packages: sirv: 2.0.4 dev: true - /@unocss/postcss@0.58.3(postcss@8.4.32): + /@unocss/postcss@0.58.3(postcss@8.4.33): resolution: {integrity: sha512-y1WQNvLUidypCu/tr6oJfaV4pjd8Lsk1N27ASEVsvockOH3MekRYpHtJfTl2fMk+1Y98AHv7hPAVjM2NlvhDow==} engines: {node: '>=14'} peerDependencies: @@ -2373,7 +2539,7 @@ packages: css-tree: 2.3.1 fast-glob: 3.3.2 magic-string: 0.30.5 - postcss: 8.4.32 + postcss: 8.4.33 dev: true /@unocss/preset-attributify@0.58.3: @@ -2385,7 +2551,7 @@ packages: /@unocss/preset-icons@0.58.3: resolution: {integrity: sha512-SA4Eu4rOQ9+zUgIyK6RacS01ygm0PJWkqKlD8ccrBqEyZapqiU+vLL+v6X8YVjoZjR+5CVgcMD5Km7zEQgqXQw==} dependencies: - '@iconify/utils': 2.1.14 + '@iconify/utils': 2.1.15 '@unocss/core': 0.58.3 ofetch: 1.3.3 transitivePeerDependencies: @@ -2505,13 +2671,13 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.2 magic-string: 0.30.5 - vite: 5.0.11(@types/node@20.10.7) + vite: 5.0.11(@types/node@20.11.5) transitivePeerDependencies: - rollup dev: true - /@vinejs/compiler@2.3.0: - resolution: {integrity: sha512-IM9AbNT5Ug4CMpMff5PYOD9J7aVv/y7quW16MmO0LFZKsmqBDdAnTt7qFm8eab0w8bmqBT+cGCB4CvB4wsACew==} + /@vinejs/compiler@2.4.0: + resolution: {integrity: sha512-qEhp+Ux4wCeyYlQpB5TddjlRRyxbZz4RVYG/UHGnnnn3eOw326dZGCJldOOEl6huBFoOguMUQfhKLLSjJ0v+XQ==} engines: {node: '>=18.0.0'} /@vinejs/vine@1.7.0: @@ -2519,23 +2685,23 @@ packages: engines: {node: '>=18.16.0'} dependencies: '@poppinss/macroable': 1.0.1 - '@types/validator': 13.11.7 - '@vinejs/compiler': 2.3.0 + '@types/validator': 13.11.8 + '@vinejs/compiler': 2.4.0 camelcase: 8.0.0 dayjs: 1.11.10 dlv: 1.1.3 normalize-url: 8.0.0 validator: 13.11.0 - /@vitejs/plugin-vue@5.0.2(vite@5.0.11)(vue@3.4.7): - resolution: {integrity: sha512-kEjJHrLb5ePBvjD0SPZwJlw1QTRcjjCA9sB5VyfonoXVBxTS7TMnqL6EkLt1Eu61RDeiuZ/WN9Hf6PxXhPI2uA==} + /@vitejs/plugin-vue@5.0.3(vite@5.0.11)(vue@3.4.14): + resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.11(@types/node@20.10.7) - vue: 3.4.7(typescript@5.2.2) + vite: 5.0.11(@types/node@20.11.5) + vue: 3.4.14(typescript@5.2.2) dev: true /@volar/language-core@1.11.1: @@ -2557,56 +2723,39 @@ packages: path-browserify: 1.0.1 dev: true - /@vue/compiler-core@3.4.0: - resolution: {integrity: sha512-cw4S15PkNGTKkP9OFFl4wnQoJJk+HqaYBafgrpDnSukiQGpcYJeRpzmqnCVCIkl6V6Eqsv58E0OAdl6b592vuA==} + /@vue/compiler-core@3.4.14: + resolution: {integrity: sha512-ro4Zzl/MPdWs7XwxT7omHRxAjMbDFRZEEjD+2m3NBf8YzAe3HuoSEZosXQo+m1GQ1G3LQ1LdmNh1RKTYe+ssEg==} dependencies: '@babel/parser': 7.23.6 - '@vue/shared': 3.4.0 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.0.2 - dev: true - - /@vue/compiler-core@3.4.7: - resolution: {integrity: sha512-hhCaE3pTMrlIJK7M/o3Xf7HV8+JoNTGOQ/coWS+V+pH6QFFyqtoXqQzpqsNp7UK17xYKua/MBiKj4e1vgZOBYw==} - dependencies: - '@babel/parser': 7.23.6 - '@vue/shared': 3.4.7 + '@vue/shared': 3.4.14 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 - /@vue/compiler-dom@3.4.0: - resolution: {integrity: sha512-E957uOhpoE48YjZGWeAoLmNYd3UeU4oIP8kJi8Rcsb9l2tV8Z48Jn07Zgq1aW0v3vuhlmydEKkKKbhLpADHXEA==} + /@vue/compiler-dom@3.4.14: + resolution: {integrity: sha512-nOZTY+veWNa0DKAceNWxorAbWm0INHdQq7cejFaWM1WYnoNSJbSEKYtE7Ir6lR/+mo9fttZpPVI9ZFGJ1juUEQ==} dependencies: - '@vue/compiler-core': 3.4.0 - '@vue/shared': 3.4.0 - dev: true - - /@vue/compiler-dom@3.4.7: - resolution: {integrity: sha512-qDKBAIurCTub4n/6jDYkXwgsFuriqqmmLrIq1N2QDfYJA/mwiwvxi09OGn28g+uDdERX9NaKDLji0oTjE3sScg==} - dependencies: - '@vue/compiler-core': 3.4.7 - '@vue/shared': 3.4.7 + '@vue/compiler-core': 3.4.14 + '@vue/shared': 3.4.14 - /@vue/compiler-sfc@3.4.7: - resolution: {integrity: sha512-Gec6CLkReVswDYjQFq79O5rktri4R7TsD/VPCiUoJw40JhNNxaNJJa8mrQrWoJluW4ETy6QN0NUyC/JO77OCOw==} + /@vue/compiler-sfc@3.4.14: + resolution: {integrity: sha512-1vHc9Kv1jV+YBZC/RJxQJ9JCxildTI+qrhtDh6tPkR1O8S+olBUekimY0km0ZNn8nG1wjtFAe9XHij+YLR8cRQ==} dependencies: '@babel/parser': 7.23.6 - '@vue/compiler-core': 3.4.7 - '@vue/compiler-dom': 3.4.7 - '@vue/compiler-ssr': 3.4.7 - '@vue/shared': 3.4.7 + '@vue/compiler-core': 3.4.14 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 estree-walker: 2.0.2 magic-string: 0.30.5 - postcss: 8.4.32 + postcss: 8.4.33 source-map-js: 1.0.2 - /@vue/compiler-ssr@3.4.7: - resolution: {integrity: sha512-PvYeSOvnCkST5mGS0TLwEn5w+4GavtEn6adcq8AspbHaIr+mId5hp7cG3ASy3iy8b+LuXEG2/QaV/nj5BQ/Aww==} + /@vue/compiler-ssr@3.4.14: + resolution: {integrity: sha512-bXT6+oAGlFjTYVOTtFJ4l4Jab1wjsC0cfSfOe2B4Z0N2vD2zOBSQ9w694RsCfhjk+bC2DY5Gubb1rHZVii107Q==} dependencies: - '@vue/compiler-dom': 3.4.7 - '@vue/shared': 3.4.7 + '@vue/compiler-dom': 3.4.14 + '@vue/shared': 3.4.14 /@vue/language-core@1.8.27(typescript@5.2.2): resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} @@ -2618,8 +2767,8 @@ packages: dependencies: '@volar/language-core': 1.11.1 '@volar/source-map': 1.11.1 - '@vue/compiler-dom': 3.4.0 - '@vue/shared': 3.4.0 + '@vue/compiler-dom': 3.4.14 + '@vue/shared': 3.4.14 computeds: 0.0.1 minimatch: 9.0.3 muggle-string: 0.3.1 @@ -2628,60 +2777,56 @@ packages: vue-template-compiler: 2.7.16 dev: true - /@vue/reactivity@3.4.7: - resolution: {integrity: sha512-F539DO0ogH0+L8F9Pnw7cjqibcmSOh5UTk16u5f4MKQ8fraqepI9zdh+sozPX6VmEHOcjo8qw3Or9ZcFFw4SZA==} + /@vue/reactivity@3.4.14: + resolution: {integrity: sha512-xRYwze5Q4tK7tT2J4uy4XLhK/AIXdU5EBUu9PLnIHcOKXO0uyXpNNMzlQKuq7B+zwtq6K2wuUL39pHA6ZQzObw==} dependencies: - '@vue/shared': 3.4.7 + '@vue/shared': 3.4.14 - /@vue/runtime-core@3.4.7: - resolution: {integrity: sha512-QMMsWRQaD3BpGyjjChthpl4Mji4Fjx1qfdufsXlDkKU3HV+hWNor2z+29F+E1MmVcP0ZfRZUfqYgtsQoL7IGwQ==} + /@vue/runtime-core@3.4.14: + resolution: {integrity: sha512-qu+NMkfujCoZL6cfqK5NOfxgXJROSlP2ZPs4CTcVR+mLrwl4TtycF5Tgo0QupkdBL+2kigc6EsJlTcuuZC1NaQ==} dependencies: - '@vue/reactivity': 3.4.7 - '@vue/shared': 3.4.7 + '@vue/reactivity': 3.4.14 + '@vue/shared': 3.4.14 - /@vue/runtime-dom@3.4.7: - resolution: {integrity: sha512-XwegyUY1rw8zxsX1Z36vwYcqo+uOgih5ti7y9vx+pPFhNdSQmN4LqK2RmSeAJG1oKV8NqSUmjpv92f/x6h0SeQ==} + /@vue/runtime-dom@3.4.14: + resolution: {integrity: sha512-B85XmcR4E7XsirEHVqhmy4HPbRT9WLFWV9Uhie3OapV9m1MEN9+Er6hmUIE6d8/l2sUygpK9RstFM2bmHEUigA==} dependencies: - '@vue/runtime-core': 3.4.7 - '@vue/shared': 3.4.7 + '@vue/runtime-core': 3.4.14 + '@vue/shared': 3.4.14 csstype: 3.1.3 - /@vue/server-renderer@3.4.7(vue@3.4.7): - resolution: {integrity: sha512-3bWnYLEkLLhkDWqvNk7IvbQD4UcxvFKxELBiOO2iG3m6AniFIsBWfHOO5tLVQnjdWkODu4rq0GipmfEenVAK5Q==} + /@vue/server-renderer@3.4.14(vue@3.4.14): + resolution: {integrity: sha512-pwSKXQfYdJBTpvWHGEYI+akDE18TXAiLcGn+Q/2Fj8wQSHWztoo7PSvfMNqu6NDhp309QXXbPFEGCU5p85HqkA==} peerDependencies: - vue: 3.4.7 + vue: 3.4.14 dependencies: - '@vue/compiler-ssr': 3.4.7 - '@vue/shared': 3.4.7 - vue: 3.4.7(typescript@5.2.2) + '@vue/compiler-ssr': 3.4.14 + '@vue/shared': 3.4.14 + vue: 3.4.14(typescript@5.2.2) - /@vue/shared@3.4.0: - resolution: {integrity: sha512-Nhh3ed3G1R6HDAWiG6YYFt0Zmq/To6u5vjzwa9TIquGheCXPY6nEdIAO8ZdlwXsWqC2yNLj700FOvShpYt5CEA==} - dev: true + /@vue/shared@3.4.14: + resolution: {integrity: sha512-nmi3BtLpvqXAWoRZ6HQ+pFJOHBU4UnH3vD3opgmwXac7vhaHKA9nj1VeGjMggdB9eLtW83eHyPCmOU1qzdsC7Q==} - /@vue/shared@3.4.7: - resolution: {integrity: sha512-G+i4glX1dMJk88sbJEcQEGWRQnVm9eIY7CcQbO5dpdsD9SF8jka3Mr5OqZYGjczGN1+D6EUwdu6phcmcx9iuPA==} - - /@vueuse/core@10.7.1(vue@3.4.7): - resolution: {integrity: sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==} + /@vueuse/core@10.7.2(vue@3.4.14): + resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==} dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.7.1 - '@vueuse/shared': 10.7.1(vue@3.4.7) - vue-demi: 0.14.6(vue@3.4.7) + '@vueuse/metadata': 10.7.2 + '@vueuse/shared': 10.7.2(vue@3.4.14) + vue-demi: 0.14.6(vue@3.4.14) transitivePeerDependencies: - '@vue/composition-api' - vue dev: false - /@vueuse/metadata@10.7.1: - resolution: {integrity: sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==} + /@vueuse/metadata@10.7.2: + resolution: {integrity: sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==} dev: false - /@vueuse/shared@10.7.1(vue@3.4.7): - resolution: {integrity: sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==} + /@vueuse/shared@10.7.2(vue@3.4.14): + resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==} dependencies: - vue-demi: 0.14.6(vue@3.4.7) + vue-demi: 0.14.6(vue@3.4.14) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -2717,8 +2862,8 @@ packages: acorn: 8.11.3 dev: true - /acorn-walk@8.3.1: - resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} dev: true @@ -2920,10 +3065,10 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - /axios@1.6.3: - resolution: {integrity: sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==} + /axios@1.6.5: + resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} dependencies: - follow-redirects: 1.15.3 + follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -2933,6 +3078,11 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base64-js@0.0.8: + resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} + engines: {node: '>= 0.4'} + dev: false + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3006,8 +3156,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001572 - electron-to-chromium: 1.4.616 + caniuse-lite: 1.0.30001578 + electron-to-chromium: 1.4.636 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true @@ -3078,7 +3228,7 @@ packages: dependencies: function-bind: 1.1.2 get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + set-function-length: 1.2.0 /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -3092,16 +3242,20 @@ packages: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} - /caniuse-lite@1.0.30001572: - resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==} + /camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + dev: false + + /caniuse-lite@1.0.30001578: + resolution: {integrity: sha512-J/jkFgsQ3NEl4w2lCoM9ZPxrD+FoBNJ7uJUpGVjIg/j0OwJosWM36EPDv+Yyi0V4twBk9pPmlFS+PLykgEvUmg==} dev: true /case-anything@2.1.13: resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} engines: {node: '>=12.13'} - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -3390,7 +3544,7 @@ packages: /cron@3.1.6: resolution: {integrity: sha512-cvFiQCeVzsA+QPM6fhjBtlKGij7tLLISnTSvFxVdnFGLdz+ZdXN37kNe0i2gefmdD17XuZA6n2uPVwzl4FxW/w==} dependencies: - '@types/luxon': 3.3.7 + '@types/luxon': 3.3.8 luxon: 3.4.4 dev: false @@ -3414,6 +3568,27 @@ packages: uid-safe: 2.1.5 dev: false + /css-background-parser@0.1.0: + resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} + dev: false + + /css-box-shadow@1.0.0-3: + resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} + dev: false + + /css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + dev: false + + /css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + dev: false + /css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -3524,13 +3699,8 @@ packages: gopd: 1.0.1 has-property-descriptors: 1.0.1 - /defu@6.1.3: - resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} - dev: true - /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: false /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -3635,8 +3805,8 @@ packages: dependencies: edge-error: 4.0.1 - /edge-parser@9.0.0: - resolution: {integrity: sha512-siAaPIurCk3L9TPze0NbLeXvg2xeoHlkurxyjXJn1sLrBeyzQmFlFWKvQY6vaTPc52et4beNDjUGcAe78rfrdA==} + /edge-parser@9.0.1: + resolution: {integrity: sha512-E6N8GRlI6gnVDpy1VmxZzY+zhB24cmjb0jrLbeXATBX+GM8XntFybQERMfCrt4wkV1LRTpKZ8F6gzupRxAo9zQ==} engines: {node: '>=18.16.0'} dependencies: acorn: 8.11.3 @@ -3651,11 +3821,11 @@ packages: dependencies: '@poppinss/inspect': 1.0.1 '@poppinss/macroable': 1.0.1 - '@poppinss/utils': 6.7.0 + '@poppinss/utils': 6.7.1 classnames: 2.5.1 edge-error: 4.0.1 edge-lexer: 6.0.1 - edge-parser: 9.0.0 + edge-parser: 9.0.1 fs-readdir-recursive: 1.1.0 he: 1.2.0 js-stringify: 1.0.2 @@ -3665,8 +3835,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.616: - resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==} + /electron-to-chromium@1.4.636: + resolution: {integrity: sha512-NLE0GIy1OL9wRiKL20h9TkctBEYZuc99tquSS9MVdTahnuHputoETHeqDzgqGqyOY9NUH0g9wjfEuw5OD+wRcQ==} dev: true /emittery@1.0.1: @@ -3793,6 +3963,16 @@ packages: eslint: 8.56.0 dev: true + /eslint-compat-utils@0.4.1(eslint@8.56.0): + resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + semver: 7.5.4 + dev: true + /eslint-config-flat-gitignore@0.1.2: resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==} dependencies: @@ -3818,7 +3998,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3839,7 +4019,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.2.2) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -3859,7 +4039,7 @@ packages: eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0): + /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} engines: {node: '>=12'} peerDependencies: @@ -3869,7 +4049,7 @@ packages: doctrine: 3.0.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 @@ -3881,11 +4061,11 @@ packages: - supports-color dev: true - /eslint-plugin-jsdoc@46.9.1(eslint@8.56.0): - resolution: {integrity: sha512-11Ox5LCl2wY7gGkp9UOyew70o9qvii1daAH+h/MFobRVRNcy7sVlH+jm0HQdgcvcru6285GvpjpUyoa051j03Q==} + /eslint-plugin-jsdoc@46.10.1(eslint@8.56.0): + resolution: {integrity: sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==} engines: {node: '>=16'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@es-joy/jsdoccomment': 0.41.0 are-docs-informative: 0.0.2 @@ -3901,23 +4081,23 @@ packages: - supports-color dev: true - /eslint-plugin-jsonc@2.11.2(eslint@8.56.0): - resolution: {integrity: sha512-F6A0MZhIGRBPOswzzn4tJFXXkPLiLwJaMlQwz/Qj1qx+bV5MCn79vBeJh2ynMmtqqHloi54KDCnsT/KWrcCcnQ==} + /eslint-plugin-jsonc@2.12.2(eslint@8.56.0): + resolution: {integrity: sha512-iv2BLi1bqkSxCPEvDOY6xiBXzAFi5iS2gTOU8fnXGfKxkC6MvC5Tw2XAgbP6R6WRlqV7AtFItx4Xb7mCONtmmw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) eslint: 8.56.0 - eslint-compat-utils: 0.1.2(eslint@8.56.0) + eslint-compat-utils: 0.4.1(eslint@8.56.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 natural-compare: 1.4.0 dev: true - /eslint-plugin-n@16.6.0(eslint@8.56.0): - resolution: {integrity: sha512-Ag3tYFF90lYU8JdHEl9qSSpeLYbVnO+Oj7sgPUarWUacv1mPL3d5h5yG4Bv3tLe71hrcxmgTi7oByYwKXaVatw==} + /eslint-plugin-n@16.6.2(eslint@8.56.0): + resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' @@ -3936,7 +4116,7 @@ packages: semver: 7.5.4 dev: true - /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.2.2)(vue-eslint-parser@9.3.2): + /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.2.2)(vue-eslint-parser@9.4.0): resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} peerDependencies: astro-eslint-parser: ^0.16.0 @@ -3954,18 +4134,18 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.2.2) eslint: 8.56.0 minimatch: 9.0.3 natural-compare-lite: 1.4.0 - vue-eslint-parser: 9.3.2(eslint@8.56.0) + vue-eslint-parser: 9.4.0(eslint@8.56.0) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-prettier@5.1.2(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1): - resolution: {integrity: sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==} + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -3980,7 +4160,7 @@ packages: dependencies: eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - prettier: 3.1.1 + prettier: 3.2.4 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true @@ -4008,8 +4188,8 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-vue@9.19.2(eslint@8.56.0): - resolution: {integrity: sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==} + /eslint-plugin-vue@9.20.1(eslint@8.56.0): + resolution: {integrity: sha512-GyCs8K3lkEvoyC1VV97GJhP1SvqsKCiWGHnbn0gVUYiUhaH2+nB+Dv1uekv1THFMPbBfYxukrzQdltw950k+LQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 @@ -4020,7 +4200,7 @@ packages: nth-check: 2.1.1 postcss-selector-parser: 6.0.15 semver: 7.5.4 - vue-eslint-parser: 9.3.2(eslint@8.56.0) + vue-eslint-parser: 9.4.0(eslint@8.56.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -4048,7 +4228,7 @@ packages: '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 @@ -4222,6 +4402,10 @@ packages: dependencies: reusify: 1.0.4 + /fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4294,8 +4478,8 @@ packages: resolution: {integrity: sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==} engines: {node: '>=8'} - /floating-vue@5.0.2(vue@3.4.7): - resolution: {integrity: sha512-CY6emiecyIIvdoK4xYN8mDSNRWutetR+rM10mu6VGrTCqxSdvHyF6TX/zslIgXDC2eIjEkcrpAMg3Mxh724t9w==} + /floating-vue@5.2.0(vue@3.4.14): + resolution: {integrity: sha512-CeApC0dUU8Mye6mjH3ZB7FXoUjIRduNuz8QW4nj3ZUweaFqv7PwxfN9klTuRQe9MeZXxbIHJHBTNl9t/bv+SUA==} peerDependencies: '@nuxt/kit': ^3.2.0 vue: ^3.2.0 @@ -4304,12 +4488,12 @@ packages: optional: true dependencies: '@floating-ui/dom': 1.1.1 - vue: 3.4.7(typescript@5.2.2) - vue-resize: 2.0.0-alpha.1(vue@3.4.7) + vue: 3.4.14(typescript@5.2.2) + vue-resize: 2.0.0-alpha.1(vue@3.4.14) dev: false - /follow-redirects@1.15.3: - resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + /follow-redirects@1.15.5: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4599,6 +4783,11 @@ packages: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} dev: true + /hex-rgb@4.3.0: + resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} + engines: {node: '>=6'} + dev: false + /hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} @@ -4724,7 +4913,6 @@ packages: /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - requiresBuild: true /indent-string@5.0.0: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} @@ -5114,6 +5302,13 @@ packages: type-check: 0.4.0 dev: true + /linebreak@1.1.0: + resolution: {integrity: sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==} + dependencies: + base64-js: 0.0.8 + unicode-trie: 2.0.0 + dev: false + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -5133,7 +5328,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.4.2 + mlly: 1.5.0 pkg-types: 1.0.3 dev: true @@ -5473,11 +5668,11 @@ packages: engines: {node: '>=10'} hasBin: true - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: acorn: 8.11.3 - pathe: 1.1.1 + pathe: 1.1.2 pkg-types: 1.0.3 ufo: 1.3.2 dev: true @@ -5773,6 +5968,10 @@ packages: engines: {node: '>=6'} dev: true + /pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + dev: false + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -5780,6 +5979,13 @@ packages: callsites: 3.1.0 dev: true + /parse-css-color@0.2.1: + resolution: {integrity: sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==} + dependencies: + color-name: 1.1.4 + hex-rgb: 4.3.0 + dev: false + /parse-gitignore@2.0.0: resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==} engines: {node: '>=14'} @@ -5848,8 +6054,8 @@ packages: engines: {node: '>=12'} dev: false - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true /pathval@1.1.1: @@ -5900,7 +6106,7 @@ packages: pump: 3.0.0 readable-stream: 4.5.2 secure-json-parse: 2.7.0 - sonic-boom: 3.7.0 + sonic-boom: 3.8.0 strip-json-comments: 3.1.1 dev: true @@ -5920,7 +6126,7 @@ packages: quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 - sonic-boom: 3.7.0 + sonic-boom: 3.8.0 thread-stream: 2.4.1 /pkg-dir@7.0.0: @@ -5933,21 +6139,21 @@ packages: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + mlly: 1.5.0 + pathe: 1.1.2 dev: true - /playwright-core@1.40.1: - resolution: {integrity: sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==} + /playwright-core@1.41.0: + resolution: {integrity: sha512-UGKASUhXmvqm2Lxa1fNr8sFwAtqjpgBRr9jQ7XBI8Rn5uFiEowGUGwrruUQsVPIom4bk7Lt+oLGpXobnXzrBIw==} engines: {node: '>=16'} hasBin: true - /playwright@1.40.1: - resolution: {integrity: sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==} + /playwright@1.41.0: + resolution: {integrity: sha512-XOsfl5ZtAik/T9oek4V0jAypNlaCNzuKOwVhqhgYT3os6kH34PzbRb74F0VWcLYa5WFdnmxl7qyAHBXvPv7lqQ==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.40.1 + playwright-core: 1.41.0 optionalDependencies: fsevents: 2.3.2 @@ -5955,13 +6161,13 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - /postcss-nested@6.0.1(postcss@8.4.32): + /postcss-nested@6.0.1(postcss@8.4.33): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.32 + postcss: 8.4.33 postcss-selector-parser: 6.0.15 dev: true @@ -5973,8 +6179,12 @@ packages: util-deprecate: 1.0.2 dev: true - /postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -6012,8 +6222,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.1.1: - resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} + /prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -6280,24 +6490,26 @@ packages: resolution: {integrity: sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==} dev: false - /rollup@4.9.1: - resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + /rollup@4.9.5: + resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.9.1 - '@rollup/rollup-android-arm64': 4.9.1 - '@rollup/rollup-darwin-arm64': 4.9.1 - '@rollup/rollup-darwin-x64': 4.9.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 - '@rollup/rollup-linux-arm64-gnu': 4.9.1 - '@rollup/rollup-linux-arm64-musl': 4.9.1 - '@rollup/rollup-linux-riscv64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-gnu': 4.9.1 - '@rollup/rollup-linux-x64-musl': 4.9.1 - '@rollup/rollup-win32-arm64-msvc': 4.9.1 - '@rollup/rollup-win32-ia32-msvc': 4.9.1 - '@rollup/rollup-win32-x64-msvc': 4.9.1 + '@rollup/rollup-android-arm-eabi': 4.9.5 + '@rollup/rollup-android-arm64': 4.9.5 + '@rollup/rollup-darwin-arm64': 4.9.5 + '@rollup/rollup-darwin-x64': 4.9.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.5 + '@rollup/rollup-linux-arm64-gnu': 4.9.5 + '@rollup/rollup-linux-arm64-musl': 4.9.5 + '@rollup/rollup-linux-riscv64-gnu': 4.9.5 + '@rollup/rollup-linux-x64-gnu': 4.9.5 + '@rollup/rollup-linux-x64-musl': 4.9.5 + '@rollup/rollup-win32-arm64-msvc': 4.9.5 + '@rollup/rollup-win32-ia32-msvc': 4.9.5 + '@rollup/rollup-win32-x64-msvc': 4.9.5 fsevents: 2.3.3 /run-parallel@1.2.0: @@ -6323,7 +6535,29 @@ packages: htmlparser2: 8.0.2 is-plain-object: 5.0.0 parse-srcset: 1.0.2 - postcss: 8.4.32 + postcss: 8.4.33 + dev: false + + /satori-html@0.3.2: + resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} + dependencies: + ultrahtml: 1.5.2 + dev: false + + /satori@0.10.11: + resolution: {integrity: sha512-yLm1xPRPZUaKcBZJ6nmezoJjHB4MqV8x7Mu0PyZUJodRWRDD27UbeMwzuY9LEGG57WYLO4CQsGPlbHWV1Ex9TQ==} + engines: {node: '>=16'} + dependencies: + '@shuding/opentype.js': 1.4.0-beta.0 + css-background-parser: 0.1.0 + css-box-shadow: 1.0.0-3 + css-to-react-native: 3.2.0 + emoji-regex: 10.3.0 + escape-html: 1.0.3 + linebreak: 1.1.0 + parse-css-color: 0.2.1 + postcss-value-parser: 4.2.0 + yoga-wasm-web: 0.3.3 dev: false /secure-json-parse@2.7.0: @@ -6394,11 +6628,12 @@ packages: /set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + /set-function-length@1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.1 + function-bind: 1.1.2 get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 @@ -6521,8 +6756,8 @@ packages: dev: false optional: true - /sonic-boom@3.7.0: - resolution: {integrity: sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==} + /sonic-boom@3.8.0: + resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} dependencies: atomic-sleep: 1.0.0 @@ -6627,6 +6862,10 @@ packages: get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 + /string.prototype.codepointat@0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + dev: false + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -6736,7 +6975,7 @@ packages: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/core': 0.1.0 + '@pkgr/core': 0.1.1 tslib: 2.6.2 dev: true @@ -6805,6 +7044,10 @@ packages: dependencies: convert-hrtime: 5.0.0 + /tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + dev: false + /tmp-cache@1.1.0: resolution: {integrity: sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==} engines: {node: '>=6'} @@ -6857,7 +7100,7 @@ packages: '@ts-morph/common': 0.22.0 code-block-writer: 12.0.0 - /ts-node@10.9.2(@swc/core@1.3.102)(@types/node@20.10.7)(typescript@5.2.2): + /ts-node@10.9.2(@swc/core@1.3.104)(@types/node@20.11.5)(typescript@5.2.2): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6872,14 +7115,14 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.102 + '@swc/core': 1.3.104 '@tsconfig/node10': 1.0.9 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.7 + '@types/node': 20.11.5 acorn: 8.11.3 - acorn-walk: 8.3.1 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -6971,18 +7214,29 @@ packages: dependencies: random-bytes: 1.0.0 + /ultrahtml@1.5.2: + resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==} + dev: false + /unconfig@0.3.11: resolution: {integrity: sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==} dependencies: '@antfu/utils': 0.7.7 - defu: 6.1.3 + defu: 6.1.4 jiti: 1.21.0 - mlly: 1.4.2 + mlly: 1.5.0 dev: true /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + dev: false + /unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -7011,7 +7265,7 @@ packages: '@unocss/core': 0.55.7 dev: true - /unocss@0.58.3(postcss@8.4.32)(vite@5.0.11): + /unocss@0.58.3(postcss@8.4.33)(vite@5.0.11): resolution: {integrity: sha512-2rnvghfiIDRQ2cOrmN4P7J7xV2p3yBK+bPAt1aoUxCXcszkLczAnQzh9c7IZ+p70kSVstK45cJTYV6TMzOLF7Q==} engines: {node: '>=14'} peerDependencies: @@ -7027,7 +7281,7 @@ packages: '@unocss/cli': 0.58.3 '@unocss/core': 0.58.3 '@unocss/extractor-arbitrary-variants': 0.58.3 - '@unocss/postcss': 0.58.3(postcss@8.4.32) + '@unocss/postcss': 0.58.3(postcss@8.4.33) '@unocss/preset-attributify': 0.58.3 '@unocss/preset-icons': 0.58.3 '@unocss/preset-mini': 0.58.3 @@ -7043,7 +7297,7 @@ packages: '@unocss/transformer-directives': 0.58.3 '@unocss/transformer-variant-group': 0.58.3 '@unocss/vite': 0.58.3(vite@5.0.11) - vite: 5.0.11(@types/node@20.10.7) + vite: 5.0.11(@types/node@20.11.5) transitivePeerDependencies: - postcss - rollup @@ -7101,10 +7355,10 @@ packages: vite: ^2.9.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 dependencies: micromatch: 4.0.5 - vite: 5.0.11(@types/node@20.10.7) + vite: 5.0.11(@types/node@20.11.5) dev: false - /vite@5.0.11(@types/node@20.10.7): + /vite@5.0.11(@types/node@20.11.5): resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -7132,14 +7386,14 @@ packages: terser: optional: true dependencies: - '@types/node': 20.10.7 + '@types/node': 20.11.5 esbuild: 0.19.11 - postcss: 8.4.32 - rollup: 4.9.1 + postcss: 8.4.33 + rollup: 4.9.5 optionalDependencies: fsevents: 2.3.3 - /vue-demi@0.14.6(vue@3.4.7): + /vue-demi@0.14.6(vue@3.4.14): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} hasBin: true @@ -7151,11 +7405,11 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.4.7(typescript@5.2.2) + vue: 3.4.14(typescript@5.2.2) dev: false - /vue-eslint-parser@9.3.2(eslint@8.56.0): - resolution: {integrity: sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==} + /vue-eslint-parser@9.4.0(eslint@8.56.0): + resolution: {integrity: sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -7172,12 +7426,12 @@ packages: - supports-color dev: true - /vue-resize@2.0.0-alpha.1(vue@3.4.7): + /vue-resize@2.0.0-alpha.1(vue@3.4.14): resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} peerDependencies: vue: ^3.0.0 dependencies: - vue: 3.4.7(typescript@5.2.2) + vue: 3.4.14(typescript@5.2.2) dev: false /vue-template-compiler@2.7.16: @@ -7199,19 +7453,19 @@ packages: typescript: 5.2.2 dev: true - /vue@3.4.7(typescript@5.2.2): - resolution: {integrity: sha512-4urmkWpudekq0CPNMO7p6mBGa9qmTXwJMO2r6CT4EzIJVG7WoSReiysiNb7OSi/WI113oX0Srn9Rz1k/DCXKFQ==} + /vue@3.4.14(typescript@5.2.2): + resolution: {integrity: sha512-Rop5Al/ZcBbBz+KjPZaZDgHDX0kUP4duEzDbm+1o91uxYUNmJrZSBuegsNIJvUGy+epLevNRNhLjm08VKTgGyw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.7 - '@vue/compiler-sfc': 3.4.7 - '@vue/runtime-dom': 3.4.7 - '@vue/server-renderer': 3.4.7(vue@3.4.7) - '@vue/shared': 3.4.7 + '@vue/compiler-dom': 3.4.14 + '@vue/compiler-sfc': 3.4.14 + '@vue/runtime-dom': 3.4.14 + '@vue/server-renderer': 3.4.14(vue@3.4.14) + '@vue/shared': 3.4.14 typescript: 5.2.2 /wcwidth@1.0.1: @@ -7305,6 +7559,10 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} + /yoga-wasm-web@0.3.3: + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + dev: false + /youch-terminal@2.2.3: resolution: {integrity: sha512-/PE77ZwG072tXBvF47S9RL9/G80u86icZ5QwyjblyM67L4n/T5qQeM3Xrecbu8kkDDr/9T/PTj/X+6G/OSRQug==} dependencies: diff --git a/resources/views/app_root.edge b/resources/views/app_root.edge index f77133f..b690a65 100644 --- a/resources/views/app_root.edge +++ b/resources/views/app_root.edge @@ -5,16 +5,11 @@ - {{-- Primary Meta tags --}} - @if (meta) - {{ `${meta.title} - AdonisJS Packages` }} - - - @else - AdonisJS Packages - Discover the best AdonisJS packages - - - @endif + @!component('components/meta', { + title: meta?.title, + description: meta?.description, + image: meta?.image, + }) diff --git a/resources/views/components/meta.edge b/resources/views/components/meta.edge new file mode 100644 index 0000000..9e9f646 --- /dev/null +++ b/resources/views/components/meta.edge @@ -0,0 +1,21 @@ +@assign(title = title ?? 'AdonisJS Packages') +@assign(description = description ?? 'Discover our list of packages to supercharge your AdonisJS project. Created by the AdonisJS team and community.') +@assign(image = image ?? '/preview.png') + +{{ `${title} - AdonisJS Packages` }} + + + +{{-- Open Graph/ Facebook --}} + + + + + + +{{-- Twitter --}} + + + + + diff --git a/start/kernel.ts b/start/kernel.ts index bd1f40c..fa44cd4 100644 --- a/start/kernel.ts +++ b/start/kernel.ts @@ -25,6 +25,7 @@ server.errorHandler(() => import('#exceptions/handler')) server.use([ () => import('#middleware/container_bindings_middleware'), () => import('@adonisjs/static/static_middleware'), + () => import('@adonisjs/inertia/inertia_middleware'), ]) /** @@ -35,7 +36,6 @@ router.use([ () => import('@adonisjs/core/bodyparser_middleware'), () => import('@adonisjs/session/session_middleware'), () => import('@adonisjs/shield/shield_middleware'), - () => import('@adonisjs/inertia/inertia_middleware'), ]) /** diff --git a/start/routes.ts b/start/routes.ts index 70aac6d..646b7cf 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -10,8 +10,10 @@ import router from '@adonisjs/core/services/router' const PackagesController = () => import('#controllers/packages_controller') +const OgImagesController = () => import('#controllers/og_images_controller') router.get('/', [PackagesController, 'getHome']) router.get('/packages/:name', [PackagesController, 'getPackage']) +router.get('/packages/:name/og.png', [OgImagesController]).as('og_image') router.get('/healthcheck', ({ response }) => response.noContent())