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 [](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/define-macro/demo/usage.vue b/packages/define-macro/demo/usage.vue
new file mode 100644
index 000000000..f4530cf44
--- /dev/null
+++ b/packages/define-macro/demo/usage.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/packages/define-macro/demo/v-model.ts b/packages/define-macro/demo/v-model.ts
new file mode 100644
index 000000000..024dca4ab
--- /dev/null
+++ b/packages/define-macro/demo/v-model.ts
@@ -0,0 +1,36 @@
+import { isStringLiteral } from '@babel/types'
+import { computed, getCurrentInstance } from 'vue'
+import { inferRuntimeType } from '../src/utils'
+import { defineMacro } from '../src'
+
+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/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/define-macro/src/index.ts b/packages/define-macro/src/index.ts
new file mode 100644
index 000000000..968a55eaf
--- /dev/null
+++ b/packages/define-macro/src/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/define-macro/src/transform.ts b/packages/define-macro/src/transform.ts
new file mode 100644
index 000000000..b894d8807
--- /dev/null
+++ b/packages/define-macro/src/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/define-macro/src/types.ts b/packages/define-macro/src/types.ts
new file mode 100644
index 000000000..b9aeb4ed4
--- /dev/null
+++ b/packages/define-macro/src/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/define-macro/src/utils.ts b/packages/define-macro/src/utils.ts
new file mode 100644
index 000000000..7105adf38
--- /dev/null
+++ b/packages/define-macro/src/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/define-macro/tests/analyze-component.test.ts b/packages/define-macro/tests/analyze-component.test.ts
new file mode 100644
index 000000000..8f1ab6ea8
--- /dev/null
+++ b/packages/define-macro/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()
+ })
+ })
+})
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/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==}