From cdd57e6610ce14add798d72f4fa95b7ea0081e63 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Mon, 3 Oct 2022 16:36:33 +0200 Subject: [PATCH] Add Solid package (#797) * init solid package * add testing * Fix tests solid * add workflow * update types build * Fix typings file * switch to camelCase props * revert camelcased props * Fix tests * Fixing dynamic reactive props in lucide icons * release beta * strokeWidth fix * bump beta version * improve docs * update beta release * update vitest config * Add automatic release for solid package --- .github/workflows/lucide-solid.yml | 48 ++ .github/workflows/release.yml | 55 ++ docs/packages/lucide-preact.md | 2 +- docs/packages/lucide-react-native.md | 2 +- docs/packages/lucide-react.md | 2 +- docs/packages/lucide-vue-next.md | 2 +- docs/packages/lucide-vue.md | 2 +- docs/packages/lucide.md | 2 +- packages/lucide-preact/README.md | 2 +- packages/lucide-preact/package.json | 2 +- packages/lucide-preact/scripts/buildTypes.mjs | 1 + packages/lucide-react-native/README.md | 2 +- packages/lucide-react/README.md | 2 +- packages/lucide-solid/README.md | 78 +++ packages/lucide-solid/babel.config.js | 6 + packages/lucide-solid/package.json | 51 ++ packages/lucide-solid/rollup.config.js | 47 ++ packages/lucide-solid/scripts/buildTypes.mjs | 47 ++ .../lucide-solid/scripts/exportTemplate.mjs | 7 + .../lucide-solid/src/createSolidComponent.js | 47 ++ .../lucide-solid/src/defaultAttributes.js | 11 + packages/lucide-solid/src/icons/.gitkeep | 1 + packages/lucide-solid/src/lucide-solid.js | 1 + .../__snapshots__/lucide-solid.spec.tsx.snap | 5 + .../lucide-solid/tests/lucide-solid.spec.tsx | 30 + packages/lucide-solid/tests/setupVitest.js | 1 + packages/lucide-solid/tsconfig.json | 15 + packages/lucide-solid/vitest.config.ts | 19 + packages/lucide-vue-next/README.md | 2 +- packages/lucide-vue/README.md | 2 +- packages/lucide/README.md | 2 +- pnpm-lock.yaml | 535 +++++++++++++++++- 32 files changed, 995 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/lucide-solid.yml create mode 100644 packages/lucide-solid/README.md create mode 100644 packages/lucide-solid/babel.config.js create mode 100644 packages/lucide-solid/package.json create mode 100644 packages/lucide-solid/rollup.config.js create mode 100644 packages/lucide-solid/scripts/buildTypes.mjs create mode 100644 packages/lucide-solid/scripts/exportTemplate.mjs create mode 100644 packages/lucide-solid/src/createSolidComponent.js create mode 100644 packages/lucide-solid/src/defaultAttributes.js create mode 100644 packages/lucide-solid/src/icons/.gitkeep create mode 100644 packages/lucide-solid/src/lucide-solid.js create mode 100644 packages/lucide-solid/tests/__snapshots__/lucide-solid.spec.tsx.snap create mode 100644 packages/lucide-solid/tests/lucide-solid.spec.tsx create mode 100644 packages/lucide-solid/tests/setupVitest.js create mode 100644 packages/lucide-solid/tsconfig.json create mode 100644 packages/lucide-solid/vitest.config.ts diff --git a/.github/workflows/lucide-solid.yml b/.github/workflows/lucide-solid.yml new file mode 100644 index 0000000..f88eb6e --- /dev/null +++ b/.github/workflows/lucide-solid.yml @@ -0,0 +1,48 @@ +name: Lucide Solid Checks + +on: + pull_request: + paths: + - packages/lucide-solid/** + push: + paths: + - packages/lucide-solid/** + +jobs: + lucide-solid: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3.4.1 + with: + node-version: 16 + + - uses: pnpm/action-setup@v2.0.1 + name: Install pnpm + id: pnpm-install + with: + version: 7 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "::set-output name=pnpm_cache_dir::$(pnpm store path)" + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm --filter lucide-solid build + + - name: Test + run: pnpm --filter lucide-solid test + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8479df5..10cf65d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -411,6 +411,61 @@ jobs: name: lucide-preact-package-json path: packages/lucide-preact/package.json + lucide-solid: + if: github.repository == 'lucide-icons/lucide' + runs-on: ubuntu-latest + needs: pre-build + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v3.4.1 + with: + node-version: 16 + + - uses: pnpm/action-setup@v2.0.1 + name: Install pnpm + id: pnpm-install + with: + version: 7 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "::set-output name=pnpm_cache_dir::$(pnpm store path)" + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - name: Set Auth Token + run: npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }} + + - name: Set package.json version lucide + run: pnpm --filter lucide-solid version --new-version ${{ needs.pre-build.outputs.VERSION }} --no-git-tag-version + + - name: Build + run: pnpm --filter lucide-solid build + + - name: Test + run: pnpm --filter lucide-solid test + + - name: Publish + run: pnpm --filter lucide-solid publish --no-git-checks + + - name: Upload package.json + uses: actions/upload-artifact@v2 + with: + name: lucide-solid-package-json + path: packages/lucide-solid/package.json + lucide-svelte: if: github.repository == 'lucide-icons/lucide' runs-on: ubuntu-latest diff --git a/docs/packages/lucide-preact.md b/docs/packages/lucide-preact.md index 8f185e8..722860e 100644 --- a/docs/packages/lucide-preact.md +++ b/docs/packages/lucide-preact.md @@ -18,7 +18,7 @@ npm install lucide-preact ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a preact component. ### Example diff --git a/docs/packages/lucide-react-native.md b/docs/packages/lucide-react-native.md index bdd78b2..c4f45f4 100644 --- a/docs/packages/lucide-react-native.md +++ b/docs/packages/lucide-react-native.md @@ -16,7 +16,7 @@ npm install lucide-react-native ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a react component. ### Example diff --git a/docs/packages/lucide-react.md b/docs/packages/lucide-react.md index 88bb0eb..40bd175 100644 --- a/docs/packages/lucide-react.md +++ b/docs/packages/lucide-react.md @@ -14,7 +14,7 @@ npm install lucide-react ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a react component. ### Example diff --git a/docs/packages/lucide-vue-next.md b/docs/packages/lucide-vue-next.md index 34b4435..62a9b78 100644 --- a/docs/packages/lucide-vue-next.md +++ b/docs/packages/lucide-vue-next.md @@ -20,7 +20,7 @@ npm install lucide-vue-next ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a vue component. ### Example diff --git a/docs/packages/lucide-vue.md b/docs/packages/lucide-vue.md index a105eb5..34a95bd 100644 --- a/docs/packages/lucide-vue.md +++ b/docs/packages/lucide-vue.md @@ -16,7 +16,7 @@ npm install lucide-vue ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a vue component. ### Example diff --git a/docs/packages/lucide.md b/docs/packages/lucide.md index b63f541..64959d2 100644 --- a/docs/packages/lucide.md +++ b/docs/packages/lucide.md @@ -44,7 +44,7 @@ Here is a complete example with unpkg ### With ESModules -To reduce bundle size, lucide is built to be fully treeshakable. +To reduce bundle size, lucide is built to be fully tree-shakable. The `createIcons` function will search for HTMLElements with the attribute `icon-name` and replace it with the svg from the given icon name. ```html diff --git a/packages/lucide-preact/README.md b/packages/lucide-preact/README.md index 81d1f01..7993165 100644 --- a/packages/lucide-preact/README.md +++ b/packages/lucide-preact/README.md @@ -16,7 +16,7 @@ npm install lucide-preact ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a preact component. ### Example diff --git a/packages/lucide-preact/package.json b/packages/lucide-preact/package.json index e19b26b..2ff3f2c 100644 --- a/packages/lucide-preact/package.json +++ b/packages/lucide-preact/package.json @@ -22,7 +22,7 @@ ], "sideEffects": false, "scripts": { - "build": "pnpm clean && pnpm copy:license && pnpm copy:license && pnpm build:icons && pnpm build:es && pnpm build:types && pnpm build:bundles", + "build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:es && pnpm build:types && pnpm build:bundles", "copy:license": "cp ../../LICENSE ./LICENSE", "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js", "build:icons": "node ../../scripts/buildIcons.mjs --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey", diff --git a/packages/lucide-preact/scripts/buildTypes.mjs b/packages/lucide-preact/scripts/buildTypes.mjs index bc7ff83..1bb2247 100644 --- a/packages/lucide-preact/scripts/buildTypes.mjs +++ b/packages/lucide-preact/scripts/buildTypes.mjs @@ -21,6 +21,7 @@ interface LucideProps extends Partial> { ref?: string | ((component: any) => any) | RefObject; color?: string size?: string | number + strokeWidth?: string | number } // Generated icons diff --git a/packages/lucide-react-native/README.md b/packages/lucide-react-native/README.md index 6678217..037d42c 100644 --- a/packages/lucide-react-native/README.md +++ b/packages/lucide-react-native/README.md @@ -18,7 +18,7 @@ npm install lucide-react-native ## How to use -It's built with ES modules so it's completely threeshakable. +It's built with ES modules so it's completely tree-shakable. Each icon can be imported as a react component. ### Example diff --git a/packages/lucide-react/README.md b/packages/lucide-react/README.md index cab108f..24b6c0a 100644 --- a/packages/lucide-react/README.md +++ b/packages/lucide-react/README.md @@ -16,7 +16,7 @@ npm install lucide-react ## How to use -It's built with ES modules so it's completely threeshakable. +It's built with ES modules so it's completely tree-shakable. Each icon can be imported as a react component. ### Example diff --git a/packages/lucide-solid/README.md b/packages/lucide-solid/README.md new file mode 100644 index 0000000..78a8b1c --- /dev/null +++ b/packages/lucide-solid/README.md @@ -0,0 +1,78 @@ +# Lucide Solid + +Implementation of the lucide icon library for solid applications. + +> What is lucide? Read it [here](https://github.com/lucide-icons/lucide#what-is-lucide). + +## Installation + +```sh +yarn add lucide-solid + +# or + +npm install lucide-solid +``` + +## How to use + +It's build with ESmodules so it's completely tree-shakable. +Each icon can be imported as a solid component. + +### Example + +You can pass additional props to adjust the icon. + +``` js +import { Camera } from 'lucide-solid'; +// Returns SolidComponent + +// Usage +const App = () => { + return +}; + +export default App; +``` + +### Props + +| name | type | default +| ------------ | -------- | -------- +| `size` | *Number* | 24 +| `color` | *String* | currentColor +| `strokeWidth`| *Number* | 2 + +### Custom props / svg attributes + +You can also pass custom props that will be added in the as attributes. With that you can modify the icons look by passing svg attributes. + +``` js +// Usage +const App = () => { + return +}; +``` + +### One generic icon component + +It is possible to create one generic icon component to load icons. + +> :warning: Example below importing all EsModules, caution using this example, not recommended when you using bundlers, your application build size will grow strongly. + +#### Icon Component Example + +``` tsx +import * as icons from 'lucide-solid'; +import type { LucideProps } from 'lucide-solid'; +import { splitProps } from 'solid-js'; +import { Dynamic } from 'solid-js/web'; + +const Icon = (props: { name: keyof typeof icons } & LucideProps) => { + const [local, others] = splitProps(props, ["name"]); + + return +}; + +export default Icon; +``` diff --git a/packages/lucide-solid/babel.config.js b/packages/lucide-solid/babel.config.js new file mode 100644 index 0000000..ac0a891 --- /dev/null +++ b/packages/lucide-solid/babel.config.js @@ -0,0 +1,6 @@ +const mainConfig = require('../../babel.config'); + +module.exports = { + presets: ['solid'], + env: mainConfig.env, +}; diff --git a/packages/lucide-solid/package.json b/packages/lucide-solid/package.json new file mode 100644 index 0000000..f5b5440 --- /dev/null +++ b/packages/lucide-solid/package.json @@ -0,0 +1,51 @@ +{ + "name": "lucide-solid", + "description": "A Lucide icon library package for Solid applications", + "version": "0.88.0-beta.3", + "license": "ISC", + "homepage": "https://lucide.dev", + "bugs": "https://github.com/lucide-icons/lucide/issues", + "repository": { + "type": "git", + "url": "https://github.com/lucide-icons/lucide.git", + "directory": "packages/lucide-solid" + }, + "author": "Eric Fennis", + "amdName": "lucide-solid", + "main": "dist/cjs/lucide-solid.js", + "main:umd": "dist/umd/lucide-solid.js", + "module": "dist/esm/lucide-solid.js", + "unpkg": "dist/umd/lucide-solid.min.js", + "typings": "dist/lucide-solid.d.ts", + "files": [ + "dist" + ], + "sideEffects": false, + "scripts": { + "build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:es && pnpm build:types && pnpm build:bundles", + "copy:license": "cp ../../LICENSE ./LICENSE", + "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.js", + "build:icons": "node ../../scripts/buildIcons.mjs --output=./src --templateSrc=./scripts/exportTemplate.mjs --renderUniqueKey", + "build:es": "babel src -d dist/esm", + "build:types": "node ./scripts/buildTypes.mjs", + "build:bundles": "rollup -c ./rollup.config.js", + "test:jest": "jest", + "test": "vitest", + "version": "pnpm version --git-tag-version=false" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "babel-preset-solid": "^1.5.4", + "jest": "^26.6.3", + "jsdom": "^20.0.0", + "solid-js": "^1.4.7", + "solid-testing-library": "^0.3.0", + "solid-jest": "^0.2.0", + "vite": "^2.6.4", + "vite-plugin-solid": "^2.3.0", + "vitest": "^0.23.2" + }, + "peerDependencies": { + "solid-js": "^1.4.7" + } +} diff --git a/packages/lucide-solid/rollup.config.js b/packages/lucide-solid/rollup.config.js new file mode 100644 index 0000000..c2d3661 --- /dev/null +++ b/packages/lucide-solid/rollup.config.js @@ -0,0 +1,47 @@ +import plugins from '../../rollup.plugins'; +import pkg from './package.json'; + +const packageName = 'LucideSolid'; +const outputFileName = 'lucide-solid'; +const outputDir = 'dist'; +const inputs = [`src/lucide-solid.js`]; +const bundles = [ + { + format: 'umd', + inputs, + outputDir, + minify: true, + }, + { + format: 'umd', + inputs, + outputDir, + }, + { + format: 'cjs', + inputs, + outputDir, + }, +]; + +const configs = bundles + .map(({ inputs, outputDir, format, minify }) => + inputs.map(input => ({ + input, + plugins: plugins(pkg, minify), + external: ['solid-js', 'solid-js/h'], + output: { + name: packageName, + file: `${outputDir}/${format}/${outputFileName}${minify ? '.min' : ''}.js`, + format, + sourcemap: true, + globals: { + 'solid-js': 'solid-js', + 'solid-js/h': 'solid-js/h', + }, + }, + })), + ) + .flat(); + +export default configs; diff --git a/packages/lucide-solid/scripts/buildTypes.mjs b/packages/lucide-solid/scripts/buildTypes.mjs new file mode 100644 index 0000000..fb99e7d --- /dev/null +++ b/packages/lucide-solid/scripts/buildTypes.mjs @@ -0,0 +1,47 @@ +import path from 'path'; +import { + writeFile, + readSvgDirectory, + resetFile, + toPascalCase, + appendFile, + getCurrentDirPath +} from '../../../scripts/helpers.mjs'; + +const currentDir = getCurrentDirPath(import.meta.url) +const srcDirectory = path.join(currentDir, '../dist'); + +// Declare type definitions +const typeDefinitions = `\ +/// +import { JSX } from 'solid-js' + +interface LucideProps extends Partial> { + key?: string | number; + ref?: string | ((component: any) => any); + color?: string + size?: string | number + strokeWidth?: string | number + class?: string +} + +// Generated icons +`; + +const ICONS_DIR = path.resolve(currentDir, '../../../icons'); +const TYPES_FILE = 'lucide-solid.d.ts'; + +resetFile(TYPES_FILE, srcDirectory); +writeFile(typeDefinitions, TYPES_FILE, srcDirectory); + +const svgFiles = readSvgDirectory(ICONS_DIR); + +svgFiles.forEach(svgFile => { + const iconName = path.basename(svgFile, '.svg'); + const componentName = toPascalCase(iconName); + + const exportTypeString = `export declare const ${componentName}: (props: LucideProps) => JSX.Element;\n`; + appendFile(exportTypeString, TYPES_FILE, srcDirectory); +}); + +console.log(`Generated ${TYPES_FILE} file with`, svgFiles.length, 'icons'); diff --git a/packages/lucide-solid/scripts/exportTemplate.mjs b/packages/lucide-solid/scripts/exportTemplate.mjs new file mode 100644 index 0000000..2e36e9d --- /dev/null +++ b/packages/lucide-solid/scripts/exportTemplate.mjs @@ -0,0 +1,7 @@ +export default ({ componentName, children }) => ` +import createSolidComponent from '../createSolidComponent'; + +const ${componentName} = createSolidComponent('${componentName}', ${JSON.stringify(children)}); + +export default ${componentName}; +`; diff --git a/packages/lucide-solid/src/createSolidComponent.js b/packages/lucide-solid/src/createSolidComponent.js new file mode 100644 index 0000000..5929c02 --- /dev/null +++ b/packages/lucide-solid/src/createSolidComponent.js @@ -0,0 +1,47 @@ +import h from 'solid-js/h'; +import { splitProps } from 'solid-js'; +import defaultAttributes from './defaultAttributes'; + +/** + * Converts string to KebabCase + * Copied from scripts/helper. If anyone knows how to properly import it here + * then please fix it. + * + * @param {string} string + * @returns {string} A kebabized string + */ +export const toKebabCase = string => string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase(); + +export default (iconName, iconNode) => { + const Component = props => { + const [localProps, rest] = splitProps(props, [ + 'color', + 'size', + 'strokeWidth', + 'children', + 'class', + ]); + + const svgProps = { + ...defaultAttributes, + width: () => (localProps.size != null ? localProps.size : defaultAttributes.width), + height: () => (localProps.size != null ? localProps.size : defaultAttributes.height), + stroke: () => (localProps.color != null ? localProps.color : defaultAttributes.stroke), + 'stroke-width': () => + localProps.strokeWidth != null ? localProps.strokeWidth : defaultAttributes['stroke-width'], + class: () => + `lucide lucide-${toKebabCase(iconName)} ${ + localProps.class != null ? localProps.class : '' + }`, + }; + + return h( + 'svg', + [svgProps, rest], + [...iconNode.map(([tag, attrs]) => h(tag, attrs)), localProps.children], + ); + }; + + Component.displayName = `${iconName}`; + return Component; +}; diff --git a/packages/lucide-solid/src/defaultAttributes.js b/packages/lucide-solid/src/defaultAttributes.js new file mode 100644 index 0000000..8ae7d46 --- /dev/null +++ b/packages/lucide-solid/src/defaultAttributes.js @@ -0,0 +1,11 @@ +export default { + xmlns: 'http://www.w3.org/2000/svg', + width: 24, + height: 24, + viewBox: '0 0 24 24', + fill: 'none', + stroke: 'currentColor', + 'stroke-width': 2, + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', +}; diff --git a/packages/lucide-solid/src/icons/.gitkeep b/packages/lucide-solid/src/icons/.gitkeep new file mode 100644 index 0000000..e3d85f7 --- /dev/null +++ b/packages/lucide-solid/src/icons/.gitkeep @@ -0,0 +1 @@ +Folder for generated icons diff --git a/packages/lucide-solid/src/lucide-solid.js b/packages/lucide-solid/src/lucide-solid.js new file mode 100644 index 0000000..838008a --- /dev/null +++ b/packages/lucide-solid/src/lucide-solid.js @@ -0,0 +1 @@ +export * from './icons'; diff --git a/packages/lucide-solid/tests/__snapshots__/lucide-solid.spec.tsx.snap b/packages/lucide-solid/tests/__snapshots__/lucide-solid.spec.tsx.snap new file mode 100644 index 0000000..65afb2c --- /dev/null +++ b/packages/lucide-solid/tests/__snapshots__/lucide-solid.spec.tsx.snap @@ -0,0 +1,5 @@ +// Vitest Snapshot v1 + +exports[`Using lucide icon components > should adjust the size, stroke color and stroke width 1`] = `""`; + +exports[`Using lucide icon components > should render an component 1`] = `""`; diff --git a/packages/lucide-solid/tests/lucide-solid.spec.tsx b/packages/lucide-solid/tests/lucide-solid.spec.tsx new file mode 100644 index 0000000..d213a32 --- /dev/null +++ b/packages/lucide-solid/tests/lucide-solid.spec.tsx @@ -0,0 +1,30 @@ +import { describe, it, expect } from 'vitest'; +import { render } from 'solid-testing-library' +import { Grid } from '../src/icons' + +describe('Using lucide icon components', () => { + it('should render an component', () => { + const { container } = render(() => ); + + expect( container.innerHTML ).toMatchSnapshot(); + }); + + it('should adjust the size, stroke color and stroke width', async () => { + const testId = 'grid-icon'; + const { container, getByTestId } = render( () => + , + ); + + const { attributes } = await getByTestId(testId) as unknown as{ attributes: Record}; + expect(attributes.stroke.value).toBe('red'); + expect(attributes.width.value).toBe('48'); + expect(attributes.height.value).toBe('48'); + expect(attributes['stroke-width'].value).toBe('4'); + expect( container.innerHTML ).toMatchSnapshot(); + }); +}) diff --git a/packages/lucide-solid/tests/setupVitest.js b/packages/lucide-solid/tests/setupVitest.js new file mode 100644 index 0000000..7b0828b --- /dev/null +++ b/packages/lucide-solid/tests/setupVitest.js @@ -0,0 +1 @@ +import '@testing-library/jest-dom'; diff --git a/packages/lucide-solid/tsconfig.json b/packages/lucide-solid/tsconfig.json new file mode 100644 index 0000000..249b273 --- /dev/null +++ b/packages/lucide-solid/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "types": ["vite/client"], + "noEmit": true, + "isolatedModules": true + } +} diff --git a/packages/lucide-solid/vitest.config.ts b/packages/lucide-solid/vitest.config.ts new file mode 100644 index 0000000..c4acd35 --- /dev/null +++ b/packages/lucide-solid/vitest.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'vitest/config' +import solidPlugin from 'vite-plugin-solid'; + +export default defineConfig({ + plugins: [solidPlugin()], + test: { + globals: true, + environment: 'jsdom', + transformMode: { + web: [/\.jsx?$/], + }, + setupFiles: './tests/setupVitest.js', + threads: false, + isolate: false, + }, + resolve: { + conditions: ['development', 'browser'], + }, +}); diff --git a/packages/lucide-vue-next/README.md b/packages/lucide-vue-next/README.md index 11a1fc3..1ac1b16 100644 --- a/packages/lucide-vue-next/README.md +++ b/packages/lucide-vue-next/README.md @@ -18,7 +18,7 @@ npm install lucide-vue-next ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a vue component. ### Example diff --git a/packages/lucide-vue/README.md b/packages/lucide-vue/README.md index f4033ec..73d7ae2 100644 --- a/packages/lucide-vue/README.md +++ b/packages/lucide-vue/README.md @@ -18,7 +18,7 @@ npm install lucide-vue ## How to use -It's build with ESmodules so it's completely threeshakable. +It's build with ESmodules so it's completely tree-shakable. Each icon can be imported as a vue component. ### Example diff --git a/packages/lucide/README.md b/packages/lucide/README.md index b63f541..64959d2 100644 --- a/packages/lucide/README.md +++ b/packages/lucide/README.md @@ -44,7 +44,7 @@ Here is a complete example with unpkg ### With ESModules -To reduce bundle size, lucide is built to be fully treeshakable. +To reduce bundle size, lucide is built to be fully tree-shakable. The `createIcons` function will search for HTMLElements with the attribute `icon-name` and replace it with the svg from the given icon name. ```html diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ab5356..3905444 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -211,6 +211,30 @@ importers: react-native: 0.69.3_6iplzvqeiudpi4sy52vugn7nxq react-native-svg: 12.4.3_w3kncuvwqnzhwf3ziybn5l7dja + packages/lucide-solid: + specifiers: + '@testing-library/jest-dom': ^5.16.5 + babel-preset-solid: ^1.5.4 + jest: ^26.6.3 + jsdom: ^20.0.0 + solid-jest: ^0.2.0 + solid-js: ^1.4.7 + solid-testing-library: ^0.3.0 + vite: ^2.6.4 + vite-plugin-solid: ^2.3.0 + vitest: ^0.23.2 + devDependencies: + '@testing-library/jest-dom': 5.16.5 + babel-preset-solid: 1.5.4_@babel+core@7.18.13 + jest: 26.6.3 + jsdom: 20.0.0 + solid-jest: 0.2.0_t7todo2kjeiemugvwlfkztjgsq + solid-js: 1.5.4 + solid-testing-library: 0.3.0_solid-js@1.5.4 + vite: 2.9.14 + vite-plugin-solid: 2.3.0_solid-js@1.5.4+vite@2.9.14 + vitest: 0.23.2_jsdom@20.0.0 + packages/lucide-static: specifiers: prettier: ^2.3.2 @@ -854,6 +878,7 @@ packages: '@babel/types': 7.18.9 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + dev: true /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} @@ -1086,6 +1111,13 @@ packages: dependencies: '@babel/types': 7.18.13 + /@babel/helper-module-imports/7.16.0: + resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.18.13 + dev: true + /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} @@ -1146,7 +1178,7 @@ packages: '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-wrap-function': 7.18.9 - '@babel/types': 7.18.9 + '@babel/types': 7.18.13 transitivePeerDependencies: - supports-color @@ -1212,9 +1244,9 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.18.9 - '@babel/template': 7.18.6 - '@babel/traverse': 7.18.9 - '@babel/types': 7.18.9 + '@babel/template': 7.18.10 + '@babel/traverse': 7.18.13 + '@babel/types': 7.18.13 transitivePeerDependencies: - supports-color @@ -1265,6 +1297,7 @@ packages: hasBin: true dependencies: '@babel/types': 7.18.9 + dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.18.13: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -2337,7 +2370,6 @@ packages: dependencies: '@babel/core': 7.18.13 '@babel/helper-plugin-utils': 7.18.9 - dev: false /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.18.9: resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} @@ -3549,7 +3581,6 @@ packages: '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.18.13 transitivePeerDependencies: - supports-color - dev: false /@babel/plugin-transform-typescript/7.18.12_@babel+core@7.18.9: resolution: {integrity: sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==} @@ -3979,7 +4010,6 @@ packages: '@babel/plugin-transform-typescript': 7.18.12_@babel+core@7.18.13 transitivePeerDependencies: - supports-color - dev: false /@babel/preset-typescript/7.18.6_@babel+core@7.18.9: resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} @@ -4052,6 +4082,7 @@ packages: '@babel/code-frame': 7.18.6 '@babel/parser': 7.18.9 '@babel/types': 7.18.9 + dev: true /@babel/traverse/7.18.13: resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==} @@ -4086,6 +4117,7 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types/7.18.13: resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} @@ -5205,7 +5237,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 @@ -5233,7 +5265,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -5320,7 +5352,7 @@ packages: dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 jest-mock: 26.6.2 dev: true @@ -5357,7 +5389,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 - '@types/node': 14.18.25 + '@types/node': 18.6.2 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -5562,6 +5594,29 @@ packages: - supports-color dev: true + /@jest/transform/27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.18.13 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.8.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/transform/28.1.3: resolution: {integrity: sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -5614,7 +5669,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 14.18.25 + '@types/node': 18.6.2 '@types/yargs': 17.0.11 chalk: 4.1.2 dev: true @@ -7077,6 +7132,11 @@ packages: engines: {node: '>= 6'} dev: true + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: true + /@trysound/sax/0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -7136,6 +7196,16 @@ packages: '@babel/types': 7.18.13 dev: true + /@types/chai-subset/1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + dependencies: + '@types/chai': 4.3.3 + dev: true + + /@types/chai/4.3.3: + resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==} + dev: true + /@types/component-emitter/1.2.11: resolution: {integrity: sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==} dev: true @@ -7184,7 +7254,7 @@ packages: /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 14.18.25 + '@types/node': 18.6.2 dev: true /@types/hast/2.3.4: @@ -8455,6 +8525,10 @@ packages: util: 0.10.3 dev: true + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /assign-symbols/1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -8617,6 +8691,25 @@ packages: - supports-color dev: true + /babel-jest/27.5.1_@babel+core@7.18.13: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.18.13 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.1.19 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1_@babel+core@7.18.13 + chalk: 4.1.2 + graceful-fs: 4.2.10 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-jest/28.1.3_@babel+core@7.18.9: resolution: {integrity: sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -8739,6 +8832,16 @@ packages: '@types/babel__traverse': 7.18.0 dev: true + /babel-plugin-jest-hoist/27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.18.13 + '@types/babel__core': 7.1.19 + '@types/babel__traverse': 7.18.0 + dev: true + /babel-plugin-jest-hoist/28.1.3: resolution: {integrity: sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -8749,6 +8852,18 @@ packages: '@types/babel__traverse': 7.17.1 dev: true + /babel-plugin-jsx-dom-expressions/0.34.7_@babel+core@7.18.13: + resolution: {integrity: sha512-jTxBhu/MQscWdOcLfqKAY8lIiRsv1ivrMQShlePoa4G8S2cFNb93HTWN4FFdp3SpILaibygFXWU3H+aHpoGH/w==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.18.13 + '@babel/helper-module-imports': 7.16.0 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.13 + '@babel/types': 7.18.13 + html-entities: 2.3.2 + dev: true + /babel-plugin-macros/2.8.0: resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} dependencies: @@ -8972,6 +9087,17 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.18.9 dev: true + /babel-preset-jest/27.5.1_@babel+core@7.18.13: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.18.13 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.18.13 + dev: true + /babel-preset-jest/28.1.3_@babel+core@7.18.9: resolution: {integrity: sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -9015,6 +9141,15 @@ packages: - supports-color dev: true + /babel-preset-solid/1.5.4_@babel+core@7.18.13: + resolution: {integrity: sha512-pangM+KhBx8J6gRHiaRO4yD/J5gK3sydX+TIoC1TaYjxtVV78GIHRtg/HHtCAfg/iRQCJyiGR9TrN0brG8eDZA==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.18.13 + babel-plugin-jsx-dom-expressions: 0.34.7_@babel+core@7.18.13 + dev: true + /babel-runtime/6.26.0: resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} dependencies: @@ -9593,6 +9728,19 @@ packages: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} dev: false + /chai/4.3.6: + resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 3.0.1 + get-func-name: 2.0.0 + loupe: 2.3.4 + 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'} @@ -9653,6 +9801,10 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true + /check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + dev: true + /chokidar/2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies @@ -10820,6 +10972,10 @@ packages: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} dev: true + /cssom/0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + dev: true + /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} @@ -10869,6 +11025,15 @@ packages: whatwg-url: 8.7.0 dev: true + /data-urls/3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + dev: true + /date-format/4.0.13: resolution: {integrity: sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==} engines: {node: '>=4.0'} @@ -11013,6 +11178,13 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /deep-eql/3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==} + engines: {node: '>=0.12'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-equal/1.1.1: resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} dependencies: @@ -11318,6 +11490,13 @@ packages: webidl-conversions: 5.0.0 dev: true + /domexception/4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + dependencies: + webidl-conversions: 7.0.0 + dev: true + /domhandler/4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} engines: {node: '>= 4'} @@ -11482,6 +11661,13 @@ packages: - utf-8-validate dev: true + /enhanced-resolve-jest/1.1.0: + resolution: {integrity: sha512-GM7yVsiLIaunYkCqnGRPO4kQbT6hPSgkyOFKTseWboPMjZ2tlpQYh2ttLuE8ORkR72Wb1f9SJBbnPu0AjcTzgg==} + dependencies: + enhanced-resolve: 4.5.0 + tslib: 1.14.1 + dev: true + /enhanced-resolve/4.5.0: resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} engines: {node: '>=6.9.0'} @@ -11525,6 +11711,11 @@ packages: resolution: {integrity: sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==} engines: {node: '>=0.12'} + /entities/4.4.0: + resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + engines: {node: '>=0.12'} + dev: true + /env-paths/2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -12825,6 +13016,15 @@ packages: mime-types: 2.1.35 dev: true + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -13001,6 +13201,10 @@ packages: 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.1.2: resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==} dependencies: @@ -13499,10 +13703,21 @@ packages: whatwg-encoding: 1.0.5 dev: true + /html-encoding-sniffer/3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + dependencies: + whatwg-encoding: 2.0.0 + dev: true + /html-entities/1.4.0: resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} dev: true + /html-entities/2.3.2: + resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} + dev: true + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -13555,6 +13770,17 @@ packages: - supports-color dev: true + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-middleware/0.19.1_tmpgdztspuwvsxzgjkhoqk7duq: resolution: {integrity: sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==} engines: {node: '>=4.0.0'} @@ -14315,6 +14541,11 @@ packages: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} dev: true + /is-what/4.1.7: + resolution: {integrity: sha512-DBVOQNiPKnGMxRMLIYSwERAS5MVY1B7xYiGnpgctsOFvVDz9f9PFXXxMcTOHuoqYp4NK9qFYQaIC1NRRxLMpBQ==} + engines: {node: '>=12.13'} + dev: true + /is-whitespace-character/1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} dev: false @@ -14735,7 +14966,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 @@ -14753,7 +14984,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true @@ -14786,7 +15017,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.5 - '@types/node': 14.18.25 + '@types/node': 18.6.2 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 @@ -14851,7 +15082,7 @@ packages: '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -14943,7 +15174,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 dev: true /jest-mock/28.1.3: @@ -15051,7 +15282,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -15184,7 +15415,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 14.18.25 + '@types/node': 18.6.2 graceful-fs: 4.2.10 dev: true @@ -15256,7 +15487,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 chalk: 4.1.2 graceful-fs: 4.2.10 is-ci: 2.0.0 @@ -15280,7 +15511,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 14.18.25 + '@types/node': 18.6.2 chalk: 4.1.2 ci-info: 3.3.2 graceful-fs: 4.2.10 @@ -15317,7 +15548,7 @@ packages: dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 14.18.25 + '@types/node': 18.6.2 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 @@ -15554,6 +15785,48 @@ packages: - utf-8-validate dev: true + /jsdom/20.0.0: + resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.8.0 + acorn-globals: 6.0.0 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.4.0 + domexception: 4.0.0 + escodegen: 2.0.0 + form-data: 4.0.0 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.1 + parse5: 7.1.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.0 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 3.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.8.1 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -15982,6 +16255,11 @@ packages: engines: {node: '>= 12.13.0'} dev: true + /local-pkg/0.4.2: + resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} + engines: {node: '>=14'} + dev: true + /locate-path/2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -16103,6 +16381,12 @@ packages: dependencies: js-tokens: 4.0.0 + /loupe/2.3.4: + resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + dependencies: + get-func-name: 2.0.0 + dev: true + /lower-case/2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -16296,6 +16580,14 @@ packages: readable-stream: 2.3.7 dev: true + /merge-anything/5.0.4: + resolution: {integrity: sha512-YFsDeY5A9SLXhL21Qn15wCWewRUW6wMTxQF4SuPe9bNdr1wsjiE44Rp8FQUTCtwO0WLdlKiFzhAVE5tlf857Tg==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.7 + ts-toolbelt: 9.6.0 + dev: true + /merge-descriptors/1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true @@ -17850,6 +18142,12 @@ packages: /parse5/6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + /parse5/7.1.1: + resolution: {integrity: sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==} + dependencies: + entities: 4.4.0 + dev: true + /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -17914,6 +18212,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /pbkdf2/3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} @@ -20233,6 +20535,13 @@ packages: xmlchars: 2.2.0 dev: true + /saxes/6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: true + /scheduler/0.20.2: resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} dependencies: @@ -20750,6 +21059,47 @@ packages: smart-buffer: 4.2.0 dev: true + /solid-jest/0.2.0_t7todo2kjeiemugvwlfkztjgsq: + resolution: {integrity: sha512-1ILtAj+z6bh1vTvaDlcT8501vmkzkVZMk2aiexJy+XWTZ+sb9B7IWedvWadIhOwwL97fiW4eMmN6SrbaHjn12A==} + peerDependencies: + babel-preset-solid: ^1.0.0 + dependencies: + '@babel/preset-env': 7.18.10_@babel+core@7.18.13 + babel-jest: 27.5.1_@babel+core@7.18.13 + babel-preset-solid: 1.5.4_@babel+core@7.18.13 + enhanced-resolve-jest: 1.1.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /solid-js/1.5.4: + resolution: {integrity: sha512-+65anSHhH27htkhP5LuC912fviMIckgc7/yN+WWrKhS9Kp3dvtDNl5/m4GWX1lpCvcubjShqJjGt16HET5z5Ig==} + dependencies: + csstype: 3.1.0 + dev: true + + /solid-refresh/0.4.1_solid-js@1.5.4: + resolution: {integrity: sha512-v3tD/OXQcUyXLrWjPW1dXZyeWwP7/+GQNs8YTL09GBq+5FguA6IejJWUvJDrLIA4M0ho9/5zK2e9n+uy+4488g==} + peerDependencies: + solid-js: ^1.3 + dependencies: + '@babel/generator': 7.18.13 + '@babel/helper-module-imports': 7.18.6 + '@babel/types': 7.18.13 + solid-js: 1.5.4 + dev: true + + /solid-testing-library/0.3.0_solid-js@1.5.4: + resolution: {integrity: sha512-6NWVbySNVzyReBm2N6p3eF8bzxRZXHZTAmPix4vFWYol16QWVjNQsEUxvr+ZOutb0yuMZmNuGx3b6WIJYmjwMQ==} + engines: {node: '>= 14'} + peerDependencies: + solid-js: '>=1.0.0' + dependencies: + '@testing-library/dom': 7.31.2 + solid-js: 1.5.4 + dev: true + /sorcery/0.10.0: resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} hasBin: true @@ -21225,6 +21575,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal/0.4.1: + resolution: {integrity: sha512-z+F/xmDM8GOdvA5UoZXFxEnxdvMOZ+XEBIwjfLfc8hMSuHpGxjXAUCfuEo+t1GOHSb8+qgI/IBRpxXVMaABYWA==} + dependencies: + acorn: 8.8.0 + dev: true + /style-loader/2.0.0_webpack@4.44.2: resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} engines: {node: '>= 10.13.0'} @@ -21748,9 +22104,23 @@ packages: resolution: {integrity: sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==} dev: false + /tinybench/2.1.5: + resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==} + dev: true + /tinycolor2/1.4.2: resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} + /tinypool/0.3.0: + resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/1.0.2: + resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} + engines: {node: '>=14.0.0'} + dev: true + /tmp/0.0.30: resolution: {integrity: sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==} engines: {node: '>=0.4.0'} @@ -21859,6 +22229,13 @@ packages: punycode: 2.1.1 dev: true + /tr46/3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + dependencies: + punycode: 2.1.1 + dev: true + /tree-kill/1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -21918,6 +22295,10 @@ packages: typescript: 4.1.6 dev: true + /ts-toolbelt/9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + dev: true + /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: @@ -22501,6 +22882,23 @@ packages: vite: 2.9.14 dev: true + /vite-plugin-solid/2.3.0_solid-js@1.5.4+vite@2.9.14: + resolution: {integrity: sha512-N2sa54C3UZC2nN5vpj5o6YP+XdIAZW6n6xv8OasxNAcAJPFeZT7EOVvumL0V4c8hBz1yuYniMWdESY8807fVSg==} + peerDependencies: + solid-js: ^1.3.17 + vite: ^3.0.0 + dependencies: + '@babel/core': 7.18.13 + '@babel/preset-typescript': 7.18.6_@babel+core@7.18.13 + babel-preset-solid: 1.5.4_@babel+core@7.18.13 + merge-anything: 5.0.4 + solid-js: 1.5.4 + solid-refresh: 0.4.1_solid-js@1.5.4 + vite: 2.9.14 + transitivePeerDependencies: + - supports-color + dev: true + /vite/2.9.14: resolution: {integrity: sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==} engines: {node: '>=12.2.0'} @@ -22525,6 +22923,47 @@ packages: fsevents: 2.3.2 dev: true + /vitest/0.23.2_jsdom@20.0.0: + resolution: {integrity: sha512-kTBKp3ROPDkYC+x2zWt4znkDtnT08W1FQ6ngRFuqxpBGNuNVS+eWZKfffr8y2JGvEzZ9EzMAOcNaiqMj/FZqMw==} + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': 4.3.3 + '@types/chai-subset': 1.3.3 + '@types/node': 18.6.2 + chai: 4.3.6 + debug: 4.3.4 + jsdom: 20.0.0 + local-pkg: 0.4.2 + strip-literal: 0.4.1 + tinybench: 2.1.5 + tinypool: 0.3.0 + tinyspy: 1.0.2 + vite: 2.9.14 + transitivePeerDependencies: + - less + - sass + - stylus + - supports-color + dev: true + /vlq/1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} dev: true @@ -22628,6 +23067,13 @@ packages: xml-name-validator: 3.0.0 dev: true + /w3c-xmlserializer/3.0.0: + resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} + engines: {node: '>=12'} + dependencies: + xml-name-validator: 4.0.0 + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -22726,6 +23172,11 @@ packages: engines: {node: '>=10.4'} dev: true + /webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true + /webpack-dev-middleware/3.7.2_webpack@4.44.2: resolution: {integrity: sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==} engines: {node: '>= 6'} @@ -22940,6 +23391,13 @@ packages: iconv-lite: 0.4.24 dev: true + /whatwg-encoding/2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + dependencies: + iconv-lite: 0.6.3 + dev: true + /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} dev: true @@ -22948,6 +23406,19 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true + /whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true + + /whatwg-url/11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + dev: true + /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -23130,6 +23601,19 @@ packages: optional: true dev: true + /ws/8.8.1: + resolution: {integrity: sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /xhr/2.6.0: resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} dependencies: @@ -23149,6 +23633,11 @@ packages: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true + /xml-name-validator/4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true + /xml-parse-from-string/1.0.1: resolution: {integrity: sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==} dev: true