diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 204d07c..5c95226 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -188,7 +188,7 @@ module.exports = { '@typescript-eslint/semi': ['error', 'always'], 'max-depth': ['error', 3], 'max-nested-callbacks': ['error', 3], - 'complexity': ['error', 4], + 'complexity': ['error', 8], 'no-tabs': ['error', { allowIndentationTabs: true }], 'spellcheck/spell-checker': ['error', { skipWords: [ @@ -226,6 +226,13 @@ module.exports = { 'duotone', 'tsconfig', 'workspace', + 'woff', + 'marknow', + 'lored', + 'guz013', + 'xml', + 'jsconfig', + 'vitest', ], minLength: 4, }], diff --git a/.vscode/project.code-workspace b/.vscode/project.code-workspace index 51af971..e3765c6 100644 --- a/.vscode/project.code-workspace +++ b/.vscode/project.code-workspace @@ -4,6 +4,10 @@ "path": "../apps/www", "name": "apps/www" }, + { + "path": "../packages/banners", + "name": "@marknow/banners" + }, { "path": "../", "name": "ROOT" diff --git a/.vscode/settings.json b/.vscode/settings.json index f54b539..285b8db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,6 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, - "unocss.root": "apps/www" + "unocss.root": "apps/www", + "vitest.enable": true } diff --git a/apps/www/.eslintignore b/apps/www/.eslintignore index c191179..4ea4c0c 100644 --- a/apps/www/.eslintignore +++ b/apps/www/.eslintignore @@ -1,5 +1,4 @@ /src/lib/components.d.ts /src/lib/imports.d.ts /.eslint-auto-import.json -*.woff -*.woff2 +/static diff --git a/apps/www/package.json b/apps/www/package.json index ef6360b..7d9e2f6 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -22,6 +22,7 @@ "@iconify-json/svg-spinners": "^1.1.1", "@iconify/types": "^2.0.0", "@iconify/utils": "^2.1.6", + "@marknow/banners": "workspace:*", "@poppanator/sveltekit-svg": "^3.0.1", "@sveltejs/adapter-vercel": "^3.0.1", "@sveltejs/kit": "^1.20.2", @@ -30,9 +31,8 @@ "@unocss/extractor-svelte": "^0.52.7", "mdsvex": "^0.10.6", "rehype-external-links": "^2.1.0", - "sass": "^1.63.4", + "sass": "^1.63.6", "satori": "^0.10.1", - "satori-html": "^0.3.2", "svelte": "^3.59.1", "svelte-check": "^3.4.3", "svelte-preprocess": "^5.0.4", diff --git a/apps/www/src/routes/+page.svelte b/apps/www/src/routes/+page.svelte index 12fee3d..d3cb2d7 100644 --- a/apps/www/src/routes/+page.svelte +++ b/apps/www/src/routes/+page.svelte @@ -1,28 +1,22 @@ - -
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
- {@html data.banner} +
diff --git a/apps/www/src/routes/+page.ts b/apps/www/src/routes/+page.ts deleted file mode 100644 index 472c77b..0000000 --- a/apps/www/src/routes/+page.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { PageLoad } from './$types'; - -export const load = (async ({ fetch }): Promise<{ banner: string }> => { - const banner = await (await fetch('/api.svg')).text(); - return { banner }; -}) satisfies PageLoad; diff --git a/apps/www/src/routes/api.svg/+server.ts b/apps/www/src/routes/api.svg/+server.ts index da95891..1884ce0 100644 --- a/apps/www/src/routes/api.svg/+server.ts +++ b/apps/www/src/routes/api.svg/+server.ts @@ -1,33 +1,35 @@ import type { RequestHandler } from '@sveltejs/kit'; -import satori from 'satori'; -import { html as satoriHtml } from 'satori-html'; -import Banner from './Banner.html?raw'; -import font400 from '$lib/assets/Mona-Sans-Regular.woff?url'; -import font600 from '$lib/assets/Mona-Sans-SemiBold.woff?url'; +import newBanner from '@marknow/banners'; export const GET = (async ({ fetch }): Promise => { - const html = satoriHtml(Banner); + const banner = await newBanner({ + title: 'Hello world', + subtitle: 'This is a test!', + icon: 'solar:hand-shake-bold-duotone', + colors: { + background: '#000000', + foreground: '#ffffff', + }, + fonts: { + title: { + data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + name: 'Mona Sans', + weight: 600, + style: 'normal', + }, + subtitle: { + data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + name: 'Mona Sans', + weight: 400, + style: 'normal', + }, + }, + libConfig: { + fetcher: fetch, + }, + }); - const banner = await satori(html, - { - width: 1000, - height: 180, - fonts: [ - { - name: 'Mona Sans', - weight: 400, - style: 'normal', - data: await (await fetch(font400)).arrayBuffer(), - }, - { - name: 'Mona Sans', - weight: 600, - style: 'normal', - data: await (await fetch(font600)).arrayBuffer(), - }], - }); - - return new Response(banner, { + return new Response(`${banner.toString()}`, { status: 200, headers: { 'Content-type': 'image/svg+xml', diff --git a/apps/www/src/routes/api.svg/Banner.html b/apps/www/src/routes/api.svg/Banner.html deleted file mode 100644 index a0066b4..0000000 --- a/apps/www/src/routes/api.svg/Banner.html +++ /dev/null @@ -1,48 +0,0 @@ -
-
-
- - - - - - -
-
-
-

Marknow

- - Create beautiful markdown for your projects with ease - -
-
-
-
diff --git a/apps/www/src/lib/assets/Mona-Sans-Regular.woff b/apps/www/static/Mona-Sans-Regular.woff similarity index 100% rename from apps/www/src/lib/assets/Mona-Sans-Regular.woff rename to apps/www/static/Mona-Sans-Regular.woff diff --git a/apps/www/src/lib/assets/Mona-Sans-SemiBold.woff b/apps/www/static/Mona-Sans-SemiBold.woff similarity index 100% rename from apps/www/src/lib/assets/Mona-Sans-SemiBold.woff rename to apps/www/static/Mona-Sans-SemiBold.woff diff --git a/package.json b/package.json index 24f5674..852c960 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "keywords": [], "main": "index.js", "scripts": { + "test": "turbo run test", + "test:watch": "vitest watch", "prepare": "husky install", "lint": "eslint . && turbo run lint", "lint:fix": "eslint . --fix && turbo run lint -- --fix", @@ -24,6 +26,7 @@ "eslint-plugin-svelte": "^2.30.0", "husky": "^8.0.3", "turbo": "^1.10.3", - "vercel": "^30.2.2" + "vercel": "^30.2.2", + "vitest": "^0.32.2" } } diff --git a/packages/banners/.eslintignore b/packages/banners/.eslintignore new file mode 100644 index 0000000..090e4b1 --- /dev/null +++ b/packages/banners/.eslintignore @@ -0,0 +1,3 @@ +/dist +*.woff +*.woff2 diff --git a/packages/banners/.eslintrc.cjs b/packages/banners/.eslintrc.cjs new file mode 100644 index 0000000..5ca8240 --- /dev/null +++ b/packages/banners/.eslintrc.cjs @@ -0,0 +1,5 @@ +process.env.ESLINT_TSCONFIG = 'jsconfig.json'; + +module.exports = { + root: false, +}; diff --git a/packages/banners/.gitignore b/packages/banners/.gitignore new file mode 100644 index 0000000..9b1c8b1 --- /dev/null +++ b/packages/banners/.gitignore @@ -0,0 +1 @@ +/dist diff --git a/packages/banners/.lintstagedrc b/packages/banners/.lintstagedrc new file mode 100644 index 0000000..c768074 --- /dev/null +++ b/packages/banners/.lintstagedrc @@ -0,0 +1,4 @@ +{ + "gitDir": "../../.git", + "*": "eslint --fix" +} diff --git a/packages/banners/jsconfig.json b/packages/banners/jsconfig.json new file mode 100644 index 0000000..4bcf596 --- /dev/null +++ b/packages/banners/jsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "checkJs": true, + "allowJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "module": "ES2022", + "target": "ES2022", + "alwaysStrict": true + }, + "include": ["./src/**/*"], + "exclude": ["./node_modules/**", "./dist/**"] +} diff --git a/packages/banners/package.json b/packages/banners/package.json new file mode 100644 index 0000000..d542722 --- /dev/null +++ b/packages/banners/package.json @@ -0,0 +1,35 @@ +{ + "name": "@marknow/banners", + "type": "module", + "version": "1.0.0", + "description": "", + "source": "./src/index.js", + "author": "", + "license": "ISC", + "keywords": [], + "exports": { + "types": "./src/index.d.ts", + "require": "./dist/index.cjs", + "import": "./src/index.js", + "default": "./src/index.js" + }, + "main": "./dist/index.cjs", + "module": "./src/index.js", + "types": "./src/index.d.ts", + "scripts": { + "test": "vitest run", + "test:watch": "vitest watch", + "build:cjs": "microbundle --compress false --pkg-main false --strict --tsconfig ./jsconfig.json --generateTypes false -f cjs --target node", + "build": "pnpm run build:cjs", + "dev": "pnpm run build -w", + "lint": "eslint ." + }, + "dependencies": { + "satori": "^0.10.1", + "satori-html": "^0.3.2" + }, + "devDependencies": { + "@types/node": "^20.3.1", + "microbundle": "^0.15.1" + } +} diff --git a/packages/banners/src/assets/Mona-Sans-Regular.woff b/packages/banners/src/assets/Mona-Sans-Regular.woff new file mode 100644 index 0000000..d31c6ed Binary files /dev/null and b/packages/banners/src/assets/Mona-Sans-Regular.woff differ diff --git a/packages/banners/src/assets/Mona-Sans-SemiBold.woff b/packages/banners/src/assets/Mona-Sans-SemiBold.woff new file mode 100644 index 0000000..b57fb15 Binary files /dev/null and b/packages/banners/src/assets/Mona-Sans-SemiBold.woff differ diff --git a/packages/banners/src/fonts.js b/packages/banners/src/fonts.js new file mode 100644 index 0000000..12e14f6 --- /dev/null +++ b/packages/banners/src/fonts.js @@ -0,0 +1,47 @@ +/** + * @file + * Utility functions used to retrieve and manipulate fonts' objects. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +/** + * @param {import('./types').Reader | undefined} [reader=import('node:fs').readFile] + * The function to be used as reader of the local files. + * + * @typedef {import('satori').SatoriOptions['fonts'][0]} Font + * @returns {Promise<{subtitle: Font, title: Font}>} + * + * @module \@marknow/banners + * @access protected + */ +export async function getMonaSansFonts(reader) { + reader ||= (await import('node:fs/promises')).readFile; + + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + + return { + subtitle: { + name: 'Mona Sans', + weight: 400, + style: 'normal', + data: await reader(join(__dirname, './assets/Mona-Sans-Regular.woff')), + }, + title: { + name: 'Mona Sans', + weight: 600, + style: 'normal', + data: await reader(join(__dirname, './assets/Mona-Sans-SemiBold.woff')), + }, + }; +} diff --git a/packages/banners/src/html.js b/packages/banners/src/html.js new file mode 100644 index 0000000..ff24e5f --- /dev/null +++ b/packages/banners/src/html.js @@ -0,0 +1,117 @@ +/** + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + */ + +/* eslint-disable complexity */ +/* eslint-disable @typescript-eslint/indent */ +/** + * Constructor of the HTML banner converted to VNodes to be used in satori. + * Use the properties to customize and complete it. + * + * @typedef {import('satori').SatoriOptions['fonts'][0]} Font + * @typedef {{ + * dimensions: { width: number, height: number }, + * fonts: { title: Font, subtitle: Font }, + * layout: 'vertical' | 'horizontal', + * colors: import('./types').Colors, + * rtl: boolean, + * }} Props + * @param {Props} properties + * Properties to be applied on the html. + * + * @returns {string} + * + * @module \@marknow/banners + * @access protected + */ +export default function html({ + dimensions, + layout, + colors, + fonts, + rtl, +}) { + const horizontal = layout === 'horizontal'; + + return ` +
+
+
+ %%MARKNOW-PLACEHOLDER-ICON%% +
+
+
+

+ %%MARKNOW-PLACEHOLDER-TITLE%% +

+ + %%MARKNOW-PLACEHOLDER-SUBTILE%% + +
+
+
+
+ `; +} diff --git a/packages/banners/src/icons.js b/packages/banners/src/icons.js new file mode 100644 index 0000000..8223579 --- /dev/null +++ b/packages/banners/src/icons.js @@ -0,0 +1,109 @@ +/** + * @file + * Utility functions used to retrieve and manipulate icons SVG strings. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + +/** + * Utility function used to get a SVG icon from Iconify OR from an url passed as the icon. + * + * If the `icon` parameter is not a valid icon name or url, + * it returns the `icon` itself. + * + * @param {string} icon + * The icon's name or url endpoint. + * + * @param {import('./types').Fetcher | undefined} [fetcher=globalThis.fetch] + * Fetch function to be used. + * + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected + */ +export async function getIcon(icon, fetcher = fetch) { + if (!isIconName(icon) && !isValidUrl(icon)) { + return icon; + } + else if (isValidUrl(icon)) { + const svg = (await fetcher(icon)).text(); + return svg; + } + + const [collection, iconName] = icon.split(':'); + const svg = (await fetcher(`https://api.iconify.design/${collection}/${iconName}.svg`)).text(); + + return svg; +} + +/** + * Utility function used to set the icons SVG width and height to the specified dimensions. + * + * @param {string} svg + * The svg string. + * + * @param {{width?: string | number, height?: string | number}} dimensions + * The dimensions values, if type number it is converted to pixels. + * + * @returns {string} + * + * @module \@marknow/banners + * @access protected + */ +export function setIconDimensions(svg, { width, height }) { + width = typeof width === 'number' + ? `width="${width}px"` + : !width + ? '' + : `width="${width}"`; + + height = typeof height === 'number' + ? `height="${height}px"` + : !height + ? '' + : `height="${height}"`; + + return svg + .replace(/width="([^"]*)"/, width) + .replace(/height="([^"]*)"/, height); +} + +/** + * Checks if a given string is a valid + * [Iconify](https://iconify.design/)/[Icônes](https://icones.js.org/)-like icon name. + * + * @param {string} string The string to be checked. + * @returns {boolean} + * + * @module \@marknow/banners + * @access package + */ +function isIconName(string) { + return /^[a-z0-9-]+:[a-z0-9-]+(\[\])?$/.test(string); +} + +/** + * Checks if string is a valid URL. + * + * @param {string} string The string to be checked. + * @returns {boolean} + * + * @module \@marknow/banners + * @access package + */ +function isValidUrl(string) { + try { + const url = new URL(string); + return url.protocol === 'https:' || url.protocol === 'http:'; + } + catch (_) { + return false; + } +} diff --git a/packages/banners/src/index.d.ts b/packages/banners/src/index.d.ts new file mode 100644 index 0000000..de1053e --- /dev/null +++ b/packages/banners/src/index.d.ts @@ -0,0 +1,66 @@ +/** + * @file + * This file contains all public functions and types declaration of the + * `@marknow/banners` package. Anything declared here can be accessed directly + * by the library consumers and has an @access public access level. + * + * The JSDocs of the functions are duplicated from the source files, so that + * it is more compatible with Typescript syntax and code documentation. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + +/** + * The banner constructor function. Use the options to customize the + * appearance of the resulting banner. + * + * @param {import('./types').BannerOptions} options + * Options object for customizing the banner appearance. + * + * @returns {Promise} + * + * @example + * import newBanner from '@marknow/banners'; + * + * export async function GET({ fetch }) { + * const banner = await newBanner({ + * title: 'Hello world', + * subtitle: 'This is a example api endpoint.' + * icon: 'material-symbols:api' + * fonts: { + * title: { + * data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 600, + * }, + * subtitle: { + * data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 400, + * }, + * }, + * libConfig: { + * fetcher: fetch, + * }, + * }); + * + * return new Response(banner.toString(), { + * status: 200, + * headers: { + * 'Content-type': 'image/svg+xml', + * }, + * }); + * } + * + * @module \@marknow/banners + * @access public + */ +export default function banner({ title, subtitle, icon, layout, config, }: import('./types').BannerOptions): Promise; + +export type { BannerOptions, Banner } from './types' diff --git a/packages/banners/src/index.js b/packages/banners/src/index.js new file mode 100644 index 0000000..da73e14 --- /dev/null +++ b/packages/banners/src/index.js @@ -0,0 +1,132 @@ +/** + * @file + * Main entry point of the `@marknow/banners` package. This file contains + * all ESModules exports of the public APIs and functions of the library. + * Anything exported here should have an @access public access level and + * declared on {@link ./index.d.ts types declaration} file. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ +import { html as htmlToVNodes } from 'satori-html'; +import satori from 'satori'; +import bannerHtml from './html'; +import { getMonaSansFonts } from './fonts'; +import { getIcon, setIconDimensions } from './icons'; + +/** + * The banner constructor function. Use the options to customize the + * appearance of the resulting banner. + * + * @param {import('./types').BannerOptions} options + * Options object for customizing the banner appearance. + * + * @returns {Promise} + * + * @example + * import newBanner from '@marknow/banners'; + * + * export async function GET({ fetch }) { + * const banner = await newBanner({ + * title: 'Hello world', + * subtitle: 'This is a example api endpoint.' + * icon: 'material-symbols:api' + * fonts: { + * title: { + * data: await (await fetch('/Mona-Sans-SemiBold.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 600, + * }, + * subtitle: { + * data: await (await fetch('/Mona-Sans-Regular.woff')).arrayBuffer(), + * name: 'Mona Sans', + * weight: 400, + * }, + * }, + * libConfig: { + * fetcher: fetch, + * }, + * }); + * + * return new Response(banner.toString(), { + * status: 200, + * headers: { + * 'Content-type': 'image/svg+xml', + * }, + * }); + * } + * + * @module \@marknow/banners + * @access public + */ +export default async function banner({ + title, + fonts, + icon = '', + rtl = false, + subtitle = '', + layout = 'horizontal', + libConfig: config = {}, + colors = { + background: '#ffffff', + foreground: '#000000', + }, +}) { + fonts ||= await getMonaSansFonts(config?.reader); + config.iconHandler ||= icon => getIcon(icon, config?.fetcher); + + title = truncateText(title, layout === 'horizontal' ? 45 : 90); + subtitle = truncateText(subtitle, layout === 'horizontal' ? 100 : 200); + + const dimensions = { + width: 1000, + height: layout === 'horizontal' ? 180 : 280, + }; + + const htmlTemplate = bannerHtml({ layout, dimensions, fonts, colors, rtl }); + + const iconSvg = setIconDimensions(await config.iconHandler(icon), { width: '3.5em' }); + + const html = htmlTemplate + .replace('%%MARKNOW-PLACEHOLDER-TITLE%%', title) + .replace('%%MARKNOW-PLACEHOLDER-SUBTILE%%', subtitle) + .replace('%%MARKNOW-PLACEHOLDER-ICON%%', iconSvg); + + const vNodes = htmlToVNodes(html); + + const svg = await satori(vNodes, { + ...dimensions, + fonts: [ + fonts.title, + fonts.subtitle, + ], + }); + + return { + toString() { return svg; }, + icon: iconSvg, + vNodes, + html, + svg, + }; +} + +/** + * Small utility function used to truncate long texts on the banner + * + * @param {string} string - Text string to be truncated. + * @param {number} maxChar - Maximum number of characters. + * + * @returns {string} + * + * @module \@marknow/banners + * @access package + */ +function truncateText(string, maxChar) { + return string.length > maxChar ? `${string.slice(0, maxChar)}...` : string; +} diff --git a/packages/banners/src/types.d.ts b/packages/banners/src/types.d.ts new file mode 100644 index 0000000..c6e5cda --- /dev/null +++ b/packages/banners/src/types.d.ts @@ -0,0 +1,234 @@ +/** + * @file + * Definitions of more complex or shared Typescript types used in the package. + * + * @author + * Guz013 (under the Lored organization) + * + * @copyright + * Gustavo "Guz013" L. de Mello + * + * @module \@marknow/banners + */ + +import type { OpenMode, PathLike } from "node:fs"; +import type { FileHandle } from "node:fs/promises"; +import type { SatoriOptions } from "satori/wasm"; + +/** + * Options object for customizing the banner appearance. + * + * @module \@marknow/banners + * @access public + */ +export interface BannerOptions { + /** + * **(REQUIRED)** Title to be displayed in the banner. + */ + title: string, + + /** + * (Optional) Set the text direction right-to-left. + */ + rtl?: boolean = false, + + /** + * (Optional) {@link https://iconify.design/ Iconify}/{@link https://icones.js.org/ Icônes}-like + * icon name OR url for svg file of the icon to be used in the banner. + */ + icon?: string = '', + + /** + * (Optional) Subtitle/legend to be displayed in the banner + * bellow the title. + */ + subtitle?: string = '', + + /** + * (Optional) Customize the colors of the banner. + * + * Customize the background color and foreground (title, subtitle + * and icon) colors. + */ + colors?: Colors = { background: '#ffffff', foreground: '#000000' }, + + /** + * (Optional) Customize the layout of the banner and position of elements. + */ + layout?: 'horizontal' | 'vertical' = 'horizontal', + + /** + * (Optional) Customize the fonts used on the banner. + * + * Changes the default font file used for the title and subtitle. + * Defaults is {@link https://github.com/github/mona-sans Github's Mona Sans} + * semi-bold and regular respectively. + * + * @see {@link https://github.com/vercel/satori#fonts} + */ + fonts?: { + title: Font, + subtitle: Font, + } + + /** + * (Optional) Customize the behavior of the package. + * + * Provide functions or polyfills to be used by the package + * for better compatibility or customization of the banner + * creation. + */ + libConfig?: { + /** + * (Optional) Fetch function used by the package to retrieve + * icons from {@link https://iconify.design/ Iconify} and custom + * icons provided as url. + * + * Default function used is the + * {@link https://developer.mozilla.org/en-US/docs/Web/API/fetch globalThis.fetch} + * function. Compatible with modern browsers, Node.js (version 18 and greater), + * Deno and Bun. + * + * @see {@link BannerOptions.icon} + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + */ + fetcher?: Fetcher = globalThis.fetch, + + /** + * (Optional) The function used to read the font files and return a Buffer or + * ArrayBuffer from them. + * + * Default function used is the {@link https://nodejs.org/api/fs.html#fsreadfilepath-options-callback fs.readFile} + * from the Node file system promises api ({@link https://nodejs.org/api/fs.html#file-system node:fs/promises}). + * Compatible with Node.js (version 10 and greater), Deno and Bun. + * + * @param {PathLike | FileHandle} path - The path to the font files. + * @returns {Promise} + */ + reader?: Reader = import ('node:fs/promises').readFile, + + /** + * (Optional) The function used to get the icon svg file from {@link https://iconify.design/ Iconify} + * or URL endpoint passed. + * + * @see {@link BannerOptions.icon} + * + * @param {string} icon - Icon name or URL. + * @returns {string | Promise} + */ + iconHandler?: (icon: string) => string | Promise + } +} + +/** + * The resulting banner object. + * + * Has a `toString()` function to be used in string literals + * that returns the svg string of the banner. + * + * @module \@marknow/banners + * @access public + */ +export interface Banner { + /** + * The resulting svg of the banner. + * @readonly + */ + svg: string, + /** + * The raw html used to create the banner. + * @readonly + */ + html: string, + /** + * The used icon's svg. + * @readonly + */ + icon: string, + /** + * React-element-like objects / VDOM used to create the banner. + * @readonly + */ + vNodes: VNode, + /** + * Returns the {@link Banner.svg svg string} of the banner. + * Useful when using the banner object directly on a string. + * + * @example + * import newBanner from '@marknow/banners'; + * + * const banner = await newBanner({ ... }); + * + * // Prints the resulting svg instead of the banner object itself. + * console.log(`Banner svg:\n${banner}`) + * + * @readonly + */ + toString(): string, +}; + +/** + * Font object for the banner passed to the `satori` package. + * + * @see {@link BannerOptions.fonts} + * @see {@link https://github.com/vercel/satori#fonts} + * + * @module \@marknow/banners > satori + * @access protected + */ +export type Font = SatoriOptions['fonts'][0]; + +export type Colors = { + foreground: string; + background: string; +} + +/** + * "Global Fetch"-like function used by the package to retrieve + * icons from [Iconify](https://iconify.design/) and custom + * icons provided as url. + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected + */ +export type Fetcher = ( + input: RequestInfo | URL, + init?: RequestInit +) => Promise; + +/** + * "Node.js' `fs.readFile`"-like function used to read the font files + * and return a Buffer or ArrayBuffer from them. + * + * @param {RequestInfo} input - The request url/info. + * @param {RequestInit} - Request options. + * @returns {Promise} + * + * @module \@marknow/banners + * @access protected + */ +export type Reader = ( + path: PathLike | FileHandle, +) => Promise + +/** + * React-element-like objects / VDOM object used in satori. + * + * @module \@marknow/banners > satori-html + * @access protected + */ +export interface VNode { + type: string; + props: { + style?: Record; + children?: string | VNode | VNode[]; + [prop: string]: any; + }; +} diff --git a/packages/banners/tests/PREVIEWS.md b/packages/banners/tests/PREVIEWS.md new file mode 100644 index 0000000..c020b22 --- /dev/null +++ b/packages/banners/tests/PREVIEWS.md @@ -0,0 +1,42 @@ + +### [`banner.test.ts`](./banner.test.ts) + +![horizontal](__snapshots__/banner-horizontal.svg) + +![vertical](__snapshots__/banner-vertical.svg) + +![rtl](__snapshots__/banner-rtl.svg) + +### [`results.test.js`](./results.test.js); +![withTitle](__snapshots__/withTitle.svg) + +![withSubtitle](__snapshots__/withSubtitle.svg) + +![withIcon](__snapshots__/withIcon.svg) + +![withComplete](__snapshots__/withComplete.svg) + +### [`vertical-results.test.js`](./vertical-results.test.js); + +![withTitle](__snapshots__/vertical-withTitle.svg) + +![withSubtitle](__snapshots__/vertical-withSubtitle.svg) + +![withIcon](__snapshots__/vertical-withIcon.svg) + +![withComplete](__snapshots__/vertical-withComplete.svg) + +### [`rtl-results.test.js`](./rtl-results.test.js); + +![withTitle](__snapshots__/rtl-withTitle.svg) + +![withSubtitle](__snapshots__/rtl-withSubtitle.svg) + +![withIcon](__snapshots__/rtl-withIcon.svg) + +![withComplete](__snapshots__/rtl-withComplete.svg) + +### [`icons.test.js`](./icons.test.js) + +![icons](__snapshots__/icons-withIconifyIcon.svg) + diff --git a/packages/banners/tests/__snapshots__/banner-horizontal.svg b/packages/banners/tests/__snapshots__/banner-horizontal.svg new file mode 100644 index 0000000..de164d0 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-horizontal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/banner-rtl.svg b/packages/banners/tests/__snapshots__/banner-rtl.svg new file mode 100644 index 0000000..a03bc43 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-rtl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/banner-vertical.svg b/packages/banners/tests/__snapshots__/banner-vertical.svg new file mode 100644 index 0000000..2d98174 --- /dev/null +++ b/packages/banners/tests/__snapshots__/banner-vertical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg b/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg new file mode 100644 index 0000000..dafc54d --- /dev/null +++ b/packages/banners/tests/__snapshots__/icons-withIconifyIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withComplete.svg b/packages/banners/tests/__snapshots__/rtl-withComplete.svg new file mode 100644 index 0000000..801a0f9 --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withIcon.svg b/packages/banners/tests/__snapshots__/rtl-withIcon.svg new file mode 100644 index 0000000..04a6dd2 --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg b/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg new file mode 100644 index 0000000..34ec15c --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/rtl-withTitle.svg b/packages/banners/tests/__snapshots__/rtl-withTitle.svg new file mode 100644 index 0000000..7fdf09b --- /dev/null +++ b/packages/banners/tests/__snapshots__/rtl-withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withComplete.svg b/packages/banners/tests/__snapshots__/vertical-withComplete.svg new file mode 100644 index 0000000..d9a8ac4 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withIcon.svg b/packages/banners/tests/__snapshots__/vertical-withIcon.svg new file mode 100644 index 0000000..ac34190 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg new file mode 100644 index 0000000..eef3e42 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/vertical-withTitle.svg b/packages/banners/tests/__snapshots__/vertical-withTitle.svg new file mode 100644 index 0000000..203ad30 --- /dev/null +++ b/packages/banners/tests/__snapshots__/vertical-withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withComplete.svg b/packages/banners/tests/__snapshots__/withComplete.svg new file mode 100644 index 0000000..621052c --- /dev/null +++ b/packages/banners/tests/__snapshots__/withComplete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withIcon.svg b/packages/banners/tests/__snapshots__/withIcon.svg new file mode 100644 index 0000000..ffaad23 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withIcon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withSubtitle.svg b/packages/banners/tests/__snapshots__/withSubtitle.svg new file mode 100644 index 0000000..888aff2 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withSubtitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/__snapshots__/withTitle.svg b/packages/banners/tests/__snapshots__/withTitle.svg new file mode 100644 index 0000000..e945ba8 --- /dev/null +++ b/packages/banners/tests/__snapshots__/withTitle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/banners/tests/banner.test.ts b/packages/banners/tests/banner.test.ts new file mode 100644 index 0000000..bb24967 --- /dev/null +++ b/packages/banners/tests/banner.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import type { BannerOptions } from '../src/index'; +import banner from '../src/index'; + +describe('Complex banner', async () => { + const options: BannerOptions = { + title: '@marknow/banners', + subtitle: 'This is a more complex banner that uses most of the package settings', + icon: 'solar:inbox-unread-bold-duotone', + colors: { + foreground: '#feefec', + background: '#1d1412', + }, + fonts: { + title: { + // eslint-disable-next-line spellcheck/spell-checker + name: 'Quattrocento', + data: await (await fetch('https://fonts.bunny.net/quattrocento/files/quattrocento-latin-700-normal.woff')).arrayBuffer(), + weight: 700, + style: 'normal', + }, + subtitle: { + // eslint-disable-next-line spellcheck/spell-checker + name: 'Quattrocento Sans', + data: await (await fetch('https://fonts.bunny.net/quattrocento-sans/files/quattrocento-sans-latin-400-normal.woff')).arrayBuffer(), + weight: 400, + style: 'normal', + }, + }, + libConfig: { + fetcher: globalThis.fetch, + }, + }; + + it('Horizontal', async () => { + const result = await banner({ + ...options, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-horizontal.svg'); + }); + + it('Horizontal RTL', async () => { + const result = await banner({ + ...options, + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-rtl.svg'); + }); + + it('Vertical', async () => { + const result = await banner({ + ...options, + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/banner-vertical.svg'); + }); +}); diff --git a/packages/banners/tests/icons.test.js b/packages/banners/tests/icons.test.js new file mode 100644 index 0000000..529c9fe --- /dev/null +++ b/packages/banners/tests/icons.test.js @@ -0,0 +1,44 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Iconify icons', async () => { + it('API\'s Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + // eslint-disable-next-line spellcheck/spell-checker + icon: 'solar:test-tube-minimalistic-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); + + it('Local Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: ` + + + + + + + + `.toString(), + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); + + it('URL Iconify icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'https://api.iconify.design/solar:test-tube-minimalistic-bold-duotone.svg', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/icons-withIconifyIcon.svg'); + }); +}); diff --git a/packages/banners/tests/results.test.js b/packages/banners/tests/results.test.js new file mode 100644 index 0000000..2956a99 --- /dev/null +++ b/packages/banners/tests/results.test.js @@ -0,0 +1,36 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Horizontal Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/withComplete.svg'); + }); +}); diff --git a/packages/banners/tests/rtl-results.test.js b/packages/banners/tests/rtl-results.test.js new file mode 100644 index 0000000..6bb914e --- /dev/null +++ b/packages/banners/tests/rtl-results.test.js @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Horizontal Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + rtl: true, + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/rtl-withComplete.svg'); + }); +}); diff --git a/packages/banners/tests/vertical-result.test.js b/packages/banners/tests/vertical-result.test.js new file mode 100644 index 0000000..bd804ca --- /dev/null +++ b/packages/banners/tests/vertical-result.test.js @@ -0,0 +1,40 @@ +import { describe, expect, it } from 'vitest'; +import banner from '../src/index'; + +describe('Vertical Layout', async () => { + it('With Title', async () => { + const result = await banner({ + title: 'Hello World', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withTitle.svg'); + }); + + it('With Subtitle', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withSubtitle.svg'); + }); + + it('With Icon', async () => { + const result = await banner({ + title: 'Hello World', + icon: 'solar:test-tube-bold-duotone', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withIcon.svg'); + }); + + it('With Subtitle and Icon', async () => { + const result = await banner({ + title: 'Hello World', + subtitle: 'This is a test', + icon: 'solar:test-tube-bold-duotone', + layout: 'vertical', + }); + expect(result.toString()).toMatchFileSnapshot('./__snapshots__/vertical-withComplete.svg'); + }); +}); diff --git a/packages/banners/vitest.config.js b/packages/banners/vitest.config.js new file mode 100644 index 0000000..d9b0e85 --- /dev/null +++ b/packages/banners/vitest.config.js @@ -0,0 +1,10 @@ +import { defineProject } from 'vitest/config'; + +export default defineProject({ + test: { + environmentMatchGlobs: [ + ['**\/*{,.node}.test.{js,ts}', 'node'], + ], + include: ['./tests/**/*.test.{js,ts}'], + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5448cc4..e80a530 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: vercel: specifier: ^30.2.2 version: 30.2.2(@types/node@14.18.33) + vitest: + specifier: ^0.32.2 + version: 0.32.2 apps/www: devDependencies: @@ -53,6 +56,9 @@ importers: '@iconify/utils': specifier: ^2.1.6 version: 2.1.6 + '@marknow/banners': + specifier: workspace:* + version: link:../../packages/banners '@poppanator/sveltekit-svg': specifier: ^3.0.1 version: 3.0.1(svelte@3.59.1)(vite@4.3.9) @@ -64,10 +70,10 @@ importers: version: 1.20.2(svelte@3.59.1)(vite@4.3.9) '@typescript-eslint/eslint-plugin': specifier: ^5.59.11 - version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@5.1.3) + version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.43.0)(typescript@5.1.3) '@typescript-eslint/parser': specifier: ^5.59.11 - version: 5.59.11(eslint@8.42.0)(typescript@5.1.3) + version: 5.59.11(eslint@8.43.0)(typescript@5.1.3) '@unocss/extractor-svelte': specifier: ^0.52.7 version: 0.52.7 @@ -78,23 +84,20 @@ importers: specifier: ^2.1.0 version: 2.1.0 sass: - specifier: ^1.63.4 - version: 1.63.4 + specifier: ^1.63.6 + version: 1.63.6 satori: specifier: ^0.10.1 version: 0.10.1 - satori-html: - specifier: ^0.3.2 - version: 0.3.2 svelte: specifier: ^3.59.1 version: 3.59.1 svelte-check: specifier: ^3.4.3 - version: 3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1) + version: 3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1) svelte-preprocess: specifier: ^5.0.4 - version: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + version: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) tslib: specifier: ^2.5.3 version: 2.5.3 @@ -118,7 +121,23 @@ importers: version: 0.2.8 vite: specifier: ^4.3.9 - version: 4.3.9(sass@1.63.4) + version: 4.3.9(@types/node@14.18.33)(sass@1.63.6) + + packages/banners: + dependencies: + satori: + specifier: ^0.10.1 + version: 0.10.1 + satori-html: + specifier: ^0.3.2 + version: 0.3.2 + devDependencies: + '@types/node': + specifier: ^20.3.1 + version: 20.3.1 + microbundle: + specifier: ^0.15.1 + version: 0.15.1 packages: @@ -551,6 +570,18 @@ packages: '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.22.5) dev: true + /@babel/plugin-proposal-class-properties@7.12.1(@babel/core@7.22.5): + resolution: {integrity: sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} @@ -617,6 +648,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} @@ -941,6 +982,17 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.5) dev: true + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} @@ -1201,6 +1253,51 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} engines: {node: '>=6.9.0'} @@ -1422,6 +1519,18 @@ packages: - supports-color dev: true + /@babel/preset-flow@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/preset-modules@0.1.5(@babel/core@7.22.5): resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: @@ -1435,6 +1544,21 @@ packages: esutils: 2.0.3 dev: true + /@babel/preset-react@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.22.5) + dev: true + /@babel/preset-typescript@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} engines: {node: '>=6.9.0'} @@ -1967,6 +2091,16 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.43.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.43.0 + eslint-visitor-keys: 3.4.1 + dev: true + /@eslint-community/regexpp@4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1994,6 +2128,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@8.43.0: + resolution: {integrity: sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@fontsource-variable/fira-code@5.0.3: resolution: {integrity: sha512-OfishGTVN3fUM8M27P0NYV4UvugpLigP8DjMHnG9kars9ZRbRPTnfW4lGJELGCXFf6IQVJ2uRyjUKWNIx/Sd2w==} dev: true @@ -2075,6 +2214,13 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/source-map@0.3.3: + resolution: {integrity: sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true @@ -2175,7 +2321,7 @@ packages: dependencies: svelte: 3.59.1 svgo: 3.0.2 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) dev: true /@radix-ui/colors@0.1.8: @@ -2198,6 +2344,85 @@ packages: source-map: 0.7.4 dev: true + /@rollup/plugin-alias@3.1.9(rollup@2.79.1): + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.79.1 + slash: 3.0.0 + dev: true + + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.5)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-commonjs@17.1.0(rollup@2.79.1): + resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.30.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-json@4.1.0(rollup@2.79.1): + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@rollup/pluginutils@4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -2227,7 +2452,6 @@ packages: dependencies: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 - dev: true /@sinclair/typebox@0.25.24: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} @@ -2238,6 +2462,15 @@ packages: engines: {node: '>=10'} dev: true + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: true + /@sveltejs/adapter-vercel@3.0.1(@sveltejs/kit@1.20.2): resolution: {integrity: sha512-PBY3YRm7Q7Prax07mxD/rvcho2CntGkYncAIkz2DtG5NTcVG5JZ1RM627it5zYYtc2/RB3YjMkZuCMBqDCiPkA==} peerDependencies: @@ -2274,7 +2507,7 @@ packages: svelte: 3.59.1 tiny-glob: 0.2.9 undici: 5.22.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2290,7 +2523,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.4.1(svelte@3.59.1)(vite@4.3.9) debug: 4.3.4 svelte: 3.59.1 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - supports-color dev: true @@ -2309,7 +2542,7 @@ packages: magic-string: 0.30.0 svelte: 3.59.1 svelte-hmr: 0.15.2(svelte@3.59.1) - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) vitefu: 0.2.4(vite@4.3.9) transitivePeerDependencies: - supports-color @@ -2372,6 +2605,16 @@ packages: '@types/responselike': 1.0.0 dev: true + /@types/chai-subset@1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + dev: true + /@types/cookie@0.5.1: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true @@ -2394,6 +2637,10 @@ packages: '@types/estree': 1.0.1 dev: true + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true @@ -2450,7 +2697,7 @@ packages: /@types/node-fetch@2.6.3: resolution: {integrity: sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==} dependencies: - '@types/node': 14.18.33 + '@types/node': 20.3.1 form-data: 3.0.1 dev: true @@ -2466,10 +2713,20 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/parse-json@4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + /@types/pug@2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} dev: true + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.3.1 + dev: true + /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: @@ -2512,6 +2769,34 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/type-utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.1 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@5.59.11(eslint@8.42.0)(typescript@5.1.3): resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2532,6 +2817,26 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.59.11: resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2560,6 +2865,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + '@typescript-eslint/utils': 5.59.11(eslint@8.43.0)(typescript@5.1.3) + debug: 4.3.4 + eslint: 8.43.0 + tsutils: 3.21.0(typescript@5.1.3) + typescript: 5.1.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types@5.59.11: resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2606,6 +2931,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils@5.59.11(eslint@8.43.0)(typescript@5.1.3): + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.11 + '@typescript-eslint/types': 5.59.11 + '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.3) + eslint: 8.43.0 + eslint-scope: 5.1.1 + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys@5.59.11: resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2816,7 +3161,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.2.12 magic-string: 0.30.0 - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) transitivePeerDependencies: - rollup dev: true @@ -2857,9 +3202,9 @@ packages: find-up: 5.0.0 javascript-stringify: 2.1.0 lodash: 4.17.21 - mlly: 1.3.0 + mlly: 1.4.0 outdent: 0.8.0 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33) vite-node: 0.28.5(@types/node@14.18.33) transitivePeerDependencies: - '@types/node' @@ -2927,7 +3272,7 @@ packages: dependencies: '@mapbox/node-pre-gyp': 1.0.10 '@rollup/pluginutils': 4.2.1 - acorn: 8.8.2 + acorn: 8.9.0 async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -2948,7 +3293,7 @@ packages: dependencies: '@mapbox/node-pre-gyp': 1.0.10 '@rollup/pluginutils': 4.2.1 - acorn: 8.8.2 + acorn: 8.9.0 async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -3058,7 +3403,7 @@ packages: cacache: 15.3.0 chalk: 4.1.2 chokidar: 3.5.3 - dotenv: 16.1.4 + dotenv: 16.3.1 esbuild: 0.17.6 esbuild-plugin-polyfill-node: 0.2.0(esbuild@0.17.6) execa: 5.1.1 @@ -3143,6 +3488,45 @@ packages: ts-morph: 12.0.0 dev: true + /@vitest/expect@0.32.2: + resolution: {integrity: sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q==} + dependencies: + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + chai: 4.3.7 + dev: true + + /@vitest/runner@0.32.2: + resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} + dependencies: + '@vitest/utils': 0.32.2 + concordance: 5.0.4 + p-limit: 4.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@0.32.2: + resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} + dependencies: + magic-string: 0.30.0 + pathe: 1.1.1 + pretty-format: 27.5.1 + dev: true + + /@vitest/spy@0.32.2: + resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} + dependencies: + tinyspy: 2.1.1 + dev: true + + /@vitest/utils@0.32.2: + resolution: {integrity: sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ==} + dependencies: + diff-sequences: 29.4.3 + loupe: 2.3.6 + pretty-format: 27.5.1 + dev: true + /@web3-storage/multipart-parser@1.0.0: resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} dev: true @@ -3159,12 +3543,12 @@ packages: negotiator: 0.6.3 dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + /acorn-jsx@5.3.2(acorn@8.9.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.8.2 + acorn: 8.9.0 dev: true /acorn-walk@8.2.0: @@ -3172,8 +3556,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + /acorn@8.9.0: + resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -3224,11 +3608,21 @@ packages: type-fest: 0.21.3 dev: true + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true + /ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + dev: true + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -3243,6 +3637,11 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -3326,6 +3725,10 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -3359,15 +3762,48 @@ packages: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} dev: true + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true + /asyncro@3.0.0: + resolution: {integrity: sha512-nEnWYfrBmA3taTiuiOoZYmgJ/CNrSoQLeLs29SeLcPu60yaw/mHDBHV0iOZ051fTvsTHxpCY+gXibqT9wbQYfg==} + dev: true + + /autoprefixer@10.4.14(postcss@8.4.24): + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001503 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.22.5 + cosmiconfig: 7.1.0 + resolve: 1.22.2 + dev: true + /babel-plugin-polyfill-corejs2@0.4.3(@babel/core@7.22.5): resolution: {integrity: sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==} peerDependencies: @@ -3404,6 +3840,19 @@ packages: - supports-color dev: true + /babel-plugin-transform-async-to-promises@0.8.18: + resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} + dev: true + + /babel-plugin-transform-replace-expressions@0.2.0(@babel/core@7.22.5): + resolution: {integrity: sha512-Eh1rRd9hWEYgkgoA3D0kGp7xJ/wgVshgsqmq60iC4HVWD+Lux+fNHSHBa2v1Hsv+dHflShC71qKhiH40OiPtDA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/parser': 7.22.5 + dev: true + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: true @@ -3415,7 +3864,6 @@ packages: /base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} engines: {node: '>= 0.4'} - dev: true /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3444,6 +3892,10 @@ packages: readable-stream: 3.6.2 dev: true + /blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + dev: true + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -3488,6 +3940,13 @@ packages: fill-range: 7.0.1 dev: true + /brotli-size@4.0.0: + resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} + engines: {node: '>= 10.16.0'} + dependencies: + duplexer: 0.1.1 + dev: true + /browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} dependencies: @@ -3604,14 +4063,51 @@ packages: engines: {node: '>=6'} dev: true + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + /camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.21.9 + caniuse-lite: 1.0.30001503 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 dev: true /caniuse-lite@1.0.30001503: resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==} dev: true + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3661,6 +4157,10 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -3719,6 +4219,15 @@ packages: engines: {node: '>= 10'} dev: true + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: @@ -3753,13 +4262,16 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true dev: true + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -3775,11 +4287,19 @@ packages: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} dev: true + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -3791,6 +4311,26 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + + /concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.3.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.5.1 + well-known-symbols: 2.0.0 + dev: true + /consola@3.1.0: resolution: {integrity: sha512-rrrJE6rP0qzl/Srg+C9x/AE5Kxfux7reVm1Wh0wCjuXvih6DqZgqDZe8auTD28fzJ9TF0mHlSDrPpWlujQRo1Q==} dev: true @@ -3853,6 +4393,17 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -3868,15 +4419,31 @@ packages: /css-background-parser@0.1.0: resolution: {integrity: sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==} - dev: true /css-box-shadow@1.0.0-3: resolution: {integrity: sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==} - dev: true /css-color-keywords@1.0.0: resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} engines: {node: '>=4'} + + /css-declaration-sorter@6.4.0(postcss@8.4.24): + resolution: {integrity: sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.24 + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 dev: true /css-select@5.1.0: @@ -3895,6 +4462,13 @@ packages: camelize: 1.0.1 css-color-keywords: 1.0.0 postcss-value-parser: 4.2.0 + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 dev: true /css-tree@2.2.1: @@ -3924,6 +4498,72 @@ packages: hasBin: true dev: true + /cssnano-preset-default@5.2.14(postcss@8.4.24): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.0(postcss@8.4.24) + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-calc: 8.2.4(postcss@8.4.24) + postcss-colormin: 5.3.1(postcss@8.4.24) + postcss-convert-values: 5.1.3(postcss@8.4.24) + postcss-discard-comments: 5.1.2(postcss@8.4.24) + postcss-discard-duplicates: 5.1.0(postcss@8.4.24) + postcss-discard-empty: 5.1.1(postcss@8.4.24) + postcss-discard-overridden: 5.1.0(postcss@8.4.24) + postcss-merge-longhand: 5.1.7(postcss@8.4.24) + postcss-merge-rules: 5.1.4(postcss@8.4.24) + postcss-minify-font-values: 5.1.0(postcss@8.4.24) + postcss-minify-gradients: 5.1.1(postcss@8.4.24) + postcss-minify-params: 5.1.4(postcss@8.4.24) + postcss-minify-selectors: 5.2.1(postcss@8.4.24) + postcss-normalize-charset: 5.1.0(postcss@8.4.24) + postcss-normalize-display-values: 5.1.0(postcss@8.4.24) + postcss-normalize-positions: 5.1.1(postcss@8.4.24) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.24) + postcss-normalize-string: 5.1.0(postcss@8.4.24) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.24) + postcss-normalize-unicode: 5.1.1(postcss@8.4.24) + postcss-normalize-url: 5.1.0(postcss@8.4.24) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.24) + postcss-ordered-values: 5.1.3(postcss@8.4.24) + postcss-reduce-initial: 5.1.2(postcss@8.4.24) + postcss-reduce-transforms: 5.1.0(postcss@8.4.24) + postcss-svgo: 5.1.0(postcss@8.4.24) + postcss-unique-selectors: 5.1.1(postcss@8.4.24) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.24): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /cssnano@5.1.15(postcss@8.4.24): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.24) + lilconfig: 2.1.0 + postcss: 8.4.24 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + /csso@5.0.5: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} @@ -3940,6 +4580,13 @@ packages: engines: {node: '>= 6'} dev: true + /date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + dependencies: + time-zone: 1.0.0 + dev: true + /deasync@0.1.28: resolution: {integrity: sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==} engines: {node: '>=0.11.0'} @@ -3997,6 +4644,13 @@ packages: mimic-response: 3.1.0 dev: true + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -4021,6 +4675,11 @@ packages: engines: {node: '>=10'} dev: true + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + /define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} @@ -4090,6 +4749,11 @@ packages: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: true + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -4121,6 +4785,14 @@ packages: esutils: 2.0.3 dev: true + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: @@ -4133,6 +4805,13 @@ packages: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} @@ -4140,6 +4819,14 @@ packages: domelementtype: 2.3.0 dev: true + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: @@ -4155,11 +4842,15 @@ packages: is-obj: 2.0.0 dev: true - /dotenv@16.1.4: - resolution: {integrity: sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==} + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} dev: true + /duplexer@0.1.1: + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} + dev: true + /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true @@ -4193,13 +4884,20 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + /electron-to-chromium@1.4.431: resolution: {integrity: sha512-m232JTVmCawA2vG+1azVxhKZ9Sv1Q//xxNv5PkP5rWxGgQE8c3CiZFrh8Xnp+d1NmNxlu3QQrGIfdeW5TtXX5w==} dev: true /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4221,6 +4919,10 @@ packages: once: 1.4.0 dev: true + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -4585,7 +5287,6 @@ packages: /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -4984,6 +5685,54 @@ packages: - supports-color dev: true + /eslint@8.43.0: + resolution: {integrity: sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.43.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} dev: true @@ -4992,8 +5741,8 @@ packages: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.1 dev: true @@ -5063,6 +5812,14 @@ packages: '@types/unist': 2.0.6 dev: true + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -5090,6 +5847,10 @@ packages: require-like: 0.1.2 dev: true + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -5166,6 +5927,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} @@ -5210,6 +5975,13 @@ packages: /fflate@0.7.4: resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + + /figures@1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 dev: true /figures@3.2.0: @@ -5235,6 +6007,17 @@ packages: engines: {node: '>= 6'} dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /filesize@6.4.0: + resolution: {integrity: sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ==} + engines: {node: '>= 0.4.0'} + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -5257,6 +6040,15 @@ packages: - supports-color dev: true + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -5310,6 +6102,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /fraction.js@4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: true + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -5417,6 +6213,15 @@ packages: engines: {node: '>=6.9.0'} dev: true + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + dev: true + /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: @@ -5594,6 +6399,13 @@ packages: through2: 2.0.5 dev: true + /gzip-size@3.0.0: + resolution: {integrity: sha512-6s8trQiK+OMzSaCSVXX+iqIcLV9tC+E73jrJrJTyS4h/AJhlxHvzFKqM1YLDJWRGgHX8uLkBeXkA0njNj39L4w==} + engines: {node: '>=0.12.0'} + dependencies: + duplexer: 0.1.2 + dev: true + /gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -5601,6 +6413,13 @@ packages: duplexer: 0.1.2 dev: true + /has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true @@ -5685,7 +6504,6 @@ packages: /hex-rgb@4.3.0: resolution: {integrity: sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==} engines: {node: '>=6'} - dev: true /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -5767,6 +6585,10 @@ packages: safer-buffer: 2.1.2 dev: true + /icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: true + /icss-utils@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} @@ -5789,6 +6611,13 @@ packages: resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} dev: true + /import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -5797,6 +6626,13 @@ packages: resolve-from: 4.0.0 dev: true + /import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /import-meta-resolve@2.2.2: resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} dev: true @@ -5975,6 +6811,12 @@ packages: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} dev: true + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -6010,6 +6852,10 @@ packages: engines: {node: '>=8'} dev: true + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -6052,6 +6898,12 @@ packages: engines: {node: '>=12'} dev: true + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.1 + dev: true + /is-reference@3.0.1: resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==} dependencies: @@ -6113,6 +6965,13 @@ packages: call-bind: 1.0.2 dev: true + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} dev: true @@ -6125,15 +6984,40 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /javascript-stringify@2.1.0: resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} dev: true + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.3.1 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + /jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} hasBin: true dev: true + /js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -6206,7 +7090,7 @@ packages: resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 semver: 7.5.1 @@ -6275,7 +7159,6 @@ packages: dependencies: base64-js: 0.0.8 unicode-trie: 2.0.0 - dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6322,10 +7205,18 @@ packages: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -6342,6 +7233,12 @@ packages: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: true + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + dev: true + /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -6365,6 +7262,12 @@ packages: engines: {node: '>=12'} dev: true + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -6395,6 +7298,23 @@ packages: engines: {node: '>=0.10.0'} dev: true + /maxmin@2.1.0: + resolution: {integrity: sha512-NWlApBjW9az9qRPaeg7CX4sQBWwytqz32bIEo1PW9pRW+kBP9KLRfJO3UC+TV31EcQZEUq7eMzikC7zt3zPJcw==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + figures: 1.7.0 + gzip-size: 3.0.0 + pretty-bytes: 3.0.1 + dev: true + + /md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + dependencies: + blueimp-md5: 2.19.0 + dev: true + /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -6533,6 +7453,10 @@ packages: '@types/mdast': 3.0.11 dev: true + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + /mdn-data@2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} dev: true @@ -6586,6 +7510,58 @@ packages: engines: {node: '>= 0.6'} dev: true + /microbundle@0.15.1: + resolution: {integrity: sha512-aAF+nwFbkSIJGfrJk+HyzmJOq3KFaimH6OIFBU6J2DPjQeg1jXIYlIyEv81Gyisb9moUkudn+wj7zLNYMOv75Q==} + hasBin: true + dependencies: + '@babel/core': 7.22.5 + '@babel/plugin-proposal-class-properties': 7.12.1(@babel/core@7.22.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.5) + '@babel/preset-env': 7.22.5(@babel/core@7.22.5) + '@babel/preset-flow': 7.22.5(@babel/core@7.22.5) + '@babel/preset-react': 7.22.5(@babel/core@7.22.5) + '@rollup/plugin-alias': 3.1.9(rollup@2.79.1) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.5)(rollup@2.79.1) + '@rollup/plugin-commonjs': 17.1.0(rollup@2.79.1) + '@rollup/plugin-json': 4.1.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + asyncro: 3.0.0 + autoprefixer: 10.4.14(postcss@8.4.24) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-async-to-promises: 0.8.18 + babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.22.5) + brotli-size: 4.0.0 + builtin-modules: 3.3.0 + camelcase: 6.3.0 + escape-string-regexp: 4.0.0 + filesize: 6.4.0 + gzip-size: 6.0.0 + kleur: 4.1.5 + lodash.merge: 4.6.2 + postcss: 8.4.24 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-bundle-size: 1.0.3 + rollup-plugin-postcss: 4.0.2(postcss@8.4.24) + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + rollup-plugin-typescript2: 0.32.1(rollup@2.79.1)(typescript@4.9.5) + rollup-plugin-visualizer: 5.9.2(rollup@2.79.1) + sade: 1.8.1 + terser: 5.18.1 + tiny-glob: 0.2.9 + tslib: 2.5.3 + typescript: 4.9.5 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + - ts-node + dev: true + /micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: @@ -6667,8 +7643,8 @@ packages: /micromark-extension-mdxjs@1.0.1: resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) + acorn: 8.9.0 + acorn-jsx: 5.3.2(acorn@8.9.0) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -6924,6 +7900,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -6993,10 +7976,10 @@ packages: hasBin: true dev: true - /mlly@1.3.0: - resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==} + /mlly@1.4.0: + resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 @@ -7116,6 +8099,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} @@ -7143,6 +8131,11 @@ packages: boolbase: 1.0.0 dev: true + /number-is-nan@1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7204,6 +8197,15 @@ packages: mimic-fn: 2.1.0 dev: true + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -7257,6 +8259,11 @@ packages: engines: {node: '>=8'} dev: true + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -7271,6 +8278,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -7292,6 +8306,21 @@ packages: aggregate-error: 3.1.0 dev: true + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7325,7 +8354,6 @@ packages: /pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} @@ -7339,7 +8367,6 @@ packages: dependencies: color-name: 1.1.4 hex-rgb: 4.3.0 - dev: true /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} @@ -7429,6 +8456,10 @@ packages: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} dependencies: @@ -7458,11 +8489,23 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 dev: true @@ -7471,6 +8514,49 @@ packages: engines: {node: '>=4'} dev: true + /postcss-calc@8.2.4(postcss@8.4.24): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@5.3.1(postcss@8.4.24): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@5.1.3(postcss@8.4.24): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@5.1.2(postcss@8.4.24): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + /postcss-discard-duplicates@5.1.0(postcss@8.4.24): resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} engines: {node: ^10 || ^12 || >=14.0} @@ -7480,6 +8566,24 @@ packages: postcss: 8.4.24 dev: true + /postcss-discard-empty@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /postcss-discard-overridden@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + /postcss-load-config@3.1.4(postcss@8.4.24): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -7514,6 +8618,74 @@ packages: yaml: 2.3.1 dev: true + /postcss-merge-longhand@5.1.7(postcss@8.4.24): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.24) + dev: true + + /postcss-merge-rules@5.1.4(postcss@8.4.24): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-minify-font-values@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@5.1.4(postcss@8.4.24): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@5.2.1(postcss@8.4.24): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + /postcss-modules-extract-imports@3.0.0(postcss@8.4.24): resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} engines: {node: ^10 || ^12 || >= 14} @@ -7555,6 +8727,22 @@ packages: postcss: 8.4.24 dev: true + /postcss-modules@4.3.1(postcss@8.4.24): + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.24 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.24) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.24) + postcss-modules-scope: 3.0.0(postcss@8.4.24) + postcss-modules-values: 4.0.0(postcss@8.4.24) + string-hash: 1.1.3 + dev: true + /postcss-modules@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} peerDependencies: @@ -7571,6 +8759,129 @@ packages: string-hash: 1.1.3 dev: true + /postcss-normalize-charset@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + dev: true + + /postcss-normalize-display-values@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-ordered-values@5.1.3(postcss@8.4.24): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0(postcss@8.4.24) + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-reduce-initial@5.1.2(postcss@8.4.24): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + caniuse-api: 3.0.0 + postcss: 8.4.24 + dev: true + + /postcss-reduce-transforms@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + dev: true + /postcss-safe-parser@6.0.0(postcss@8.4.24): resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} engines: {node: '>=12.0'} @@ -7588,9 +8899,29 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-svgo@5.1.0(postcss@8.4.24): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss@8.4.24: resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} @@ -7617,11 +8948,27 @@ packages: hasBin: true dev: true + /pretty-bytes@3.0.1: + resolution: {integrity: sha512-eb7ZAeUTgfh294cElcu51w+OTRp/6ItW758LjwJSK72LDevcuJn0P4eD71PLMDGPwwatXmAmYHTkzvpKlJE3ow==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + /pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} dev: true + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + /pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} @@ -7651,6 +8998,11 @@ packages: optional: true dev: true + /promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + dev: true + /property-information@6.2.0: resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: true @@ -7731,6 +9083,12 @@ packages: engines: {node: '>=10'} dev: true + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -7756,6 +9114,10 @@ packages: unpipe: 1.0.0 dev: true + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -7938,6 +9300,11 @@ packages: unified: 10.1.2 dev: true + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: true + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -8003,6 +9370,96 @@ packages: glob: 7.2.3 dev: true + /rollup-plugin-bundle-size@1.0.3: + resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==} + dependencies: + chalk: 1.1.3 + maxmin: 2.1.0 + dev: true + + /rollup-plugin-postcss@4.0.2(postcss@8.4.24): + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.24) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.24 + postcss-load-config: 3.1.4(postcss@8.4.24) + postcss-modules: 4.3.1(postcss@8.4.24) + promise.series: 0.2.0 + resolve: 1.22.2 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.22.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.18.1 + dev: true + + /rollup-plugin-typescript2@0.32.1(rollup@2.79.1)(typescript@4.9.5): + resolution: {integrity: sha512-RanO8bp1WbeMv0bVlgcbsFNCn+Y3rX7wF97SQLDxf0fMLsg0B/QFF005t4AsGUcDgF3aKJHoqt4JF2xVaABeKw==} + peerDependencies: + rollup: '>=1.26.3' + typescript: '>=2.4.0' + dependencies: + '@rollup/pluginutils': 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + resolve: 1.22.2 + rollup: 2.79.1 + tslib: 2.5.3 + typescript: 4.9.5 + dev: true + + /rollup-plugin-visualizer@5.9.2(rollup@2.79.1): + resolution: {integrity: sha512-waHktD5mlWrYFrhOLbti4YgQCn1uR24nYsNuXxg7LkPH8KdTXVWR9DNY1WU0QqokyMixVXJS4J04HNrVTMP01A==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x + peerDependenciesMeta: + rollup: + optional: true + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + rollup: 2.79.1 + source-map: 0.7.4 + yargs: 17.7.2 + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup@3.25.1: resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -8043,6 +9500,10 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: true + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -8070,8 +9531,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.63.4: - resolution: {integrity: sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==} + /sass@1.63.6: + resolution: {integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -8084,7 +9545,7 @@ packages: resolution: {integrity: sha512-wjTh14iqADFKDK80e51/98MplTGfxz2RmIzh0GqShlf4a67+BooLywF17TvJPD6phO0Hxm7Mf1N5LtRYvdkYRA==} dependencies: ultrahtml: 1.2.0 - dev: true + dev: false /satori@0.10.1: resolution: {integrity: sha512-F4bTCkDp931tLb7+UCNPBuSQwXhikrUkI4fBQo6fA8lF0Evqqgg3nDyUpRktQpR5Ry1DIiIVqLyEwkAms87ykg==} @@ -8100,7 +9561,6 @@ packages: parse-css-color: 0.2.1 postcss-value-parser: 4.2.0 yoga-wasm-web: 0.3.3 - dev: true /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} @@ -8158,6 +9618,12 @@ packages: - supports-color dev: true + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -8202,6 +9668,10 @@ packages: object-inspect: 1.12.3 dev: true + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -8292,6 +9762,11 @@ packages: engines: {node: '>= 8'} dev: true + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: true @@ -8325,11 +9800,24 @@ packages: minipass: 3.3.6 dev: true + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} dev: true + /std-env@3.3.3: + resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} + dev: true + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: true @@ -8354,6 +9842,18 @@ packages: /string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 dev: true /string.prototype.trim@1.2.7: @@ -8404,6 +9904,13 @@ packages: character-entities-legacy: 3.0.0 dev: true + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -8436,7 +9943,11 @@ packages: /strip-literal@1.0.1: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 + dev: true + + /style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} dev: true /style-to-object@0.4.1: @@ -8445,6 +9956,22 @@ packages: inline-style-parser: 0.1.1 dev: true + /stylehacks@5.1.1(postcss@8.4.24): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.9 + postcss: 8.4.24 + postcss-selector-parser: 6.0.13 + dev: true + + /supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -8464,7 +9991,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.4.3(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1): + /svelte-check@3.4.3(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1): resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} hasBin: true peerDependencies: @@ -8477,7 +10004,7 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.59.1 - svelte-preprocess: 5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3) + svelte-preprocess: 5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3) typescript: 5.1.3 transitivePeerDependencies: - '@babel/core' @@ -8514,7 +10041,7 @@ packages: svelte: 3.59.1 dev: true - /svelte-preprocess@5.0.4(postcss@8.4.24)(sass@1.63.4)(svelte@3.59.1)(typescript@5.1.3): + /svelte-preprocess@5.0.4(@babel/core@7.22.5)(postcss@8.4.24)(sass@1.63.6)(svelte@3.59.1)(typescript@5.1.3): resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} engines: {node: '>= 14.10.0'} requiresBuild: true @@ -8552,11 +10079,12 @@ packages: typescript: optional: true dependencies: + '@babel/core': 7.22.5 '@types/pug': 2.0.6 detect-indent: 6.1.0 magic-string: 0.27.0 postcss: 8.4.24 - sass: 1.63.4 + sass: 1.63.6 sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 3.59.1 @@ -8568,6 +10096,20 @@ packages: engines: {node: '>= 8'} dev: true + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + /svgo@3.0.2: resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} engines: {node: '>=14.0.0'} @@ -8613,6 +10155,17 @@ packages: yallist: 4.0.0 dev: true + /terser@5.18.1: + resolution: {integrity: sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.3 + acorn: 8.9.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -8635,6 +10188,11 @@ packages: convert-hrtime: 3.0.0 dev: true + /time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + dev: true + /tiny-glob@0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -8644,6 +10202,19 @@ packages: /tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + /tinybench@2.5.0: + resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} + dev: true + + /tinypool@0.5.0: + resolution: {integrity: sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.1.1: + resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} + engines: {node: '>=14.0.0'} dev: true /tmp@0.0.33: @@ -8714,7 +10285,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 14.18.33 - acorn: 8.8.2 + acorn: 8.9.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -8840,6 +10411,11 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -8894,7 +10470,7 @@ packages: /ultrahtml@1.2.0: resolution: {integrity: sha512-vxZM2yNvajRmCj/SknRYGNXk2tqiy6kRNvZjJLaleG3zJbSh/aNkOqD1/CVzypw8tyHyhpzYuwQgMMhUB4ZVNQ==} - dev: true + dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -8948,7 +10524,6 @@ packages: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 - dev: true /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -8970,7 +10545,7 @@ packages: fast-glob: 3.2.12 local-pkg: 0.4.3 magic-string: 0.30.0 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 pkg-types: 1.0.3 scule: 1.0.0 @@ -9164,7 +10739,7 @@ packages: /unplugin@1.3.1: resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: - acorn: 8.8.2 + acorn: 8.9.0 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 @@ -9287,12 +10862,12 @@ packages: dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.3.0 + mlly: 1.4.0 pathe: 1.1.1 picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.3.9(@types/node@14.18.33)(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33) transitivePeerDependencies: - '@types/node' - less @@ -9303,7 +10878,28 @@ packages: - terser dev: true - /vite@4.3.9(@types/node@14.18.33)(sass@1.63.4): + /vite-node@0.32.2(@types/node@20.3.1): + resolution: {integrity: sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.0 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.3.9(@types/node@20.3.1) + transitivePeerDependencies: + - '@types/node' + - less + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@4.3.9(@types/node@14.18.33): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -9332,12 +10928,11 @@ packages: esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 - sass: 1.63.4 optionalDependencies: fsevents: 2.3.2 dev: true - /vite@4.3.9(sass@1.63.4): + /vite@4.3.9(@types/node@14.18.33)(sass@1.63.6): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -9362,10 +10957,44 @@ packages: terser: optional: true dependencies: + '@types/node': 14.18.33 + esbuild: 0.17.19 + postcss: 8.4.24 + rollup: 3.25.1 + sass: 1.63.6 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vite@4.3.9(@types/node@20.3.1): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.3.1 esbuild: 0.17.19 postcss: 8.4.24 rollup: 3.25.1 - sass: 1.63.4 optionalDependencies: fsevents: 2.3.2 dev: true @@ -9378,7 +11007,72 @@ packages: vite: optional: true dependencies: - vite: 4.3.9(sass@1.63.4) + vite: 4.3.9(@types/node@14.18.33)(sass@1.63.6) + dev: true + + /vitest@0.32.2: + resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.5 + '@types/chai-subset': 1.3.3 + '@types/node': 20.3.1 + '@vitest/expect': 0.32.2 + '@vitest/runner': 0.32.2 + '@vitest/snapshot': 0.32.2 + '@vitest/spy': 0.32.2 + '@vitest/utils': 0.32.2 + acorn: 8.9.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.3.7 + concordance: 5.0.4 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.0 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.3.3 + strip-literal: 1.0.1 + tinybench: 2.5.0 + tinypool: 0.5.0 + vite: 4.3.9(@types/node@20.3.1) + vite-node: 0.32.2(@types/node@20.3.1) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - sass + - stylus + - sugarss + - supports-color + - terser dev: true /vm2@3.9.19: @@ -9386,7 +11080,7 @@ packages: engines: {node: '>=6.0'} hasBin: true dependencies: - acorn: 8.8.2 + acorn: 8.9.0 acorn-walk: 8.2.0 dev: true @@ -9431,6 +11125,11 @@ packages: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} dev: true + /well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + dev: true + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -9468,6 +11167,15 @@ packages: isexe: 2.0.0 dev: true + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -9562,6 +11270,11 @@ packages: engines: {node: '>=0.4'} dev: true + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true @@ -9589,6 +11302,24 @@ packages: engines: {node: '>= 14'} dev: true + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -9599,9 +11330,13 @@ packages: engines: {node: '>=10'} dev: true + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /yoga-wasm-web@0.3.3: resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} - dev: true /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} diff --git a/turbo.json b/turbo.json index 2074674..7cfcf07 100644 --- a/turbo.json +++ b/turbo.json @@ -2,16 +2,39 @@ "$schema": "https://turbo.build/schema.json", "pipeline": { "build": { - "outputs": ["dist/**"] + "dependsOn": [ + "^test", + "test" + ], + "outputs": [ + "dist/**" + ] }, "lint": {}, + "test": { + "dependsOn": [ + "^lint", + "lint" + ] + }, + "test:watch": { + "dependsOn": [ + "^lint", + "lint" + ], + "persistent": true + }, "dev": { - "dependsOn": ["^build"], + "dependsOn": [ + "^build" + ], "cache": false, "persistent": true }, "preview": { - "dependsOn": ["^build"], + "dependsOn": [ + "^build" + ], "persistent": true } } diff --git a/vitest.workspace.json b/vitest.workspace.json new file mode 100644 index 0000000..089b886 --- /dev/null +++ b/vitest.workspace.json @@ -0,0 +1,4 @@ +[ + "packages/*/vitest.config.{js,ts}", + "apps/*/vitest.config.{js,ts}" +]