diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 39afe0a..b2a03c1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,10 +8,11 @@ jobs: runs-on: ubuntu-latest if: ${{ contains(github.event.head_commit.message, '[publish]') }} steps: - - uses: actions/checkout@v2 - - run: yarn install --frozen-lockfile - - run: yarn prettier-ci - - run: yarn build + - uses: actions/checkout@v3 + - uses: xhyrom/setup-bun@v0.1.8 + - run: bun i + - run: bun ci - uses: ArnaudBarre/npm-publish@v1 with: + working-directory: dist npm-token: ${{ secrets.NPM_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f8bec..6ae412d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## 0.4.0 + +Turn SVG into React components, even faster. + +This new version uses only regex and dangerouslySetInnerHTML to directly create a JS output. + +Breaking changes: + +- No more options available +- Expose the new `svgToJS` function instead of the previous `svgToJSX` + +Compatible with Vite 4. + ## 0.3.1 Forward ref to svg element diff --git a/README.md b/README.md index e34292b..294d232 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Turn SVG into React components, without Babel. ## Why -While [svgr](https://github.com/gregberge/svgr) is great, it uses AST transformation from Babel, which is too slow (~300ms per SVG). This plugin uses regex manipulations for SVG -> JSX and esbuild for JSX -> JS (~10ms in average). It's working well for SVG optimized by [svgo](https://github.com/svg/svgo). +While [svgr](https://github.com/gregberge/svgr) is great, it uses AST transformation from Babel, which is too slow (~300ms per SVG). This plugin uses regex manipulations and `dangerouslySetInnerHTML`, which is almost instantaneous. It's working well for SVG optimized by [svgo](https://github.com/svg/svgo). ## Installation @@ -21,7 +21,7 @@ import { defineConfig } from "vite"; import { svgPlugin } from "vite-plugin-fast-react-svg"; export default defineConfig({ - plugins: [svgPlugin({ useInnerHTML: true })], + plugins: [svgPlugin()], }); ``` @@ -48,7 +48,3 @@ const Example = () => ( ); ``` - -## Options - -**useInnerHTML**: Set to true to use `dangerouslySetInnerHTML` for SVG contents, which improve bundle size. Added in 0.3.0. diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000..6aec468 Binary files /dev/null and b/bun.lockb differ diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..3bc3f99 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[install.lockfile] +print = "yarn" diff --git a/package.json b/package.json index 73a1e67..671658d 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,26 @@ { "name": "vite-plugin-fast-react-svg", - "description": "Turn SVG into React components, without Babel", - "version": "0.3.1", + "version": "0.4.0", "license": "MIT", - "author": "Arnaud Barré (https://github.com/ArnaudBarre)", - "main": "dist/index.js", - "files": [ - "dist", - "types.d.ts" - ], - "repository": "github:ArnaudBarre/vite-plugin-fast-react-svg", - "keywords": [ - "vite", - "vite-plugin", - "react", - "svg" - ], "scripts": { - "build": "tsc", + "build": "scripts/bundle.ts", "prettier": "yarn prettier-ci --write", - "prettier-ci": "prettier --check '**/*.{ts,json,md,yml}'" + "prettier-ci": "prettier --ignore-path=.gitignore --check '**/*.{ts,json,md,yml}'", + "ci": "tsc && bun prettier-ci && bun run build" + }, + "prettier": { + "trailingComma": "all" }, "peerDependencies": { "react": ">=16", - "vite": "^2 || ^3" + "vite": "^2 || ^3 || ^4" }, "devDependencies": { - "@types/node": "^18.0.6", - "@types/react": "^18.0.15", - "prettier": "^2.7.1", - "typescript": "^4.7.4", - "vite": "^3.0.2" + "@nabla/tnode": "^0.8.0", + "@types/node": "^18.11.11", + "@types/react": "^18.0.26", + "prettier": "^2.8.1", + "typescript": "^4.9.3", + "vite": "^4.0.0-beta.4" } } diff --git a/scripts/bundle.ts b/scripts/bundle.ts new file mode 100755 index 0000000..43b6fdd --- /dev/null +++ b/scripts/bundle.ts @@ -0,0 +1,47 @@ +#!/usr/bin/env tnode +import { rmSync, writeFileSync } from "fs"; +import { execSync } from "child_process"; +import { build } from "esbuild"; + +import * as packageJSON from "../package.json"; + +rmSync("dist", { force: true, recursive: true }); + +build({ + bundle: true, + entryPoints: ["src/index.ts"], + outdir: "dist", + platform: "node", + target: "node14", + legalComments: "inline", + external: Object.keys(packageJSON.peerDependencies), +}).then(() => { + execSync("cp LICENSE README.md types.d.ts dist/"); + + writeFileSync( + "dist/index.d.ts", + `import { Plugin } from "vite"; +export declare function svgPlugin(): Plugin; +export declare const svgToJS: (svg: string, production: boolean) => string; +`, + ); + + writeFileSync( + "dist/package.json", + JSON.stringify( + { + name: packageJSON.name, + description: "Turn SVG into React components, without Babel", + version: packageJSON.version, + author: "Arnaud Barré (https://github.com/ArnaudBarre)", + license: packageJSON.license, + repository: "github:ArnaudBarre/vite-plugin-fast-react-svg", + main: "index.js", + keywords: ["vite", "vite-plugin", "react", "svg"], + peerDependencies: packageJSON.peerDependencies, + }, + null, + 2, + ), + ); +}); diff --git a/src/index.ts b/src/index.ts index 950a2ae..296b23b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,25 +1,21 @@ import { readFileSync } from "fs"; -import { transform } from "esbuild"; import { Plugin } from "vite"; -export function svgPlugin(opts?: { useInnerHTML?: boolean }): Plugin { +export function svgPlugin(): Plugin { + let production = false; return { name: "svg", enforce: "pre", + config(_, env) { + production = env.command === "build"; + }, async load(id) { if (id.endsWith(".svg")) { - const { code, warnings } = await transform( - svgToJSX(readFileSync(id, "utf-8"), opts?.useInnerHTML), - { loader: "jsx" } - ); - for (const warning of warnings) { - console.log(warning.location, warning.text); - } - return code; + return svgToJS(readFileSync(id, "utf-8"), production); } if (id.endsWith(".svg?inline")) { const base64 = Buffer.from( - readFileSync(id.replace("?inline", ""), "utf-8") + readFileSync(id.replace("?inline", ""), "utf-8"), ).toString("base64"); return `export default "data:image/svg+xml;base64,${base64}"`; } @@ -27,30 +23,36 @@ export function svgPlugin(opts?: { useInnerHTML?: boolean }): Plugin { }; } -export const svgToJSX = (svg: string, useInnerHTML?: boolean) => { - let jsx: string; - if (useInnerHTML) { - const index = svg.indexOf(">"); - const content = svg - .slice(index + 1, svg.indexOf("")) - .trim() - .replace(/\s+/g, " "); - jsx = `${updatePropsCase( - svg.slice(0, index) - )} ref={ref} {...props} dangerouslySetInnerHTML={{ __html: '${content}' }} />`; - } else { - jsx = updatePropsCase(svg).replace(">", " ref={ref} {...props}>"); +const attributesRE = /\s([a-zA-Z0-9-:]+)=("[^"]*")/gu; + +export const svgToJS = (svg: string, production: boolean) => { + const index = svg.indexOf(">"); + const content = svg + .slice(index + 1, svg.indexOf("")) + .trim() + .replace(/\s+/g, " "); + let attributes = ""; + for (const match of svg.slice(0, index).matchAll(attributesRE)) { + attributes += ` ${transformKey(match[1])}: ${match[2]},\n`; } - return `import React from "react";const ReactComponent = React.forwardRef((props, ref) => (${jsx}));export default ReactComponent;`; + const jsxImport = production + ? 'import { jsx } from "react/jsx-runtime";' + : 'import { jsxDEV as jsx } from "react/jsx-dev-runtime";'; + return `${jsxImport} +import { forwardRef } from "react"; +export default forwardRef((props, ref) => jsx("svg", { +${attributes} ref, + ...props, + dangerouslySetInnerHTML: { __html: '${content}' } + }) +);`; }; -const updatePropsCase = (svg: string) => - svg.replace(/\s([a-z-:]*)="[^"]*"/gu, (string, key: string) => { - if (key.startsWith("data-")) return string; - const keyWithoutDashes = camelCaseOn(key, "-"); - const keyWithoutDots = camelCaseOn(keyWithoutDashes, ":"); - return string.replace(key, keyWithoutDots); - }); +const transformKey = (key: string) => { + if (key.startsWith("data-")) return `"${key}"`; + const keyWithoutDashes = camelCaseOn(key, "-"); + return camelCaseOn(keyWithoutDashes, ":"); +}; const camelCaseOn = (string: string, delimiter: string) => string diff --git a/tsconfig.json b/tsconfig.json index 0965d14..d999203 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,10 +5,12 @@ "module": "CommonJS", "lib": ["ES2020"], "target": "ES2020", - "declaration": true, - "outDir": "dist", "skipLibCheck": true, + /* Transpile with esbuild */ + "noEmit": true, + "isolatedModules": true, + /* Imports */ "moduleResolution": "node", // Allow `index` imports "resolveJsonModule": true, // Allow json import diff --git a/yarn.lock b/yarn.lock old mode 100644 new mode 100755 index 418f9b5..4866b9a --- a/yarn.lock +++ b/yarn.lock @@ -1,21 +1,139 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 +# bun ./bun.lockb --hash: C8ED162F08923DB1-f41a414e582582b2-B9D6BA6C8182A6E8-0d2b4f6e2b470408 + + +"@esbuild/android-arm@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.1.tgz" + integrity sha512-zkalq3i2M+l812fhSswRM9FSryXEmoz30bfDlPYOl1ij0hBZd+lU3rRUzHSenU8LpsN/SAgX1d/mwq2dvGO3Qw== + +"@esbuild/android-arm64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.1.tgz" + integrity sha512-BHOqlxpx2UNDHvn6Ldu2QftJXYtXmsagaECew1RiY27hd/wqCx+pz5ByQpNRPyqv5S9uODqtk69LkXpmPqSqJA== + +"@esbuild/android-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.1.tgz" + integrity sha512-/xaEo77WGtykr4+VUHZF78xc/pfmtrfpYb6tJjA5sPCsqynXKdM7Z1E7LoqP7NJZbf5KW8Klm64f9CTIm97R9w== + +"@esbuild/darwin-arm64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.1.tgz" + integrity sha512-vYWHFDhxF4hmOVs1NkanPtbBb2ZcVAkMJan5iImpaL/FA2SfYIFX8IN/W20e7/2DpDxd7XkrP1i5bQUAsyXjsQ== + +"@esbuild/darwin-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.1.tgz" + integrity sha512-UFJ8swS3ZiQgT51ll9P3K+WOiYSc3Dw68kbZqXlmF5zwB7p/nx31jilW6ie+UlKIFRw4X0Z1SejwVC6ZpH7PSQ== + +"@esbuild/freebsd-arm64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.1.tgz" + integrity sha512-/6kJ0VROu7JYiWMV9EscVHH66HCCDd0Uo3mGjrP6vtscF19f9Prkf3xZJH3AO9OxUOZpfjtZatf9b0OyKVMl6A== + +"@esbuild/freebsd-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.1.tgz" + integrity sha512-BKYAYhsgD/6/mOeOwMSEcTyL9GlFBNr2LkgWEaugUp/oXCC+ScCH/EqphD3Jp5MsMNIk71b0YqDDveDHXuwcLw== + +"@esbuild/linux-arm@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.1.tgz" + integrity sha512-ZKBI/JEIjcG9YbERCDR1qPBVjr47+BKGp32Iz2cf00001yhF8mGPhVJse69jR3Wb1RU78BijVKhHPvZewsvAKA== + +"@esbuild/linux-arm64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.1.tgz" + integrity sha512-3mRaXF3nVjgPcrJOLr3IdidMLolHi3nMO7UQPYX+asKqn3UVnNqD30vlZvg8r1amJ7o5TOHvPXqgHK33ivyMPg== + +"@esbuild/linux-ia32@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.1.tgz" + integrity sha512-rTiIs5ms38XUb5Bn7hbbkR45CS3rz/hC/IfRE8Uccgzo4qRkf3Zd0Re6IUoCP+DvcTzLPz1VLfDO8VyD7UUI0w== + +"@esbuild/linux-loong64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.1.tgz" + integrity sha512-TgUV9ZpMzo9O48AkwJfgx9HJIMnA9kCopAYmjp2y9TPT6Z7Crxrlp2XVkaZ2mxhvrrzVsHlhwfolcj1scXHfKw== + +"@esbuild/linux-mips64el@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.1.tgz" + integrity sha512-TH6aEzbImbo1iUrdhtRdhgynuuiODx+Ju2DaIq+eUIOLj6Hg47NlcM5hQ3bHVKxflPiGIrGi1DTacrEoQOiOTg== + +"@esbuild/linux-ppc64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.1.tgz" + integrity sha512-//BU2o/gfw6clxJCrU8xa0gxElP18HiAzS/pN1HKzL2ayqz8WinOYEzPOZrqJvkC4u2Qoh5NEiVd98wTr2C9eg== + +"@esbuild/linux-riscv64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.1.tgz" + integrity sha512-pBrrjLBwmlsMR7iNi+W/q5JtfyzlZ97WUxBztZvsGnWBpnmjjgbdPBlwxYbgQAzqzMAsP45j6CJUpGra3SSFiQ== + +"@esbuild/linux-s390x@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.1.tgz" + integrity sha512-e4txkDfouCcByJacawPh9M6qmF9TyzJ+Y6Sj4L+Iu7pRBaAldSqI/pQym26XBcawVlmyYhLA51JXVlQdyj3Rlg== + +"@esbuild/linux-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.1.tgz" + integrity sha512-2kSF6dFTN5HbSgA+htdS69npthoR/FDr8PXc9O6h6RqRN+l7y3u8MlFMu9RSsOOD11FigiBJnzUYcl3QRT9eSA== + +"@esbuild/netbsd-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.1.tgz" + integrity sha512-OkDgqg+drkSEvNOAEPUQrv3g7OlE0hMsLe7on5+GePZvjgQepQ7fQ8T6RGj2nEMGa5Am2Q3jWEVx5lq6bsFpRw== + +"@esbuild/openbsd-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.1.tgz" + integrity sha512-YqC0KN4nJoDSIaBVkUYa1FvreYFKu6wOoWGl+lYmcRzw6pj5f96+WSE7+vRiucKpDd52P1CYlnO9yGzSo9eXSw== + +"@esbuild/sunos-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.1.tgz" + integrity sha512-KgfRBLjr6W9iyLLAOU58lSJ7/6W7H+KoDV27CGpEv0R5xR2LYMAE2SQ2sE0r2CP1rDa/huu/Uj1RvcVZ5nptqg== + +"@esbuild/win32-arm64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.1.tgz" + integrity sha512-UuKMH583a6epN+L6VxbXwYQ/RISJsz8NN05QlV2l0LY8aV79Wty23BkBz0WF5kOK22eXNavgb2sgcZer6Qg+KA== + +"@esbuild/win32-ia32@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.1.tgz" + integrity sha512-tnno7oPwPfZAyxRguqTi6ehf/s/x8xq1QtB8TLAfSP3DfIaO1U3gHAf5I/AMVlZPMzwtDUvURRfJK/a72cHyZg== + +"@esbuild/win32-x64@0.16.1": + version "0.16.1" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.1.tgz" + integrity sha512-vxkjnTk2nCxx3eIolisfjvIN0eZj8vp27iF/fh3vQ7GXkEdK/VzbolT8Nl5YsEddrXc5RRJbHulHM0pGuY+VgQ== + +"@nabla/tnode@^0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@nabla/tnode/-/tnode-0.8.0.tgz" + integrity sha512-ctFFbPPrFIVO/z4ZfUpoI7aGkxFcs3Q6h+jrXCoTBCws9riOxfNtPB+cUGURVP5VQ6d4wW6msfmU82w+q2DXYg== + dependencies: + esbuild "^0.16.1" - -"@types/node@^18.0.6": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" - integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== +"@types/node@^18.11.11": + version "18.11.11" + resolved "https://registry.npmjs.org/@types/node/-/node-18.11.11.tgz" + integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== - -"@types/react@^18.0.15": - version "18.0.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" - integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== + version "15.7.5" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/react@^18.0.26": + version "18.0.26" + resolved "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz" + integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -23,232 +141,133 @@ "@types/scheduler@*": version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== csstype@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== - -esbuild-android-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.49.tgz#9e4682c36dcf6e7b71b73d2a3723a96e0fdc5054" - integrity sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww== - -esbuild-android-arm64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.49.tgz#9861b1f7e57d1dd1f23eeef6198561c5f34b51f6" - integrity sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g== - -esbuild-darwin-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.49.tgz#fd30a5ebe28704a3a117126c60f98096c067c8d1" - integrity sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg== - -esbuild-darwin-arm64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.49.tgz#c04a3a57dad94a972c66a697a68a25aa25947f41" - integrity sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A== - -esbuild-freebsd-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.49.tgz#c404dbd66c98451395b1eef0fa38b73030a7be82" - integrity sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ== - -esbuild-freebsd-arm64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.49.tgz#b62cec96138ebc5937240ce3e1b97902963ea74a" - integrity sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA== - -esbuild-linux-32@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.49.tgz#495b1cc011b8c64d8bbaf65509c1e7135eb9ddbf" - integrity sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA== - -esbuild-linux-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.49.tgz#3f28dd8f986e6ff42f38888ee435a9b1fb916a56" - integrity sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg== - -esbuild-linux-arm64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.49.tgz#a52e99ae30246566dc5f33e835aa6ca98ef70e33" - integrity sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA== - -esbuild-linux-arm@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.49.tgz#7c33d05a64ec540cf7474834adaa57b3167bbe97" - integrity sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg== - -esbuild-linux-mips64le@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.49.tgz#ed062bd844b587be649443831eb84ba304685f25" - integrity sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA== - -esbuild-linux-ppc64le@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.49.tgz#c0786fb5bddffd90c10a2078181513cbaf077958" - integrity sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw== - -esbuild-linux-riscv64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.49.tgz#579b0e7cc6fce4bfc698e991a52503bb616bec49" - integrity sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ== - -esbuild-linux-s390x@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.49.tgz#09eb15c753e249a500b4e28d07c5eef7524a9740" - integrity sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ== - -esbuild-netbsd-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.49.tgz#f7337cd2bddb7cc9d100d19156f36c9ca117b58d" - integrity sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ== - -esbuild-openbsd-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.49.tgz#1f8bdc49f8a44396e73950a3fb6b39828563631d" - integrity sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA== - -esbuild-sunos-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.49.tgz#47d042739365b61aa8ca642adb69534a8eef9f7a" - integrity sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw== - -esbuild-windows-32@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.49.tgz#79198c88ec9bde163c18a6b430c34eab098ec21a" - integrity sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA== - -esbuild-windows-64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz#b36b230d18d1ee54008e08814c4799c7806e8c79" - integrity sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw== - -esbuild-windows-arm64@0.14.49: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.49.tgz#d83c03ff6436caf3262347cfa7e16b0a8049fae7" - integrity sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA== - -esbuild@^0.14.47: - version "0.14.49" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.49.tgz#b82834760eba2ddc17b44f05cfcc0aaca2bae492" - integrity sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw== - optionalDependencies: - esbuild-android-64 "0.14.49" - esbuild-android-arm64 "0.14.49" - esbuild-darwin-64 "0.14.49" - esbuild-darwin-arm64 "0.14.49" - esbuild-freebsd-64 "0.14.49" - esbuild-freebsd-arm64 "0.14.49" - esbuild-linux-32 "0.14.49" - esbuild-linux-64 "0.14.49" - esbuild-linux-arm "0.14.49" - esbuild-linux-arm64 "0.14.49" - esbuild-linux-mips64le "0.14.49" - esbuild-linux-ppc64le "0.14.49" - esbuild-linux-riscv64 "0.14.49" - esbuild-linux-s390x "0.14.49" - esbuild-netbsd-64 "0.14.49" - esbuild-openbsd-64 "0.14.49" - esbuild-sunos-64 "0.14.49" - esbuild-windows-32 "0.14.49" - esbuild-windows-64 "0.14.49" - esbuild-windows-arm64 "0.14.49" + version "3.1.1" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz" + integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== + +esbuild@^0.16.1: + version "0.16.1" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.16.1.tgz" + integrity sha512-XbnT9SXFcijZ9GYsay7z69rzSWKlW+Ze7+ULEecEkVAkDyzfA6DLbqGp//6F4hUh3FOydco8xQEejE6LxI1kyQ== + dependencies: + "@esbuild/android-arm" "0.16.1" + "@esbuild/android-arm64" "0.16.1" + "@esbuild/android-x64" "0.16.1" + "@esbuild/darwin-arm64" "0.16.1" + "@esbuild/darwin-x64" "0.16.1" + "@esbuild/freebsd-arm64" "0.16.1" + "@esbuild/freebsd-x64" "0.16.1" + "@esbuild/linux-arm" "0.16.1" + "@esbuild/linux-arm64" "0.16.1" + "@esbuild/linux-ia32" "0.16.1" + "@esbuild/linux-loong64" "0.16.1" + "@esbuild/linux-mips64el" "0.16.1" + "@esbuild/linux-ppc64" "0.16.1" + "@esbuild/linux-riscv64" "0.16.1" + "@esbuild/linux-s390x" "0.16.1" + "@esbuild/linux-x64" "0.16.1" + "@esbuild/netbsd-x64" "0.16.1" + "@esbuild/openbsd-x64" "0.16.1" + "@esbuild/sunos-x64" "0.16.1" + "@esbuild/win32-arm64" "0.16.1" + "@esbuild/win32-ia32" "0.16.1" + "@esbuild/win32-x64" "0.16.1" fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + version "2.11.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== dependencies: has "^1.0.3" nanoid@^3.3.4: version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + resolved "" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -postcss@^8.4.14: - version "8.4.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" - integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== +postcss@^8.4.19: + version "8.4.19" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz" + integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== dependencies: nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" -prettier@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" - integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== resolve@^1.22.1: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -rollup@^2.75.6: - version "2.77.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.0.tgz#749eaa5ac09b6baa52acc076bc46613eddfd53f4" - integrity sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g== - optionalDependencies: +rollup@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-3.6.0.tgz" + integrity sha512-qCgiBeSu2/AIOKWGFMiRkjPlGlcVwxAjwpGKQZOQYng+83Hip4PjrWHm7EQX1wnrvRqfTytEihRRfLHdX+hR4g== + dependencies: fsevents "~2.3.2" source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -typescript@^4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typescript@^4.9.3: + version "4.9.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz" + integrity sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA== -vite@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.2.tgz#2a7b4642c53ae066cf724e7e581d6c1fd24e2c32" - integrity sha512-TAqydxW/w0U5AoL5AsD9DApTvGb2iNbGs3sN4u2VdT1GFkQVUfgUldt+t08TZgi23uIauh1TUOQJALduo9GXqw== +"vite@^4.0.0-beta.4": + version "4.0.0-beta.4" + resolved "https://registry.npmjs.org/vite/-/vite-4.0.0-beta.4.tgz" + integrity sha512-BE3hlg+X3nABeoTCToM81JcifbDmv9fyP0A4sa3ZrQImqQ9WMfqFsqShDrTK8dDQ+VBID5a+m5/iae8qicGG+w== dependencies: - esbuild "^0.14.47" - postcss "^8.4.14" + esbuild "^0.16.1" + postcss "^8.4.19" resolve "^1.22.1" - rollup "^2.75.6" - optionalDependencies: + rollup "^3.6.0" fsevents "~2.3.2"