From 72b1fdc9e95485a3290b47263085e1165b9ab343 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Thu, 2 Feb 2023 13:29:40 +0100 Subject: [PATCH] feat: eslint-plugin (#2140) --- .eslintignore | 1 + packages/core/src/utils/variantGroup.ts | 61 ++++- packages/eslint-config/README.md | 29 +++ packages/eslint-config/build.config.ts | 12 + packages/eslint-config/package.json | 42 ++++ packages/eslint-config/src/index.ts | 5 + packages/eslint-plugin/README.md | 9 + packages/eslint-plugin/build.config.ts | 14 ++ packages/eslint-plugin/fixtures/.eslintignore | 1 + .../eslint-plugin/fixtures/.eslintrc.json | 6 + packages/eslint-plugin/fixtures/src/App.vue | 23 ++ packages/eslint-plugin/fixtures/src/app.tsx | 7 + packages/eslint-plugin/fixtures/tsconfig.json | 25 +++ packages/eslint-plugin/fixtures/uno.config.ts | 11 + packages/eslint-plugin/package.json | 52 +++++ .../eslint-plugin/src/configs/recommended.ts | 7 + packages/eslint-plugin/src/constants.ts | 1 + packages/eslint-plugin/src/dirs.ts | 3 + packages/eslint-plugin/src/index.ts | 13 ++ .../src/rules/order-attributify.ts | 82 +++++++ packages/eslint-plugin/src/rules/order.ts | 71 ++++++ packages/eslint-plugin/src/worker-sort.ts | 18 ++ packages/shared-integration/src/sort-rules.ts | 26 ++- pnpm-lock.yaml | 210 +++++++++--------- test/pos.test.ts | 45 +--- test/sort-rules.test.ts | 13 +- test/variant-group.test.ts | 10 +- tsconfig.json | 1 + 28 files changed, 636 insertions(+), 162 deletions(-) create mode 100644 packages/eslint-config/README.md create mode 100644 packages/eslint-config/build.config.ts create mode 100644 packages/eslint-config/package.json create mode 100644 packages/eslint-config/src/index.ts create mode 100644 packages/eslint-plugin/README.md create mode 100644 packages/eslint-plugin/build.config.ts create mode 100644 packages/eslint-plugin/fixtures/.eslintignore create mode 100644 packages/eslint-plugin/fixtures/.eslintrc.json create mode 100644 packages/eslint-plugin/fixtures/src/App.vue create mode 100644 packages/eslint-plugin/fixtures/src/app.tsx create mode 100644 packages/eslint-plugin/fixtures/tsconfig.json create mode 100644 packages/eslint-plugin/fixtures/uno.config.ts create mode 100644 packages/eslint-plugin/package.json create mode 100644 packages/eslint-plugin/src/configs/recommended.ts create mode 100644 packages/eslint-plugin/src/constants.ts create mode 100644 packages/eslint-plugin/src/dirs.ts create mode 100644 packages/eslint-plugin/src/index.ts create mode 100644 packages/eslint-plugin/src/rules/order-attributify.ts create mode 100644 packages/eslint-plugin/src/rules/order.ts create mode 100644 packages/eslint-plugin/src/worker-sort.ts diff --git a/.eslintignore b/.eslintignore index 2ba7e4d070..ce33dd0d45 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,3 +5,4 @@ interactive/guides/vendor/*.md interactive/data/guides.ts defaultConfig.ts packages/preset-icons/src/collections.json +packages/eslint-plugin/fixtures diff --git a/packages/core/src/utils/variantGroup.ts b/packages/core/src/utils/variantGroup.ts index b8a9044bc8..d594d4e890 100644 --- a/packages/core/src/utils/variantGroup.ts +++ b/packages/core/src/utils/variantGroup.ts @@ -1,4 +1,5 @@ import type MagicString from 'magic-string' +import { notNull } from '../utils' const regexCache: Record = {} @@ -10,12 +11,12 @@ export function makeRegexClassGroup(separators = ['-', ':']) { return regexCache[key] } -export function expandVariantGroup(str: string, separators?: string[], depth?: number): string -export function expandVariantGroup(str: MagicString, separators?: string[], depth?: number): MagicString -export function expandVariantGroup(str: string | MagicString, separators = ['-', ':'], depth = 5) { +export function parseVariantGroup(str: string, separators = ['-', ':'], depth = 5) { const regexClassGroup = makeRegexClassGroup(separators) let hasChanged = false let content = str.toString() + const prefixes = new Set() + do { const before = content content = content.replace( @@ -23,6 +24,9 @@ export function expandVariantGroup(str: string | MagicString, separators = ['-', (from, pre, sep, body: string) => { if (!separators.includes(sep)) return from + + prefixes.add(pre + sep) + return body .split(/\s/g) .filter(Boolean) @@ -34,12 +38,59 @@ export function expandVariantGroup(str: string | MagicString, separators = ['-', depth -= 1 } while (hasChanged && depth) + return { + prefixes: Array.from(prefixes), + expanded: content, + hasChanged, + } +} + +export function collapseVariantGroup(str: string, prefixes: string[]): string { + const collection = new Map() + + const sortedPrefix = prefixes.sort((a, b) => b.length - a.length) + + return str.split(/\s+/g).map((part) => { + const prefix = sortedPrefix.find(prefix => part.startsWith(prefix)) + if (!prefix) + return part + + const body = part.slice(prefix.length) + if (collection.has(prefix)) { + collection.get(prefix)!.push(body) + return null + } + else { + const items = [body] + collection.set(prefix, items) + return { + prefix, + items, + } + } + }) + .filter(notNull) + .map((i) => { + if (typeof i === 'string') + return i + return `${i.prefix}(${i.items.join(' ')})` + }) + .join(' ') +} + +export function expandVariantGroup(str: string, separators?: string[], depth?: number): string +export function expandVariantGroup(str: MagicString, separators?: string[], depth?: number): MagicString +export function expandVariantGroup(str: string | MagicString, separators = ['-', ':'], depth = 5) { + const { + expanded, + } = parseVariantGroup(str.toString(), separators, depth) + if (typeof str === 'string') { - return content + return expanded } else { return str.length() - ? str.overwrite(0, str.length(), content) + ? str.overwrite(0, str.length(), expanded) : str } } diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md new file mode 100644 index 0000000000..24d864f1a9 --- /dev/null +++ b/packages/eslint-config/README.md @@ -0,0 +1,29 @@ +# @unocss/eslint-config + +ESLint config for UnoCSS. + +**Currently working in progress, breaking changes may NOT follow semver.** + +## Installation + +```bash +npm i -D @unocss/eslint-config +``` + +In `.eslintrc`: + +```json +{ + "extends": [ + "@unocss" + ] +} +``` + +## Rules + +- `@unocss/order` - Enforce a specific order for class and attribute selectors. + +## Prior Arts + +Thanks to [eslint-plugin-unocss](https://github.com/devunt/eslint-plugin-unocss) by [@devunt](https://github.com/devunt). diff --git a/packages/eslint-config/build.config.ts b/packages/eslint-config/build.config.ts new file mode 100644 index 0000000000..868e79fab0 --- /dev/null +++ b/packages/eslint-config/build.config.ts @@ -0,0 +1,12 @@ +import { defineBuildConfig } from 'unbuild' + +export default defineBuildConfig({ + entries: [ + 'src/index', + ], + clean: true, + declaration: true, + rollup: { + emitCJS: true, + }, +}) diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json new file mode 100644 index 0000000000..3a68f811f0 --- /dev/null +++ b/packages/eslint-config/package.json @@ -0,0 +1,42 @@ +{ + "name": "@unocss/eslint-config", + "version": "0.0.0", + "description": "ESLint config for UnoCSS", + "author": "Anthony Fu ", + "license": "MIT", + "funding": "https://github.com/sponsors/antfu", + "homepage": "https://github.com/unocss/unocss/tree/main/packages/eslint-config#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/unocss/unocss.git", + "directory": "packages/eslint-config" + }, + "bugs": { + "url": "https://github.com/unocss/unocss/issues" + }, + "keywords": ["eslint-config", "eslint"], + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.mjs" + } + }, + "main": "dist/index.cjs", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "scripts": { + "build": "unbuild", + "stub": "unbuild --stub" + }, + "dependencies": { + "@unocss/eslint-plugin": "workspace:*" + } +} diff --git a/packages/eslint-config/src/index.ts b/packages/eslint-config/src/index.ts new file mode 100644 index 0000000000..0216651163 --- /dev/null +++ b/packages/eslint-config/src/index.ts @@ -0,0 +1,5 @@ +export default { + extends: [ + 'plugin:@unocss/recommended', + ], +} diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md new file mode 100644 index 0000000000..2eae8ef2d3 --- /dev/null +++ b/packages/eslint-plugin/README.md @@ -0,0 +1,9 @@ +# @unocss/eslint-plugin + +ESLint plugin for UnoCSS. + +**Currently working in progress, breaking changes may NOT follow semver.** + +## Installation + +Please refer to [@unocss/eslint-config](../eslint-config/) for installation. diff --git a/packages/eslint-plugin/build.config.ts b/packages/eslint-plugin/build.config.ts new file mode 100644 index 0000000000..5434d546e4 --- /dev/null +++ b/packages/eslint-plugin/build.config.ts @@ -0,0 +1,14 @@ +import { defineBuildConfig } from 'unbuild' + +export default defineBuildConfig({ + entries: [ + 'src/dirs', + 'src/index', + 'src/worker-sort', + ], + clean: true, + declaration: true, + rollup: { + emitCJS: true, + }, +}) diff --git a/packages/eslint-plugin/fixtures/.eslintignore b/packages/eslint-plugin/fixtures/.eslintignore new file mode 100644 index 0000000000..5091b943cd --- /dev/null +++ b/packages/eslint-plugin/fixtures/.eslintignore @@ -0,0 +1 @@ +.eslintrc.json diff --git a/packages/eslint-plugin/fixtures/.eslintrc.json b/packages/eslint-plugin/fixtures/.eslintrc.json new file mode 100644 index 0000000000..16003a8aa3 --- /dev/null +++ b/packages/eslint-plugin/fixtures/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": [ + "@antfu", + "plugin:@unocss/recommended" + ] +} diff --git a/packages/eslint-plugin/fixtures/src/App.vue b/packages/eslint-plugin/fixtures/src/App.vue new file mode 100644 index 0000000000..8336dae6f5 --- /dev/null +++ b/packages/eslint-plugin/fixtures/src/App.vue @@ -0,0 +1,23 @@ + diff --git a/packages/eslint-plugin/fixtures/src/app.tsx b/packages/eslint-plugin/fixtures/src/app.tsx new file mode 100644 index 0000000000..46aad6428d --- /dev/null +++ b/packages/eslint-plugin/fixtures/src/app.tsx @@ -0,0 +1,7 @@ +export default function App() { + return ( +

+ Hello world! +

+ ) +} diff --git a/packages/eslint-plugin/fixtures/tsconfig.json b/packages/eslint-plugin/fixtures/tsconfig.json new file mode 100644 index 0000000000..f2850b7161 --- /dev/null +++ b/packages/eslint-plugin/fixtures/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react" + }, + "include": [ + "src" + ] +} diff --git a/packages/eslint-plugin/fixtures/uno.config.ts b/packages/eslint-plugin/fixtures/uno.config.ts new file mode 100644 index 0000000000..3e3212397b --- /dev/null +++ b/packages/eslint-plugin/fixtures/uno.config.ts @@ -0,0 +1,11 @@ +// eslint-disable-next-line no-restricted-imports +import { defineConfig, presetUno, transformerVariantGroup } from 'unocss' + +export default defineConfig({ + presets: [ + presetUno(), + ], + transformers: [ + transformerVariantGroup(), + ], +}) diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json new file mode 100644 index 0000000000..7abbab93bd --- /dev/null +++ b/packages/eslint-plugin/package.json @@ -0,0 +1,52 @@ +{ + "name": "@unocss/eslint-plugin", + "version": "0.0.0", + "description": "ESLint plugin for UnoCSS", + "author": "Anthony Fu ", + "license": "MIT", + "funding": "https://github.com/sponsors/antfu", + "homepage": "https://github.com/unocss/unocss/tree/main/packages/esling-plugin#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/unocss/unocss.git", + "directory": "packages/esling-plugin" + }, + "bugs": { + "url": "https://github.com/unocss/unocss/issues" + }, + "keywords": [ + "eslint-plugin", + "eslint" + ], + "sideEffects": false, + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.mjs" + } + }, + "main": "dist/index.cjs", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "files": [ + "dist" + ], + "engines": { + "node": ">=14" + }, + "scripts": { + "build": "unbuild", + "lint": "nr build && cd ./fixtures && eslint ./src" + }, + "dependencies": { + "@typescript-eslint/utils": "^5.50.0", + "@unocss/config": "workspace:^0.49.2", + "@unocss/core": "workspace:*", + "magic-string": "^0.27.0", + "synckit": "^0.8.5" + }, + "devDependencies": { + "@unocss/eslint-plugin": "workspace:*" + } +} diff --git a/packages/eslint-plugin/src/configs/recommended.ts b/packages/eslint-plugin/src/configs/recommended.ts new file mode 100644 index 0000000000..22d6baced7 --- /dev/null +++ b/packages/eslint-plugin/src/configs/recommended.ts @@ -0,0 +1,7 @@ +export default { + plugins: ['@unocss'], + rules: { + '@unocss/order': 'warn', + '@unocss/order-attributify': 'warn', + }, +} diff --git a/packages/eslint-plugin/src/constants.ts b/packages/eslint-plugin/src/constants.ts new file mode 100644 index 0000000000..72e7dd27b5 --- /dev/null +++ b/packages/eslint-plugin/src/constants.ts @@ -0,0 +1 @@ +export const CLASS_FIELDS = ['class', 'classname'] diff --git a/packages/eslint-plugin/src/dirs.ts b/packages/eslint-plugin/src/dirs.ts new file mode 100644 index 0000000000..153f29f2fb --- /dev/null +++ b/packages/eslint-plugin/src/dirs.ts @@ -0,0 +1,3 @@ +import { fileURLToPath } from 'url' + +export const distDir = fileURLToPath(new URL('../dist', import.meta.url)) diff --git a/packages/eslint-plugin/src/index.ts b/packages/eslint-plugin/src/index.ts new file mode 100644 index 0000000000..7109dc5873 --- /dev/null +++ b/packages/eslint-plugin/src/index.ts @@ -0,0 +1,13 @@ +import order from './rules/order' +import orderAttributify from './rules/order-attributify' +import configsRecommended from './configs/recommended' + +export default { + rules: { + order, + 'order-attributify': orderAttributify, + }, + configs: { + recommended: configsRecommended, + }, +} diff --git a/packages/eslint-plugin/src/rules/order-attributify.ts b/packages/eslint-plugin/src/rules/order-attributify.ts new file mode 100644 index 0000000000..409e4da5c9 --- /dev/null +++ b/packages/eslint-plugin/src/rules/order-attributify.ts @@ -0,0 +1,82 @@ +import { join } from 'path' +import { ESLintUtils } from '@typescript-eslint/utils' +import { createSyncFn } from 'synckit' +import type { RuleListener } from '@typescript-eslint/utils/dist/ts-eslint' +import type { TSESTree } from '@typescript-eslint/types' +import MagicString from 'magic-string' +import { distDir } from '../dirs' + +const sortClasses = createSyncFn<(classes: string) => Promise>(join(distDir, 'worker-sort.cjs')) + +const INGORE_ATTRIBUTES = ['style', 'class', 'classname', 'value'] + +export default ESLintUtils.RuleCreator(name => name)({ + name: 'order-attributify', + meta: { + type: 'layout', + fixable: 'code', + docs: { + description: 'Order of UnoCSS attributes', + recommended: false, + }, + messages: { + 'invalid-order': 'UnoCSS attributes are not ordered', + }, + schema: [], + }, + defaultOptions: [], + create(context) { + const scriptVisitor: RuleListener = { + } + + const templateBodyVisitor: RuleListener = { + VStartTag(node: any) { + const valueless = node.attributes.filter((i: any) => !INGORE_ATTRIBUTES.includes(i.key?.name?.toLowerCase()) && i.value == null) + if (!valueless.length) + return + + const input = valueless.map((i: any) => i.key.name).join(' ').trim() + const sorted = sortClasses(input) + if (sorted !== input) { + context.report({ + node, + messageId: 'invalid-order', + fix(fixer) { + const codeFull = context.getSourceCode() + const offset = node.range[0] + const code = codeFull.getText().slice(node.range[0], node.range[1]) + + const s = new MagicString(code) + + const sortedNodes = valueless + .map((i: TSESTree.Node) => [i.range[0] - offset, i.range[1] - offset] as const) + .sort((a: any, b: any) => a[0] - b[0]) + + for (let [start, end] of sortedNodes.slice(1)) { + if (code[start - 1] === ' ') + start-- + if (code[end] === ' ') + end++ + s.remove(start, end) + } + + s.overwrite(sortedNodes[0][0], sortedNodes[0][1], ` ${sorted.trim()} `) + + return fixer.replaceText(node, s.toString()) + }, + }) + } + }, + } + + // @ts-expect-error missing-types + if (context.parserServices == null || context.parserServices.defineTemplateBodyVisitor == null) { + return scriptVisitor + } + else { + // For Vue + // @ts-expect-error missing-types + return context.parserServices?.defineTemplateBodyVisitor(templateBodyVisitor, scriptVisitor) + } + }, +}) diff --git a/packages/eslint-plugin/src/rules/order.ts b/packages/eslint-plugin/src/rules/order.ts new file mode 100644 index 0000000000..a525e4c79f --- /dev/null +++ b/packages/eslint-plugin/src/rules/order.ts @@ -0,0 +1,71 @@ +import { join } from 'path' +import { ESLintUtils } from '@typescript-eslint/utils' +import { createSyncFn } from 'synckit' +import type { RuleListener } from '@typescript-eslint/utils/dist/ts-eslint' +import type { TSESTree } from '@typescript-eslint/types' +import { distDir } from '../dirs' +import { CLASS_FIELDS } from '../constants' + +const sortClasses = createSyncFn<(classes: string) => Promise>(join(distDir, 'worker-sort.cjs')) + +export default ESLintUtils.RuleCreator(name => name)({ + name: 'order', + meta: { + type: 'layout', + fixable: 'code', + docs: { + description: 'Order', + recommended: false, + }, + messages: { + 'invalid-order': 'UnoCSS utilities are not ordered', + }, + schema: [], + }, + defaultOptions: [], + create(context) { + function checkLiteral(node: TSESTree.Literal) { + if (typeof node.value !== 'string') + return + const input = node.value as string + const sorted = sortClasses(input) + if (sorted !== input) { + context.report({ + node, + messageId: 'invalid-order', + fix(fixer) { + return fixer.replaceText(node, `"${sorted.trim()}"`) + }, + }) + } + } + + const scriptVisitor: RuleListener = { + JSXAttribute(node) { + if (typeof node.name.name === 'string' && CLASS_FIELDS.includes(node.name.name.toLowerCase()) && node.value) { + if (node.value.type === 'Literal') + checkLiteral(node.value) + } + }, + } + + const templateBodyVisitor: RuleListener = { + VAttribute(node: any) { + if (node.key.name === 'class') { + if (node.value.type === 'VLiteral') + checkLiteral(node.value) + } + }, + } + + // @ts-expect-error missing-types + if (context.parserServices == null || context.parserServices.defineTemplateBodyVisitor == null) { + return scriptVisitor + } + else { + // For Vue + // @ts-expect-error missing-types + return context.parserServices?.defineTemplateBodyVisitor(templateBodyVisitor, scriptVisitor) + } + }, +}) diff --git a/packages/eslint-plugin/src/worker-sort.ts b/packages/eslint-plugin/src/worker-sort.ts new file mode 100644 index 0000000000..c6d4f9bfd2 --- /dev/null +++ b/packages/eslint-plugin/src/worker-sort.ts @@ -0,0 +1,18 @@ +import { loadConfig } from '@unocss/config' +import type { UnoGenerator } from '@unocss/core' +import { createGenerator } from '@unocss/core' +import { runAsWorker } from 'synckit' +import { sortRules } from '../../shared-integration/src/sort-rules' + +async function getGenerator() { + const { config } = await loadConfig() + return createGenerator(config) +} + +let promise: Promise> | undefined + +runAsWorker(async (classes: string) => { + promise = promise || getGenerator() + const uno = await promise + return await sortRules(classes, uno) +}) diff --git a/packages/shared-integration/src/sort-rules.ts b/packages/shared-integration/src/sort-rules.ts index b75e138e59..e1006fea69 100644 --- a/packages/shared-integration/src/sort-rules.ts +++ b/packages/shared-integration/src/sort-rules.ts @@ -1,13 +1,20 @@ import type { UnoGenerator } from '@unocss/core' -import { notNull } from '@unocss/core' +import { collapseVariantGroup, notNull, parseVariantGroup } from '@unocss/core' -export async function sortRules(rules: string[], uno: UnoGenerator) { +export async function sortRules(rules: string, uno: UnoGenerator) { const unknown: string[] = [] // enable details for variant handlers - uno.config.details = true + if (!uno.config.details) + uno.config.details = true - const result = await Promise.all(rules + // const hasAttributify = !!uno.config.presets.find(i => i.name === '@unocss/preset-attributify') + // const hasVariantGroup = !!uno.config.transformers?.find(i => i.name === '@unocss/transformer-variant-group') + + const expandedResult = parseVariantGroup(rules) // todo read seperators from config + rules = expandedResult.expanded + + const result = await Promise.all(rules.split(/\s+/g) .map(async (i) => { const token = await uno.parseToken(i) if (token == null) { @@ -19,7 +26,7 @@ export async function sortRules(rules: string[], uno: UnoGenerator) { return [order, i] as const })) - const sorted = result + let sorted = result .filter(notNull) .sort((a, b) => { let result = a[0] - b[0] @@ -28,9 +35,10 @@ export async function sortRules(rules: string[], uno: UnoGenerator) { return result }) .map(i => i[1]) + .join(' ') + + if (expandedResult?.prefixes.length) + sorted = collapseVariantGroup(sorted, expandedResult.prefixes) - return { - sorted, - unknown, - } + return [...unknown, sorted].join(' ').trim() } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c14e4edc01..a7721ef9ef 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -354,6 +354,29 @@ importers: magic-string: 0.27.0 unconfig: 0.3.7 + packages/eslint-config: + specifiers: + '@unocss/eslint-plugin': workspace:* + dependencies: + '@unocss/eslint-plugin': link:../eslint-plugin + + packages/eslint-plugin: + specifiers: + '@typescript-eslint/utils': ^5.50.0 + '@unocss/config': workspace:^0.49.2 + '@unocss/core': workspace:* + '@unocss/eslint-plugin': workspace:* + magic-string: ^0.27.0 + synckit: ^0.8.5 + dependencies: + '@typescript-eslint/utils': 5.50.0_iukboom6ndih5an6iafl45j2fe + '@unocss/config': link:../config + '@unocss/core': link:../core + magic-string: 0.27.0 + synckit: 0.8.5 + devDependencies: + '@unocss/eslint-plugin': 'link:' + packages/extractor-pug: specifiers: '@types/pug': ^2.0.6 @@ -2241,7 +2264,14 @@ packages: resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.9 + regenerator-runtime: 0.13.11 + dev: true + + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 dev: true /@babel/standalone/7.19.3: @@ -2740,7 +2770,6 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true /@hapi/address/2.1.4: resolution: {integrity: sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==} @@ -2793,16 +2822,13 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true /@humanwhocodes/module-importer/1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true /@iconify-json/carbon/1.1.13: resolution: {integrity: sha512-qPR7n3JkCqIrvjxnyUPIejhn0wrZJsLmija59U/zwFm5SMOITCfLx+Jp6VecnL0Sm76zRE5Kv54VzolQljB97A==} @@ -3447,8 +3473,7 @@ packages: open: 8.4.0 picocolors: 1.0.0 tiny-glob: 0.2.9 - tslib: 2.4.1 - dev: true + tslib: 2.5.0 /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -3926,7 +3951,6 @@ packages: /@types/json-schema/7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: true /@types/json5/0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -4061,7 +4085,6 @@ packages: /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: true /@types/serve-index/1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -4223,6 +4246,13 @@ packages: '@typescript-eslint/visitor-keys': 5.48.0 dev: true + /@typescript-eslint/scope-manager/5.50.0: + resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/visitor-keys': 5.50.0 + /@typescript-eslint/type-utils/5.48.0_iukboom6ndih5an6iafl45j2fe: resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4248,6 +4278,10 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/types/5.50.0: + resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.4: resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4269,6 +4303,26 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree/5.50.0_typescript@4.9.4: + resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/visitor-keys': 5.50.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 + transitivePeerDependencies: + - supports-color + /@typescript-eslint/utils/5.48.0_iukboom6ndih5an6iafl45j2fe: resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4289,6 +4343,25 @@ packages: - typescript dev: true + /@typescript-eslint/utils/5.50.0_iukboom6ndih5an6iafl45j2fe: + resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.50.0 + '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.4 + eslint: 8.31.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.31.0 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + /@typescript-eslint/visitor-keys/5.48.0: resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4297,6 +4370,13 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /@typescript-eslint/visitor-keys/5.50.0: + resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.50.0 + eslint-visitor-keys: 3.3.0 + /@unhead/dom/1.0.2: resolution: {integrity: sha512-AAiYzDmwTTePJu5ZBypPIJidQMDS2WrCXQfe6KJIJtgLss0oXNllve4XVjPEDVh31lfAna89KfVPb/2z0g71pg==} dependencies: @@ -4356,7 +4436,7 @@ packages: '@babel/core': 7.20.2 '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.20.2 - vite: 3.2.5 + vite: 3.2.5_qfz55zahqkp66vn23sxaaw3yfe vue: 3.2.45 transitivePeerDependencies: - supports-color @@ -4369,7 +4449,7 @@ packages: vite: ^3.0.0 vue: ^3.2.25 dependencies: - vite: 3.2.5 + vite: 3.2.5_qfz55zahqkp66vn23sxaaw3yfe vue: 3.2.45 dev: true @@ -5807,7 +5887,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.8.1 - dev: true /acorn-node/1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} @@ -5915,7 +5994,6 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true /ajv/8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} @@ -5984,7 +6062,6 @@ packages: /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex/6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -6002,7 +6079,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles/6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} @@ -6100,7 +6176,6 @@ packages: /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -6150,7 +6225,6 @@ packages: /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true /array-uniq/1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} @@ -6494,7 +6568,6 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true /base/0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} @@ -6671,7 +6744,6 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /brace-expansion/2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -6992,7 +7064,6 @@ packages: /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camel-case/3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} @@ -7091,7 +7162,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /chalk/5.1.2: resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==} @@ -7447,14 +7517,12 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name/1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /color-string/1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} @@ -7586,7 +7654,6 @@ packages: /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - dev: true /concat-stream/1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} @@ -8505,7 +8572,6 @@ packages: /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true /deepmerge-ts/4.2.2: resolution: {integrity: sha512-Ka3Kb21tiWjvQvS9U+1Dx+aqFAHsdTnMdYptLTmC2VAmDFMugWMY1e15aTODstipmCun8iNuqeSfcx6rsUUk0Q==} @@ -8553,7 +8619,6 @@ packages: /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - dev: true /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} @@ -8591,6 +8656,7 @@ packages: /defu/6.1.0: resolution: {integrity: sha512-pOFYRTIhoKujrmbTRhcW5lYQLBXw/dlTwfI8IguF1QCDJOcJzNH1w+YFjxqy6BAuJrClTy6MUE8q+oKJ2FLsIw==} + dev: true /defu/6.1.1: resolution: {integrity: sha512-aA964RUCsBt0FGoNIlA3uFgo2hO+WWC0fiC6DBps/0SFzkKcYoM/3CzVLIa5xSsrFjdioMdYgAIbwo80qp2MoA==} @@ -8745,7 +8811,6 @@ packages: engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 - dev: true /doctypes/1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} @@ -9977,7 +10042,6 @@ packages: /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /escape-string-regexp/5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} @@ -10024,7 +10088,7 @@ packages: /eslint-plugin-antfu/0.34.0_iukboom6ndih5an6iafl45j2fe: resolution: {integrity: sha512-C5Hn3fVGPTjmrmaNby8QqdYlmt+MK0TG5dmgKXvgmOyvCkSMDRXcETczjmpMb4RbTakr3UX5tFxyMI5HfHMB2g==} dependencies: - '@typescript-eslint/utils': 5.48.0_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/utils': 5.50.0_iukboom6ndih5an6iafl45j2fe transitivePeerDependencies: - eslint - supports-color @@ -10217,7 +10281,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true /eslint-scope/7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} @@ -10225,7 +10288,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -10242,7 +10304,6 @@ packages: dependencies: eslint: 8.31.0 eslint-visitor-keys: 2.1.0 - dev: true /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} @@ -10252,12 +10313,10 @@ packages: /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - dev: true /eslint-visitor-keys/3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /eslint/8.31.0: resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} @@ -10305,7 +10364,6 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true /esno/0.16.3: resolution: {integrity: sha512-6slSBEV1lMKcX13DBifvnDFpNno5WXhw4j/ff7RI0y51BZiDqEe5dNhhjhIQ3iCOQuzsm2MbVzmwqbN78BBhPg==} @@ -10321,7 +10379,6 @@ packages: acorn: 8.8.1 acorn-jsx: 5.3.2_acorn@8.8.1 eslint-visitor-keys: 3.3.0 - dev: true /esprima-extract-comments/1.1.0: resolution: {integrity: sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw==} @@ -10341,24 +10398,20 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - dev: true /estraverse/4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} - dev: true /estraverse/5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true /estree-util-is-identifier-name/2.0.1: resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==} @@ -10388,7 +10441,6 @@ packages: /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true /etag/1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} @@ -10671,7 +10723,6 @@ packages: /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true /fast-glob/2.2.7: resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} @@ -10699,11 +10750,9 @@ packages: /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true /fastq/1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} @@ -10756,7 +10805,6 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 - dev: true /file-loader/4.3.0_webpack@4.46.0: resolution: {integrity: sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==} @@ -10877,7 +10925,6 @@ packages: dependencies: flatted: 3.2.7 rimraf: 3.0.2 - dev: true /flat/5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} @@ -10885,7 +10932,6 @@ packages: /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true /flush-write-stream/1.1.1: resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} @@ -11047,7 +11093,6 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true /fsevents/1.2.13: resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} @@ -11224,7 +11269,6 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp/0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} @@ -11254,7 +11298,6 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true /glob/8.0.3: resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} @@ -11288,7 +11331,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.20.2 - dev: true /globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} @@ -11299,7 +11341,6 @@ packages: /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -11311,7 +11352,6 @@ packages: ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 - dev: true /globby/13.1.2: resolution: {integrity: sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==} @@ -11364,7 +11404,6 @@ packages: /globrex/0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -11377,7 +11416,6 @@ packages: /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true /graphql/16.6.0: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} @@ -11453,7 +11491,6 @@ packages: /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-package-exports/1.3.0: resolution: {integrity: sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==} @@ -12003,7 +12040,6 @@ packages: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true /import-from/2.1.0: resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==} @@ -12028,7 +12064,6 @@ packages: /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} @@ -12048,7 +12083,6 @@ packages: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits/2.0.1: resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} @@ -12360,7 +12394,6 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker/3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} @@ -12512,7 +12545,6 @@ packages: /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - dev: true /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} @@ -12668,7 +12700,6 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -12753,7 +12784,6 @@ packages: /js-sdsl/4.1.5: resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} - dev: true /js-stringify/1.0.2: resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} @@ -12775,7 +12805,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: true /jsbn/0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} @@ -12807,7 +12836,6 @@ packages: /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -12819,7 +12847,6 @@ packages: /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} @@ -12965,7 +12992,6 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} @@ -13159,7 +13185,6 @@ packages: /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.pick/4.4.0: resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==} @@ -14054,7 +14079,6 @@ packages: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - dev: true /minimatch/5.1.2: resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} @@ -14345,7 +14369,6 @@ packages: /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -14915,7 +14938,6 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - dev: true /onetime/2.0.1: resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} @@ -14951,7 +14973,6 @@ packages: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true /opener/1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} @@ -14975,7 +14996,6 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.3 - dev: true /ora/3.4.0: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} @@ -15144,7 +15164,6 @@ packages: engines: {node: '>=6'} dependencies: callsites: 3.1.0 - dev: true /parse-asn1/5.1.6: resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} @@ -15286,7 +15305,6 @@ packages: /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true /path-is-inside/1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} @@ -16356,7 +16374,6 @@ packages: /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true /prepend-http/1.0.4: resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} @@ -16619,7 +16636,6 @@ packages: /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - dev: true /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} @@ -16828,14 +16844,14 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime/0.13.9: - resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} dev: true /regenerator-transform/0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.20.13 dev: true /regex-not/1.0.2: @@ -16863,7 +16879,6 @@ packages: /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - dev: true /regexpu-core/5.2.1: resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} @@ -17060,7 +17075,6 @@ packages: /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} @@ -17183,7 +17197,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: true /ripemd160/2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} @@ -17313,7 +17326,7 @@ packages: /rxjs/7.5.7: resolution: {integrity: sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==} dependencies: - tslib: 2.4.1 + tslib: 2.5.0 dev: true /s.color/0.0.15: @@ -17725,7 +17738,6 @@ packages: /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true /slash/4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} @@ -18191,7 +18203,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi/7.0.1: resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} @@ -18239,7 +18250,6 @@ packages: /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true /strip-literal/1.0.0: resolution: {integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==} @@ -18324,7 +18334,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -18396,6 +18405,14 @@ packages: tslib: 2.4.1 dev: true + /synckit/0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.3.1 + tslib: 2.5.0 + dev: false + /tailwindcss/3.2.4_postcss@8.4.20: resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} engines: {node: '>=12.13.0'} @@ -18540,7 +18557,6 @@ packages: /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true /theme-vitesse/0.6.0: resolution: {integrity: sha512-/XEZFGXLTK/AlWSe9t+NIXB1tP3yqdzugcSJJ2Fg0KYM1PcoL/zWs5AuaEcCFt1pfi/9Og++tzOdiU2aKf/+Xw==} @@ -18617,7 +18633,6 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true /tiny-invariant/1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -18776,12 +18791,14 @@ packages: /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: true + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tsm/2.2.2: resolution: {integrity: sha512-bXkt675NbbqfwRHSSn8kSNEEHvoIUFDM9G6tUENkjEKpAEbrEzieO3PxUiRJylMw8fEGpcf5lSjadzzz12pc2A==} engines: {node: '>=12'} @@ -18870,7 +18887,6 @@ packages: dependencies: tslib: 1.14.1 typescript: 4.9.4 - dev: true /tsx/3.10.1: resolution: {integrity: sha512-Gh6xoW4xrdnLs6hYZydVHIQtrgmbZ/DbnJoLsYoI8MxhKAIyu8R7RyF0D5qg9UKi74Nmr4iSlijdz7Q43IGLyQ==} @@ -18902,7 +18918,6 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} @@ -18917,7 +18932,6 @@ packages: /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: true /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} @@ -18960,7 +18974,6 @@ packages: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true - dev: true /uc.micro/1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} @@ -19038,8 +19051,8 @@ packages: resolution: {integrity: sha512-1589b7oGa8ILBYpta7TndM5mLHLzHUqBfhszeZxuUBrjO/RoQ52VGVWsS3w0C0GLNxO9RPmqkf6BmIvBApaRdA==} dependencies: '@antfu/utils': 0.5.2 - defu: 6.1.0 - jiti: 1.16.0 + defu: 6.1.1 + jiti: 1.16.1 /unctx/2.1.0: resolution: {integrity: sha512-Q3UdS5IAlVRIWsWDd8Rr9g2zqBAZaecBgQ+XXFiKbZzovDMMTEU+Ki0SAVf/ZgWsoeG0/c1kzO2/k6BVhbkUHw==} @@ -19433,7 +19446,6 @@ packages: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 - dev: true /urix/0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} @@ -20943,7 +20955,6 @@ packages: /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} - dev: true /worker-farm/1.7.0: resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} @@ -20997,7 +21008,6 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} diff --git a/test/pos.test.ts b/test/pos.test.ts index 8cfd90553d..4138d7182a 100644 --- a/test/pos.test.ts +++ b/test/pos.test.ts @@ -54,25 +54,7 @@ describe('matched-positions', async () => { }) expect(await match(uno, '.btn-center{@apply text-center my-0 font-medium;\n}')) - .toMatchInlineSnapshot(` - [ - [ - 19, - 30, - "text-center", - ], - [ - 31, - 35, - "my-0", - ], - [ - 36, - 47, - "font-medium", - ], - ] - `) + .toMatchInlineSnapshot('[]') }) test('class-based', async () => { @@ -117,21 +99,6 @@ describe('matched-positions', async () => { expect(await match(uno, '
')) .toMatchInlineSnapshot(` [ - [ - 19, - 22, - "hover:h-4", - ], - [ - 23, - 26, - "hover:w-4", - ], - [ - 27, - 39, - "hover:bg-green-300", - ], [ 41, 60, @@ -228,16 +195,6 @@ describe('matched-positions-pug', async () => { 30, "p4", ], - [ - 45, - 48, - "hover:h-4", - ], - [ - 49, - 52, - "hover:w-4", - ], ] `) }) diff --git a/test/sort-rules.test.ts b/test/sort-rules.test.ts index faeea7e136..8f9465df3e 100644 --- a/test/sort-rules.test.ts +++ b/test/sort-rules.test.ts @@ -11,12 +11,12 @@ describe('sort rules', () => { }) async function sort(tokens: string) { - const result = await sortRules(tokens.split(' '), uno) - return [...result.sorted, ...result.unknown].join(' ') + return await sortRules(tokens, uno) } + test('basic', async () => { expect(await sort('pt-2 p-4 foo')) - .toMatchInlineSnapshot('"p-4 pt-2 foo"') + .toMatchInlineSnapshot('"foo p-4 pt-2"') expect(await sort('hover:focus:p1 hover:mt1 hover:m2 pt-2 p-4')) .toMatchInlineSnapshot('"p-4 pt-2 hover:m2 hover:mt1 hover:focus:p1"') expect(await sort('hover:opacity-75 opacity-50 hover:scale-150 scale-125')) @@ -24,4 +24,11 @@ describe('sort rules', () => { expect(await sort('lg:grid-cols-4 grid sm:grid-cols-3 grid-cols-2')) .toMatchInlineSnapshot('"grid grid-cols-2 lg:grid-cols-4 sm:grid-cols-3"') }) + + test('variant group', async () => { + expect(await sort('hover:pt-2 hover:p-4 foo')) + .toMatchInlineSnapshot('"foo hover:p-4 hover:pt-2"') + expect(await sort('hover:(pt-2 p-4) hover:text-red hover:focus:(m1 mx2) foo')) + .toMatchInlineSnapshot('"foo hover:(p-4 pt-2 text-red) hover:focus:(m1 mx2)"') + }) }) diff --git a/test/variant-group.test.ts b/test/variant-group.test.ts index 20c6e86bab..7dc7ab8162 100644 --- a/test/variant-group.test.ts +++ b/test/variant-group.test.ts @@ -1,4 +1,4 @@ -import { expandVariantGroup } from '@unocss/core' +import { collapseVariantGroup, expandVariantGroup } from '@unocss/core' import { describe, expect, test } from 'vitest' describe('variant-group', () => { @@ -57,3 +57,11 @@ describe('variant-group', () => { expect(expandVariantGroup('a:(b?c d)')).toEqual('a:b?c a:d') }) }) + +describe('collapse-variant-group', () => { + test('basic', async () => { + expect(collapseVariantGroup('', [])).toEqual('') + expect(collapseVariantGroup('a:b:c a:c:b', [])).toEqual('a:b:c a:c:b') + expect(collapseVariantGroup('hello a:b a:c middle c:a:b c:d a:d', ['a:', 'c:'])).toEqual('hello a:(b c d) middle c:(a:b d)') + }) +}) diff --git a/tsconfig.json b/tsconfig.json index a7497d877a..a448c35454 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -52,6 +52,7 @@ "**/client/**", "**/playground/**", "**/examples/**", + "**/fixtures/**", "**/interactive/**", "**/test/dts/**" ]