diff --git a/.eslintrc.json b/.eslintrc.json index d4076e6..57a8c1d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,6 @@ "jest" ], "rules": { - "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/consistent-type-imports": [ "error", { diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3db372a..6ebf04d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -62,26 +62,31 @@ jobs: validate(z.string(), 'hello').then(console.log); " > src/main.ts + echo " + import {defineConfig} from 'vite'; + import {typeschemaPlugin} from '@decs/typeschema/vite'; + + export default defineConfig({ + plugins: [typeschemaPlugin()], + }); + " > vite.config.ts - name: Bundle project working-directory: ./sample run: yarn build check_for_version_upgrade: name: Check for version upgrade - if: | - github.event_name == 'push' || - github.event.pull_request.head.repo.owner.login == github.event.pull_request.base.repo.owner.login runs-on: ubuntu-latest needs: - bundle_with_vite outputs: - from_version: ${{steps.check.outputs.from_version}} - to_version: ${{steps.check.outputs.to_version}} - is_upgraded_version: ${{steps.check.outputs.is_upgraded_version}} - is_pre_release: ${{steps.check.outputs.is_pre_release}} + from_version: ${{steps.step1.outputs.from_version}} + to_version: ${{steps.step1.outputs.to_version}} + is_upgraded_version: ${{steps.step1.outputs.is_upgraded_version}} + is_pre_release: ${{steps.step1.outputs.is_pre_release}} steps: - uses: garronej/ts-ci@v2.1.0 - id: check + id: step1 with: action_name: is_package_json_version_upgraded branch: ${{github.head_ref || github.ref}} @@ -92,11 +97,7 @@ jobs: needs: - check_for_version_upgrade if: | - needs.check_for_version_upgrade.outputs.is_upgraded_version == 'true' && - ( - github.event_name == 'push' || - needs.check_for_version_upgrade.outputs.is_pre_release == 'true' - ) + needs.check_for_version_upgrade.outputs.is_upgraded_version == 'true' steps: - name: Checkout source code uses: actions/checkout@v4 @@ -145,11 +146,7 @@ jobs: needs: - check_for_version_upgrade if: | - needs.check_for_version_upgrade.outputs.is_upgraded_version == 'true' && - ( - github.event_name == 'push' || - needs.check_for_version_upgrade.outputs.is_pre_release == 'true' - ) + needs.check_for_version_upgrade.outputs.is_upgraded_version == 'true' steps: - name: Checkout source code uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index 341c87b..23cb920 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules .next dist/ +vite/ deno_dist/ yarn-debug.log* diff --git a/README.md b/README.md index fc6b8b2..509d414 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,20 @@ Install TypeSchema with your package manager of choice: +#### Vite + +If using [Vite](https://vitejs.dev/), you'll also need to update your `vite.config.ts` file: + +```ts +import {typeschemaPlugin} from '@decs/typeschema/vite'; + +export default defineConfig({ + plugins: [ + typeschemaPlugin(), // add this plugin + ], +}); +``` + ## API #### Types diff --git a/package.json b/package.json index 406e851..09bc431 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@decs/typeschema", - "version": "0.11.5", + "version": "0.11.2", "description": "Universal adapter for schema validation", "keywords": [ "typescript", @@ -32,7 +32,8 @@ "email": "andrefonsecacosta@gmail.com" }, "files": [ - "/dist" + "/dist", + "/vite" ], "main": "dist/index.js", "module": "dist/index.mjs", @@ -47,6 +48,10 @@ "types": "./dist/index.d.ts", "default": "./dist/index.js" } + }, + "./vite": { + "types": "./vite/index.d.ts", + "default": "./vite/index.js" } }, "sideEffects": false, @@ -111,6 +116,7 @@ "typescript": "^5.2.2", "typia": "^5.0.5", "valibot": "^0.17.0", + "vite": "^4.4.9", "webpack": "^5.88.2", "yup": "^1.2.0", "zod": "^3.22.2" @@ -129,6 +135,7 @@ "runtypes": "^6.7.0", "superstruct": "^1.0.3", "valibot": "^0.17.0", + "vite": "^4.4.9", "yup": "^1.2.0", "zod": "^3.22.2" }, @@ -172,6 +179,9 @@ "valibot": { "optional": true }, + "vite": { + "optional": true + }, "yup": { "optional": true }, diff --git a/src/__tests__/ajv.test.ts b/src/__tests__/ajv.test.ts index 619a696..1cad625 100644 --- a/src/__tests__/ajv.test.ts +++ b/src/__tests__/ajv.test.ts @@ -21,7 +21,7 @@ describe('ajv', () => { required: ['age', 'createdAt', 'email', 'id', 'name', 'updatedAt'], type: 'object', }; - const module = 'ajv'; + const module = '../adapters/modules/ajv'; const data = { age: 123, diff --git a/src/__tests__/deepkit.test.ts b/src/__tests__/deepkit.test.ts index cebd404..4b8cc21 100644 --- a/src/__tests__/deepkit.test.ts +++ b/src/__tests__/deepkit.test.ts @@ -17,7 +17,7 @@ describe('deepkit', () => { name: string; updatedAt: string; }>(); - const module = '@deepkit/type'; + const module = '../adapters/modules/deepkit'; const data = { age: 123, diff --git a/src/__tests__/effect.test.ts b/src/__tests__/effect.test.ts index 2db3c7e..3371883 100644 --- a/src/__tests__/effect.test.ts +++ b/src/__tests__/effect.test.ts @@ -19,7 +19,7 @@ describe('effect', () => { name: S.string, updatedAt: S.dateFromString(S.string), }); - const module = '@effect/schema/Schema'; + const module = '../adapters/modules/effect'; const data = readonly({ age: 123, diff --git a/src/__tests__/io-ts.test.ts b/src/__tests__/io-ts.test.ts index 7a9b0fa..afee25c 100644 --- a/src/__tests__/io-ts.test.ts +++ b/src/__tests__/io-ts.test.ts @@ -18,7 +18,7 @@ describe('io-ts', () => { name: t.string, updatedAt: DateFromISOString, }); - const module = 'fp-ts/Either'; + const module = '../adapters/modules/io-ts'; const data = { age: 123, diff --git a/src/__tests__/ow.test.ts b/src/__tests__/ow.test.ts index 529b3f2..8a8b655 100644 --- a/src/__tests__/ow.test.ts +++ b/src/__tests__/ow.test.ts @@ -17,7 +17,7 @@ describe('ow', () => { name: ow.string, updatedAt: ow.string, }); - const module = 'ow'; + const module = '../adapters/modules/ow'; const data = { age: 123, diff --git a/src/__tests__/typebox.test.ts b/src/__tests__/typebox.test.ts index 6768ad1..3e76ad9 100644 --- a/src/__tests__/typebox.test.ts +++ b/src/__tests__/typebox.test.ts @@ -17,7 +17,7 @@ describe('typebox', () => { name: Type.String(), updatedAt: Type.String(), }); - const module = '@sinclair/typebox/compiler'; + const module = '../adapters/modules/typebox'; const data = { age: 123, diff --git a/src/__tests__/valibot.test.ts b/src/__tests__/valibot.test.ts index a051bc3..9bc0269 100644 --- a/src/__tests__/valibot.test.ts +++ b/src/__tests__/valibot.test.ts @@ -17,7 +17,7 @@ describe('valibot', () => { name: string(), updatedAt: transform(string(), value => new Date(value)), }); - const module = 'valibot'; + const module = '../adapters/modules/valibot'; const data = { age: 123, diff --git a/src/__tests__/yup.test.ts b/src/__tests__/yup.test.ts index 51a31a9..323dfd5 100644 --- a/src/__tests__/yup.test.ts +++ b/src/__tests__/yup.test.ts @@ -17,7 +17,7 @@ describe('yup', () => { name: string().required(), updatedAt: date().required(), }); - const module = 'yup'; + const module = '../adapters/modules/yup'; const data = { age: 123, diff --git a/src/adapters/ajv.ts b/src/adapters/ajv.ts index 5903f42..843ad42 100644 --- a/src/adapters/ajv.ts +++ b/src/adapters/ajv.ts @@ -9,10 +9,9 @@ export interface AjvResolver extends Resolver { base: SchemaObject; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const Ajv = require('ajv').default as typeof import('ajv').default; - return {ajv: new Ajv()}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/ajv'), +); const coerce: Coerce<'ajv'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => isJSONSchema(schema) ? fn(schema) : undefined; diff --git a/src/adapters/deepkit.ts b/src/adapters/deepkit.ts index 3a8dce4..60d1d49 100644 --- a/src/adapters/deepkit.ts +++ b/src/adapters/deepkit.ts @@ -9,10 +9,9 @@ export interface DeepkitResolver extends Resolver { base: Type; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {validate} = require('@deepkit/type') as typeof import('@deepkit/type'); - return {validate}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/deepkit'), +); const coerce: Coerce<'deepkit'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => 'kind' in schema && !isTypeBoxSchema(schema) && !isJSONSchema(schema) diff --git a/src/adapters/effect.ts b/src/adapters/effect.ts index 0355dcc..de88f71 100644 --- a/src/adapters/effect.ts +++ b/src/adapters/effect.ts @@ -18,15 +18,9 @@ export interface EffectResolver extends Resolver { : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {isRight} = - require('@effect/data/Either') as typeof import('@effect/data/Either'); - const {isSchema, parseEither} = - require('@effect/schema/Schema') as typeof import('@effect/schema/Schema'); - const {formatErrors} = - require('@effect/schema/TreeFormatter') as typeof import('@effect/schema/TreeFormatter'); - return {formatErrors, isRight, isSchema, parseEither}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/effect'), +); const coerce: Coerce<'effect'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => { return 'ast' in schema && !isJSONSchema(schema) && !isTypeBoxSchema(schema) diff --git a/src/adapters/io-ts.ts b/src/adapters/io-ts.ts index c58553e..29e9eac 100644 --- a/src/adapters/io-ts.ts +++ b/src/adapters/io-ts.ts @@ -11,10 +11,9 @@ export interface IoTsResolver extends Resolver { output: this['schema'] extends Any ? TypeOf : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {isRight} = require('fp-ts/Either') as typeof import('fp-ts/Either'); - return {isRight}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/io-ts'), +); const coerce: Coerce<'io-ts'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => 'encode' in schema && !isTypeBoxSchema(schema) && !isJSONSchema(schema) diff --git a/src/adapters/modules/ajv.deno.ts b/src/adapters/modules/ajv.deno.ts new file mode 100644 index 0000000..edc50ce --- /dev/null +++ b/src/adapters/modules/ajv.deno.ts @@ -0,0 +1,3 @@ +import Ajv from 'npm:ajv@8.12.0'; + +export const ajv = new Ajv.default(); diff --git a/src/adapters/modules/ajv.ts b/src/adapters/modules/ajv.ts new file mode 100644 index 0000000..820be22 --- /dev/null +++ b/src/adapters/modules/ajv.ts @@ -0,0 +1,3 @@ +import Ajv from 'ajv'; + +export const ajv = new Ajv(); diff --git a/src/adapters/modules/deepkit.ts b/src/adapters/modules/deepkit.ts new file mode 100644 index 0000000..7802535 --- /dev/null +++ b/src/adapters/modules/deepkit.ts @@ -0,0 +1 @@ +export {validate} from '@deepkit/type'; diff --git a/src/adapters/modules/effect.ts b/src/adapters/modules/effect.ts new file mode 100644 index 0000000..ea11f98 --- /dev/null +++ b/src/adapters/modules/effect.ts @@ -0,0 +1,3 @@ +export {isRight} from '@effect/data/Either'; +export {isSchema, parseEither} from '@effect/schema/Schema'; +export {formatErrors} from '@effect/schema/TreeFormatter'; diff --git a/src/adapters/modules/io-ts.ts b/src/adapters/modules/io-ts.ts new file mode 100644 index 0000000..5ed2aa2 --- /dev/null +++ b/src/adapters/modules/io-ts.ts @@ -0,0 +1 @@ +export {isRight} from 'fp-ts/Either'; diff --git a/src/adapters/modules/ow.deno.ts b/src/adapters/modules/ow.deno.ts new file mode 100644 index 0000000..c34a5a1 --- /dev/null +++ b/src/adapters/modules/ow.deno.ts @@ -0,0 +1,6 @@ +import type {Ow} from 'npm:ow@0.28.2'; + +import owImport from 'npm:ow@0.28.2'; + +export {ArgumentError} from 'npm:ow@0.28.2'; +export const ow: Ow = owImport.default; diff --git a/src/adapters/modules/ow.ts b/src/adapters/modules/ow.ts new file mode 100644 index 0000000..8cf3317 --- /dev/null +++ b/src/adapters/modules/ow.ts @@ -0,0 +1,6 @@ +import type {Ow} from 'ow'; + +import owImport from 'ow'; + +export {ArgumentError} from 'ow'; +export const ow: Ow = owImport; diff --git a/src/adapters/modules/typebox.ts b/src/adapters/modules/typebox.ts new file mode 100644 index 0000000..76558e5 --- /dev/null +++ b/src/adapters/modules/typebox.ts @@ -0,0 +1 @@ +export {TypeCompiler} from '@sinclair/typebox/compiler'; diff --git a/src/adapters/modules/valibot.ts b/src/adapters/modules/valibot.ts new file mode 100644 index 0000000..68b1c91 --- /dev/null +++ b/src/adapters/modules/valibot.ts @@ -0,0 +1 @@ +export {safeParseAsync} from 'valibot'; diff --git a/src/adapters/modules/yup.ts b/src/adapters/modules/yup.ts new file mode 100644 index 0000000..9cacf1b --- /dev/null +++ b/src/adapters/modules/yup.ts @@ -0,0 +1 @@ +export {ValidationError} from 'yup'; diff --git a/src/adapters/ow.ts b/src/adapters/ow.ts index 4d5dfee..c32dbb7 100644 --- a/src/adapters/ow.ts +++ b/src/adapters/ow.ts @@ -11,11 +11,9 @@ export interface OwResolver extends Resolver { output: this['schema'] extends Predicate ? Infer : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const ow = require('ow').default as typeof import('ow').default; - const {ArgumentError} = require('ow') as typeof import('ow'); - return {ArgumentError, ow}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/ow'), +); const coerce: Coerce<'ow'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => 'context' in schema && !isTypeBoxSchema(schema) && !isJSONSchema(schema) diff --git a/src/adapters/typebox.ts b/src/adapters/typebox.ts index 701a24d..6acc5b1 100644 --- a/src/adapters/typebox.ts +++ b/src/adapters/typebox.ts @@ -11,11 +11,9 @@ export interface TypeBoxResolver extends Resolver { output: this['schema'] extends TSchema ? Static : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {TypeCompiler} = - require('@sinclair/typebox/compiler') as typeof import('@sinclair/typebox/compiler'); - return {TypeCompiler}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/typebox'), +); const coerce: Coerce<'typebox'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => isTypeBoxSchema(schema) ? fn(schema) : undefined; diff --git a/src/adapters/valibot.ts b/src/adapters/valibot.ts index d20e1cc..a5199ef 100644 --- a/src/adapters/valibot.ts +++ b/src/adapters/valibot.ts @@ -15,10 +15,9 @@ export interface ValibotResolver extends Resolver { : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {safeParseAsync} = require('valibot') as typeof import('valibot'); - return {safeParseAsync}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/valibot'), +); const coerce: Coerce<'valibot'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => 'async' in schema && !isTypeBoxSchema(schema) && !isJSONSchema(schema) diff --git a/src/adapters/yup.ts b/src/adapters/yup.ts index 5754db8..c3bc0b9 100644 --- a/src/adapters/yup.ts +++ b/src/adapters/yup.ts @@ -11,10 +11,9 @@ export interface YupResolver extends Resolver { output: this['schema'] extends Schema ? InferType : never; } -export const fetchModule = /* @__PURE__ */ memoize(async () => { - const {ValidationError} = require('yup') as typeof import('yup'); - return {ValidationError}; -}); +export const fetchModule = /* @__PURE__ */ memoize( + () => import('./modules/yup'), +); const coerce: Coerce<'yup'> = /* @__NO_SIDE_EFFECTS__ */ fn => schema => '__isYupSchema__' in schema && diff --git a/src/vite/index.ts b/src/vite/index.ts new file mode 100644 index 0000000..518e75b --- /dev/null +++ b/src/vite/index.ts @@ -0,0 +1,45 @@ +import type {Plugin} from 'vite'; + +import * as path from 'path'; +import {mergeConfig} from 'vite'; + +const optionalDependencies = [ + '@deepkit/type', + '@effect/data/Either', + '@effect/schema/Schema', + '@effect/schema/TreeFormatter', + '@sinclair/typebox/compiler', + 'ajv', + 'fp-ts/Either', + 'ow', + 'valibot', + 'yup', +]; + +function isNodeError(error: unknown): error is NodeJS.ErrnoException { + return error instanceof Error; +} + +export function typeschemaPlugin(): Plugin { + return { + config(config) { + optionalDependencies.forEach(optionalDependency => { + try { + require.resolve(optionalDependency, { + paths: [config.root || process.cwd()], + }); + } catch (e) { + if (isNodeError(e) && e.code === 'MODULE_NOT_FOUND') { + config.resolve = mergeConfig(config.resolve ?? {}, { + alias: { + [optionalDependency]: path.resolve(__dirname, 'placeholder.js'), + }, + }); + } + } + }); + }, + enforce: 'pre', + name: 'vite-plugin-typeschema', + }; +} diff --git a/src/vite/placeholder.ts b/src/vite/placeholder.ts new file mode 100644 index 0000000..7646bbd --- /dev/null +++ b/src/vite/placeholder.ts @@ -0,0 +1 @@ +export default null; diff --git a/tsup.config.ts b/tsup.config.ts index c12ed64..8540d96 100644 --- a/tsup.config.ts +++ b/tsup.config.ts @@ -1,8 +1,37 @@ +import {readFileSync, writeFileSync} from 'fs'; import {defineConfig} from 'tsup'; -export default defineConfig({ - clean: true, - dts: true, - entry: ['src/index.ts'], - format: ['esm', 'cjs'], -}); +function replaceStringInFile( + filePath: string, + searchString: string, + replaceString: string, +): () => Promise { + return async () => { + try { + const updatedContent = readFileSync(filePath, 'utf-8').replace( + new RegExp(searchString, 'g'), + replaceString, + ); + writeFileSync(filePath, updatedContent, 'utf-8'); + } catch (error) { + console.error(`An error occurred while processing ${filePath}: `, error); + } + }; +} + +export default defineConfig([ + { + clean: true, + dts: true, + entry: ['src/index.ts'], + format: ['esm', 'cjs'], + onSuccess: replaceStringInFile('dist/index.js', 'import', 'require'), + }, + { + clean: true, + dts: true, + entry: ['src/vite/index.ts', 'src/vite/placeholder.ts'], + format: 'cjs', + outDir: 'vite', + }, +]); diff --git a/www/pages/docs/setup.mdx b/www/pages/docs/setup.mdx index ce7c2a9..fb8dc7d 100644 --- a/www/pages/docs/setup.mdx +++ b/www/pages/docs/setup.mdx @@ -13,3 +13,17 @@ If using [Deno](https://deno.com/), just replace the import module with `https:/ ```ts import {wrap} from 'https://deno.land/x/typeschema'; ``` + +### Vite + +If using [Vite](https://vitejs.dev/), you'll need to update your `vite.config.ts` file: + +```ts filename="vite.config.ts" +import {typeschemaPlugin} from '@decs/typeschema/vite'; + +export default defineConfig({ + plugins: [ + typeschemaPlugin(), // add this plugin + ], +}); +``` diff --git a/yarn.lock b/yarn.lock index 7cbf7b9..9d5941c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2807,7 +2807,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.18.2: +esbuild@^0.18.10, esbuild@^0.18.2: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== @@ -5039,6 +5039,11 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + natural-compare@1.4.0, natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5592,6 +5597,15 @@ postcss-load-config@^4.0.1: lilconfig "^2.0.5" yaml "^2.1.1" +postcss@^8.4.27: + version "8.4.30" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.30.tgz#0e0648d551a606ef2192a26da4cabafcc09c1aa7" + integrity sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5912,7 +5926,7 @@ rimraf@^5.0.1: dependencies: glob "^10.2.5" -rollup@^3.2.5: +rollup@^3.2.5, rollup@^3.27.1: version "3.29.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.2.tgz#cbc76cd5b03b9f9e93be991d23a1dff9c6d5b740" integrity sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A== @@ -6135,6 +6149,11 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" +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" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -6865,6 +6884,17 @@ validate-npm-package-name@^5.0.0: dependencies: builtins "^5.0.0" +vite@^4.4.9: + version "4.4.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.4.9.tgz#1402423f1a2f8d66fd8d15e351127c7236d29d3d" + integrity sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA== + dependencies: + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" + optionalDependencies: + fsevents "~2.3.2" + walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"