From a900509c9c65d2fb1988af21033ea5a7c8215865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Sat, 27 Aug 2022 02:42:50 +0800 Subject: [PATCH 1/2] wip --- packages/macros/src/define-macro/README.md | 1 + .../macros/src/define-macro/demo/usage.vue | 9 ++ .../macros/src/define-macro/demo/v-model.ts | 36 ++++++++ packages/macros/src/define-macro/index.ts | 6 ++ packages/macros/src/define-macro/transform.ts | 9 ++ packages/macros/src/define-macro/types.ts | 26 ++++++ packages/macros/src/define-macro/utils.ts | 86 +++++++++++++++++++ .../analyze-component.test.ts.snap | 25 ++++++ .../macros/tests/analyze-component.test.ts | 26 ++++++ 9 files changed, 224 insertions(+) create mode 100644 packages/macros/src/define-macro/README.md create mode 100644 packages/macros/src/define-macro/demo/usage.vue create mode 100644 packages/macros/src/define-macro/demo/v-model.ts create mode 100644 packages/macros/src/define-macro/index.ts create mode 100644 packages/macros/src/define-macro/transform.ts create mode 100644 packages/macros/src/define-macro/types.ts create mode 100644 packages/macros/src/define-macro/utils.ts create mode 100644 packages/macros/tests/__snapshots__/analyze-component.test.ts.snap create mode 100644 packages/macros/tests/analyze-component.test.ts diff --git a/packages/macros/src/define-macro/README.md b/packages/macros/src/define-macro/README.md new file mode 100644 index 000000000..4b5aac91e --- /dev/null +++ b/packages/macros/src/define-macro/README.md @@ -0,0 +1 @@ +# `defineMacro` diff --git a/packages/macros/src/define-macro/demo/usage.vue b/packages/macros/src/define-macro/demo/usage.vue new file mode 100644 index 000000000..f4530cf44 --- /dev/null +++ b/packages/macros/src/define-macro/demo/usage.vue @@ -0,0 +1,9 @@ + + + diff --git a/packages/macros/src/define-macro/demo/v-model.ts b/packages/macros/src/define-macro/demo/v-model.ts new file mode 100644 index 000000000..e413c18ef --- /dev/null +++ b/packages/macros/src/define-macro/demo/v-model.ts @@ -0,0 +1,36 @@ +import { isStringLiteral } from '@babel/types' +import { computed, getCurrentInstance } from 'vue' +import { inferRuntimeType } from '../utils' +import { defineMacro } from '..' + +declare global { + const defineVModel: typeof defineVModelRuntime +} + +export const defineVModel = defineMacro({ + name: 'defineVModel', + processor: ({ component, args, typeArgs }) => { + if (!isStringLiteral(args[0])) throw new Error('prop name must be a string') + + const propKey = args[0].value + const eventKey = `update:${propKey}` + + component.props ||= {} + component.props[propKey] = typeArgs[0] + ? `[${inferRuntimeType(typeArgs[0]).join(', ')}]` + : 'null' + component.emits ||= {} + component.emits[eventKey] = '() => true' // don't validate now + + return component + }, + runtime: ['./v-model.ts', 'defineVModelRuntime'], +}) + +export const defineVModelRuntime = (propKey: string) => { + const { props, emit } = getCurrentInstance()! + return computed({ + get: () => props[propKey] as T, + set: (value) => emit(`update:${propKey}`, value), + }) +} diff --git a/packages/macros/src/define-macro/index.ts b/packages/macros/src/define-macro/index.ts new file mode 100644 index 000000000..968a55eaf --- /dev/null +++ b/packages/macros/src/define-macro/index.ts @@ -0,0 +1,6 @@ +import type { Macro } from './types' + +export * from './transform' +export * from './utils' + +export const defineMacro = (macro: Macro) => macro diff --git a/packages/macros/src/define-macro/transform.ts b/packages/macros/src/define-macro/transform.ts new file mode 100644 index 000000000..b894d8807 --- /dev/null +++ b/packages/macros/src/define-macro/transform.ts @@ -0,0 +1,9 @@ +import type { Macro } from './types' +import type { TransformContext } from '@vue-macros/common' + +export const transformCustomMacros = ( + ctx: TransformContext, + macros: Macro[] +) => { + +} diff --git a/packages/macros/src/define-macro/types.ts b/packages/macros/src/define-macro/types.ts new file mode 100644 index 000000000..b9aeb4ed4 --- /dev/null +++ b/packages/macros/src/define-macro/types.ts @@ -0,0 +1,26 @@ +import type { Node, Statement, TSType } from '@babel/types' + +export interface ComponentInfo { + options: string + props?: Record + emits?: Record + expose?: string[] +} + +export interface MacroContext { + id: string + code: string + component: ComponentInfo + + statement: Statement + args: Node[] + typeArgs: TSType[] + + snipNode: (node: Node) => string +} + +export interface Macro { + name: string + processor: (ctx: MacroContext) => ComponentInfo + runtime?: [string, string] +} diff --git a/packages/macros/src/define-macro/utils.ts b/packages/macros/src/define-macro/utils.ts new file mode 100644 index 000000000..7105adf38 --- /dev/null +++ b/packages/macros/src/define-macro/utils.ts @@ -0,0 +1,86 @@ +import type { TSType } from '@babel/types' + +export function inferRuntimeType(node: TSType): string[] { + // TODO record types + const declaredTypes: Record = {} + + switch (node.type) { + case 'TSStringKeyword': + return ['String'] + case 'TSNumberKeyword': + return ['Number'] + case 'TSBooleanKeyword': + return ['Boolean'] + case 'TSObjectKeyword': + return ['Object'] + case 'TSTypeLiteral': + // TODO (nice to have) generate runtime property validation + return ['Object'] + case 'TSFunctionType': + return ['Function'] + case 'TSArrayType': + case 'TSTupleType': + // TODO (nice to have) generate runtime element type/length checks + return ['Array'] + + case 'TSLiteralType': + switch (node.literal.type) { + case 'StringLiteral': + return ['String'] + case 'BooleanLiteral': + return ['Boolean'] + case 'NumericLiteral': + case 'BigIntLiteral': + return ['Number'] + default: + return [`null`] + } + + case 'TSTypeReference': + if (node.typeName.type === 'Identifier') { + if (declaredTypes[node.typeName.name]) { + return declaredTypes[node.typeName.name] + } + switch (node.typeName.name) { + case 'Array': + case 'Function': + case 'Object': + case 'Set': + case 'Map': + case 'WeakSet': + case 'WeakMap': + case 'Date': + case 'Promise': + return [node.typeName.name] + case 'Record': + case 'Partial': + case 'Readonly': + case 'Pick': + case 'Omit': + case 'Exclude': + case 'Extract': + case 'Required': + case 'InstanceType': + return ['Object'] + } + } + return [`null`] + + case 'TSParenthesizedType': + return inferRuntimeType(node.typeAnnotation) + case 'TSUnionType': + return [ + ...new Set( + [].concat(...(node.types.map((t) => inferRuntimeType(t)) as any)) + ), + ] + case 'TSIntersectionType': + return ['Object'] + + case 'TSSymbolKeyword': + return ['Symbol'] + + default: + return [`null`] // no runtime check + } +} diff --git a/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap b/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap new file mode 100644 index 000000000..020da83ae --- /dev/null +++ b/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap @@ -0,0 +1,25 @@ +// Vitest Snapshot v1 + +exports[`analyzeComponent > props > object props 1`] = ` +{ + "props": { + "code": "props", + "type": "unknown", + }, +} +`; + +exports[`analyzeComponent > props > typescript props 1`] = ` +{ + "props": undefined, +} +`; + +exports[`analyzeComponent > props 1`] = ` +{ + "props": { + "code": "props", + "type": "unknown", + }, +} +`; diff --git a/packages/macros/tests/analyze-component.test.ts b/packages/macros/tests/analyze-component.test.ts new file mode 100644 index 000000000..8f1ab6ea8 --- /dev/null +++ b/packages/macros/tests/analyze-component.test.ts @@ -0,0 +1,26 @@ +import { initContext } from '@vue-macros/common' +import { describe, expect, test } from 'vitest' + +describe('analyzeComponent', () => { + describe('props', () => { + test('object props', () => { + const { ctx } = initContext( + ``, + 'basic.vue' + ) + expect(ctx.component).toMatchSnapshot() + }) + + test('typescript props', () => { + const { ctx } = initContext( + ``, + 'basic.vue' + ) + expect(ctx.component).toMatchSnapshot() + }) + }) +}) From 10026e4a12d508aad459b2a2bc11e8b68c01012b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Sat, 22 Oct 2022 21:09:10 +0800 Subject: [PATCH 2/2] wip --- packages/define-macro/README.md | 3 + .../src => }/define-macro/demo/usage.vue | 0 .../src => }/define-macro/demo/v-model.ts | 4 +- packages/define-macro/package.json | 94 ++++++ .../src}/index.ts | 0 .../src}/transform.ts | 0 .../src}/types.ts | 0 .../src}/utils.ts | 0 .../tests/analyze-component.test.ts | 0 packages/define-macro/tsup.config.ts | 3 + packages/macros/src/define-macro/README.md | 1 - .../analyze-component.test.ts.snap | 25 -- pnpm-lock.yaml | 315 ++++++++++++++++++ 13 files changed, 417 insertions(+), 28 deletions(-) create mode 100644 packages/define-macro/README.md rename packages/{macros/src => }/define-macro/demo/usage.vue (100%) rename packages/{macros/src => }/define-macro/demo/v-model.ts (92%) create mode 100644 packages/define-macro/package.json rename packages/{macros/src/define-macro => define-macro/src}/index.ts (100%) rename packages/{macros/src/define-macro => define-macro/src}/transform.ts (100%) rename packages/{macros/src/define-macro => define-macro/src}/types.ts (100%) rename packages/{macros/src/define-macro => define-macro/src}/utils.ts (100%) rename packages/{macros => define-macro}/tests/analyze-component.test.ts (100%) create mode 100644 packages/define-macro/tsup.config.ts delete mode 100644 packages/macros/src/define-macro/README.md delete mode 100644 packages/macros/tests/__snapshots__/analyze-component.test.ts.snap diff --git a/packages/define-macro/README.md b/packages/define-macro/README.md new file mode 100644 index 000000000..c1fa4d853 --- /dev/null +++ b/packages/define-macro/README.md @@ -0,0 +1,3 @@ +# @vue-macros/define-macro [![npm](https://img.shields.io/npm/v/@vue-macros/define-macro.svg)](https://npmjs.com/package/@vue-macros/define-macro) + +Please refer to [README.md](https://github.com/sxzz/unplugin-vue-macros#readme) diff --git a/packages/macros/src/define-macro/demo/usage.vue b/packages/define-macro/demo/usage.vue similarity index 100% rename from packages/macros/src/define-macro/demo/usage.vue rename to packages/define-macro/demo/usage.vue diff --git a/packages/macros/src/define-macro/demo/v-model.ts b/packages/define-macro/demo/v-model.ts similarity index 92% rename from packages/macros/src/define-macro/demo/v-model.ts rename to packages/define-macro/demo/v-model.ts index e413c18ef..024dca4ab 100644 --- a/packages/macros/src/define-macro/demo/v-model.ts +++ b/packages/define-macro/demo/v-model.ts @@ -1,7 +1,7 @@ import { isStringLiteral } from '@babel/types' import { computed, getCurrentInstance } from 'vue' -import { inferRuntimeType } from '../utils' -import { defineMacro } from '..' +import { inferRuntimeType } from '../src/utils' +import { defineMacro } from '../src' declare global { const defineVModel: typeof defineVModelRuntime diff --git a/packages/define-macro/package.json b/packages/define-macro/package.json new file mode 100644 index 000000000..5d978a2a9 --- /dev/null +++ b/packages/define-macro/package.json @@ -0,0 +1,94 @@ +{ + "name": "@vue-macros/define-macros", + "version": "0.13.3", + "packageManager": "pnpm@7.13.5", + "description": "", + "keywords": [ + "unplugin", + "vue", + "sfc", + "setup", + "macros", + "script-setup", + "define-macros" + ], + "license": "MIT", + "homepage": "https://github.com/sxzz/unplugin-vue-macros#readme", + "bugs": { + "url": "https://github.com/sxzz/unplugin-vue-macros/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sxzz/unplugin-vue-macros.git" + }, + "author": "三咲智子 ", + "files": [ + "dist", + "macros.d.ts", + "macros-global.d.ts" + ], + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "index.d.ts", + "exports": { + ".": { + "require": "./dist/index.js", + "import": "./dist/index.mjs" + }, + "./vite": { + "require": "./dist/vite.js", + "import": "./dist/vite.mjs" + }, + "./webpack": { + "require": "./dist/webpack.js", + "import": "./dist/webpack.mjs" + }, + "./rollup": { + "require": "./dist/rollup.js", + "import": "./dist/rollup.mjs" + }, + "./esbuild": { + "require": "./dist/esbuild.js", + "import": "./dist/esbuild.mjs" + }, + "./macros": "./macros.d.ts", + "./macros-global": "./macros-global.d.ts", + "./*": "./*" + }, + "typesVersions": { + "*": { + "*": [ + "./dist/*", + "./*" + ] + } + }, + "scripts": { + "build": "tsup && tsx ../../scripts/postbuild.mts", + "dev": "DEV=1 tsup" + }, + "peerDependencies": { + "@vueuse/core": "^9.0.0" + }, + "peerDependenciesMeta": { + "@vueuse/core": { + "optional": true + } + }, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "@vue-macros/common": "workspace:~", + "unplugin": "^0.9.6" + }, + "devDependencies": { + "@babel/types": "^7.19.4", + "fast-glob": "^3.2.12", + "tsup": "^6.2.3", + "tsx": "^3.10.1", + "vite": "^3.1.8", + "vue": "^3.2.41" + }, + "engines": { + "node": ">=14.19.0" + } +} diff --git a/packages/macros/src/define-macro/index.ts b/packages/define-macro/src/index.ts similarity index 100% rename from packages/macros/src/define-macro/index.ts rename to packages/define-macro/src/index.ts diff --git a/packages/macros/src/define-macro/transform.ts b/packages/define-macro/src/transform.ts similarity index 100% rename from packages/macros/src/define-macro/transform.ts rename to packages/define-macro/src/transform.ts diff --git a/packages/macros/src/define-macro/types.ts b/packages/define-macro/src/types.ts similarity index 100% rename from packages/macros/src/define-macro/types.ts rename to packages/define-macro/src/types.ts diff --git a/packages/macros/src/define-macro/utils.ts b/packages/define-macro/src/utils.ts similarity index 100% rename from packages/macros/src/define-macro/utils.ts rename to packages/define-macro/src/utils.ts diff --git a/packages/macros/tests/analyze-component.test.ts b/packages/define-macro/tests/analyze-component.test.ts similarity index 100% rename from packages/macros/tests/analyze-component.test.ts rename to packages/define-macro/tests/analyze-component.test.ts diff --git a/packages/define-macro/tsup.config.ts b/packages/define-macro/tsup.config.ts new file mode 100644 index 000000000..81be45bb2 --- /dev/null +++ b/packages/define-macro/tsup.config.ts @@ -0,0 +1,3 @@ +import cfg from '../common/tsup.config.js' + +export default cfg diff --git a/packages/macros/src/define-macro/README.md b/packages/macros/src/define-macro/README.md deleted file mode 100644 index 4b5aac91e..000000000 --- a/packages/macros/src/define-macro/README.md +++ /dev/null @@ -1 +0,0 @@ -# `defineMacro` diff --git a/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap b/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap deleted file mode 100644 index 020da83ae..000000000 --- a/packages/macros/tests/__snapshots__/analyze-component.test.ts.snap +++ /dev/null @@ -1,25 +0,0 @@ -// Vitest Snapshot v1 - -exports[`analyzeComponent > props > object props 1`] = ` -{ - "props": { - "code": "props", - "type": "unknown", - }, -} -`; - -exports[`analyzeComponent > props > typescript props 1`] = ` -{ - "props": undefined, -} -`; - -exports[`analyzeComponent > props 1`] = ` -{ - "props": { - "code": "props", - "type": "unknown", - }, -} -`; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc8032f3b..245f68125 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -189,6 +189,37 @@ importers: specifier: ^3.3.4 version: 3.3.4 + packages/define-macro: + dependencies: + '@rollup/pluginutils': + specifier: ^4.2.1 + version: 4.2.1 + '@vue-macros/common': + specifier: workspace:~ + version: link:../common + unplugin: + specifier: ^0.9.6 + version: 0.9.6 + devDependencies: + '@babel/types': + specifier: ^7.19.4 + version: 7.21.5 + fast-glob: + specifier: ^3.2.12 + version: 3.2.12 + tsup: + specifier: ^6.2.3 + version: 6.7.0(typescript@5.0.4) + tsx: + specifier: ^3.10.1 + version: 3.12.7 + vite: + specifier: ^3.1.8 + version: 3.1.8 + vue: + specifier: ^3.2.41 + version: 3.3.4 + packages/define-models: dependencies: '@vue-macros/common': @@ -2320,6 +2351,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.17.19: resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} @@ -2392,6 +2432,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.17.19: resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} @@ -2971,6 +3020,14 @@ packages: rollup: 2.79.1 dev: true + /@rollup/pluginutils@4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: false + /@rollup/pluginutils@5.0.2(rollup@3.23.0): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} @@ -5235,6 +5292,216 @@ packages: resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} dev: true + /esbuild-android-64@0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64@0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64@0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64@0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64@0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64@0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32@0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64@0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64@0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm@0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le@0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le@0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64@0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x@0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64@0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64@0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64@0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32@0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64@0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64@0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild@0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + dev: true + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -8364,6 +8631,14 @@ packages: terser: 5.17.6 dev: true + /rollup@2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} @@ -9464,6 +9739,15 @@ packages: - supports-color dev: false + /unplugin@0.9.6: + resolution: {integrity: sha512-YYLtfoNiie/lxswy1GOsKXgnLJTE27la/PeCGznSItk+8METYZErO+zzV9KQ/hXhPwzIJsfJ4s0m1Rl7ZCWZ4Q==} + dependencies: + acorn: 8.8.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.6 + dev: false + /unplugin@1.3.1: resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} dependencies: @@ -9638,6 +9922,33 @@ packages: - supports-color dev: true + /vite@3.1.8: + resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.15.18 + postcss: 8.4.23 + resolve: 1.22.2 + rollup: 2.78.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /vite@4.3.8(@types/node@20.2.3): resolution: {integrity: sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -9905,6 +10216,10 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} + /webpack-virtual-modules@0.4.6: + resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} + dev: false + /webpack-virtual-modules@0.5.0: resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}