diff --git a/.changeset/brave-badgers-cheer.md b/.changeset/brave-badgers-cheer.md new file mode 100644 index 000000000..f47434bdd --- /dev/null +++ b/.changeset/brave-badgers-cheer.md @@ -0,0 +1,6 @@ +--- +'@vue-macros/jsx-directive': minor +'unplugin-vue-macros': minor +--- + +add jsx-directive plugin diff --git a/docs/.vitepress/locales/common.ts b/docs/.vitepress/locales/common.ts index bbb673244..f51d8dfa2 100644 --- a/docs/.vitepress/locales/common.ts +++ b/docs/.vitepress/locales/common.ts @@ -173,6 +173,10 @@ export const sidebar = (lang: string): DefaultTheme.SidebarItem[] => { text: 'exportExpose', link: `${urlPrefix}/features/export-expose`, }, + { + text: 'jsxDirective', + link: `${urlPrefix}/features/jsx-directive`, + }, ], }, ], diff --git a/docs/features/jsx-directive.md b/docs/features/jsx-directive.md new file mode 100644 index 000000000..f8fc5b2f7 --- /dev/null +++ b/docs/features/jsx-directive.md @@ -0,0 +1,37 @@ +# jsxDirective + + + +`v-if` and `v-for` directive for jsx. + +| Features | Supported | +| :----------: | :----------------: | +| Vue 3 | :white_check_mark: | +| Nuxt 3 | :white_check_mark: | +| Vue 2 | :white_check_mark: | +| Volar(v-for) | :x: | + +## Usage + +```vue + +``` diff --git a/docs/zh-CN/features/jsx-directive.md b/docs/zh-CN/features/jsx-directive.md new file mode 100644 index 000000000..f8fc5b2f7 --- /dev/null +++ b/docs/zh-CN/features/jsx-directive.md @@ -0,0 +1,37 @@ +# jsxDirective + + + +`v-if` and `v-for` directive for jsx. + +| Features | Supported | +| :----------: | :----------------: | +| Vue 3 | :white_check_mark: | +| Nuxt 3 | :white_check_mark: | +| Vue 2 | :white_check_mark: | +| Volar(v-for) | :x: | + +## Usage + +```vue + +``` diff --git a/packages/jsx-directive/README.md b/packages/jsx-directive/README.md new file mode 100644 index 000000000..f1aaec9a7 --- /dev/null +++ b/packages/jsx-directive/README.md @@ -0,0 +1,3 @@ +# @vue-macros/jsx-directive [![npm](https://img.shields.io/npm/v/@vue-macros/jsx-directive.svg)](https://npmjs.com/package/@vue-macros/jsx-directive) + +Please refer to [README.md](https://github.com/sxzz/vue-macros#readme) diff --git a/packages/jsx-directive/package.json b/packages/jsx-directive/package.json new file mode 100644 index 000000000..84d3556f8 --- /dev/null +++ b/packages/jsx-directive/package.json @@ -0,0 +1,118 @@ +{ + "name": "@vue-macros/jsx-directive", + "version": "0.0.0", + "packageManager": "pnpm@8.6.7", + "description": "jsx-directive feature from Vue Macros.", + "keywords": [ + "vue-macros", + "macros", + "vue", + "sfc", + "setup", + "script-setup", + "jsx-directive", + "unplugin" + ], + "license": "MIT", + "homepage": "https://github.com/sxzz/vue-macros#readme", + "bugs": { + "url": "https://github.com/sxzz/vue-macros/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sxzz/vue-macros.git", + "directory": "packages/jsx-directive" + }, + "author": "zhiyuanzmj", + "contributors": [ + "三咲智子 " + ], + "files": [ + "dist" + ], + "main": "dist/index.js", + "module": "dist/index.mjs", + "types": "dist/index.d.ts", + "exports": { + ".": { + "dev": "./src/index.ts", + "types": { + "require": "./dist/index.d.ts", + "import": "./dist/index.d.mts" + }, + "require": "./dist/index.js", + "import": "./dist/index.mjs" + }, + "./api": { + "dev": "./src/api.ts", + "types": { + "require": "./dist/api.d.ts", + "import": "./dist/api.d.mts" + }, + "require": "./dist/api.js", + "import": "./dist/api.mjs" + }, + "./esbuild": { + "dev": "./src/esbuild.ts", + "types": { + "require": "./dist/esbuild.d.ts", + "import": "./dist/esbuild.d.mts" + }, + "require": "./dist/esbuild.js", + "import": "./dist/esbuild.mjs" + }, + "./rollup": { + "dev": "./src/rollup.ts", + "types": { + "require": "./dist/rollup.d.ts", + "import": "./dist/rollup.d.mts" + }, + "require": "./dist/rollup.js", + "import": "./dist/rollup.mjs" + }, + "./vite": { + "dev": "./src/vite.ts", + "types": { + "require": "./dist/vite.d.ts", + "import": "./dist/vite.d.mts" + }, + "require": "./dist/vite.js", + "import": "./dist/vite.mjs" + }, + "./webpack": { + "dev": "./src/webpack.ts", + "types": { + "require": "./dist/webpack.d.ts", + "import": "./dist/webpack.d.mts" + }, + "require": "./dist/webpack.js", + "import": "./dist/webpack.mjs" + }, + "./*": [ + "./*", + "./*.d.ts" + ] + }, + "typesVersions": { + "*": { + "*": [ + "./dist/*", + "./*" + ] + } + }, + "scripts": { + "build": "tsup && tsx ../../scripts/postbuild.ts", + "dev": "DEV=true tsup" + }, + "dependencies": { + "@vue-macros/common": "workspace:~", + "unplugin": "^1.3.1" + }, + "devDependencies": { + "vue": "^3.3.4" + }, + "engines": { + "node": ">=16.14.0" + } +} diff --git a/packages/jsx-directive/src/api.ts b/packages/jsx-directive/src/api.ts new file mode 100644 index 000000000..46d458ad7 --- /dev/null +++ b/packages/jsx-directive/src/api.ts @@ -0,0 +1 @@ +export * from './core' diff --git a/packages/jsx-directive/src/core/index.ts b/packages/jsx-directive/src/core/index.ts new file mode 100644 index 000000000..7aeffc440 --- /dev/null +++ b/packages/jsx-directive/src/core/index.ts @@ -0,0 +1,42 @@ +import { type Program } from '@babel/types' +import { + MagicString, + babelParse, + getLang, + getTransformResult, + parseSFC, +} from '@vue-macros/common' +import { vIfTransform } from './v-if' +import { vForTransform } from './v-for' + +export function transformJsxVueDirective(code: string, id: string) { + const lang = getLang(id) + let asts: { + ast: Program + offset: number + }[] = [] + if (lang === 'vue') { + const { scriptSetup, getSetupAst, script, getScriptAst } = parseSFC( + code, + id + ) + if (script) { + asts.push({ ast: getScriptAst()!, offset: script.loc.start.offset }) + } + if (scriptSetup) { + asts.push({ ast: getSetupAst()!, offset: scriptSetup.loc.start.offset }) + } + } else if (['jsx', 'tsx'].includes(lang)) { + asts = [{ ast: babelParse(code, lang), offset: 0 }] + } else { + return + } + + const s = new MagicString(code) + for (const { ast, offset } of asts) { + vIfTransform(ast, s, offset) + vForTransform(ast, s, offset) + } + + return getTransformResult(s, id) +} diff --git a/packages/jsx-directive/src/core/v-for.ts b/packages/jsx-directive/src/core/v-for.ts new file mode 100644 index 000000000..3f91b3551 --- /dev/null +++ b/packages/jsx-directive/src/core/v-for.ts @@ -0,0 +1,50 @@ +import { + type JSXAttribute, + type JSXElement, + type Node, + type Program, +} from '@babel/types' +import { type MagicString, walkAST } from '@vue-macros/common' + +export function vForTransform(ast: Program, s: MagicString, offset = 0) { + if (!s.sliceNode(ast, { offset }).includes('v-for')) return + + const nodes: { + node: JSXElement + attribute: JSXAttribute + }[] = [] + + walkAST(ast, { + enter(node) { + if (node.type !== 'JSXElement') return + + const attribute = node.openingElement.attributes.find( + (i): i is JSXAttribute => + i.type === 'JSXAttribute' && ['v-for'].includes(`${i.name.name}`) + ) + if (attribute) { + nodes.push({ + node, + attribute, + }) + } + }, + }) + + nodes.forEach(({ node, attribute }) => { + if (`${attribute.name.name}` === 'v-for') { + if (!attribute.value) return + const [i, list] = s + .slice( + attribute.value.start! + offset + 1, + attribute.value.end! + offset - 1 + ) + .split(/\s+in\s+/) + + s.appendLeft(node.start! + offset, ` { ${list}.map(${i}=> `) + + s.appendRight(node.end! + offset, ') }') + s.remove(attribute.start! + offset - 1, attribute.end! + offset) + } + }) +} diff --git a/packages/jsx-directive/src/core/v-if.ts b/packages/jsx-directive/src/core/v-if.ts new file mode 100644 index 000000000..d9f52120b --- /dev/null +++ b/packages/jsx-directive/src/core/v-if.ts @@ -0,0 +1,63 @@ +import { + type JSXAttribute, + type JSXElement, + type Node, + type Program, +} from '@babel/types' +import { type MagicString, walkAST } from '@vue-macros/common' + +export function vIfTransform(ast: Program, s: MagicString, offset = 0) { + if (!s.sliceNode(ast, { offset }).includes('v-if')) return + + const nodeMap = new Map< + Node, + { + node: JSXElement + attribute: JSXAttribute + }[] + >() + + walkAST(ast, { + enter(node, parent) { + if (node.type !== 'JSXElement') return + + const attribute = node.openingElement.attributes.find( + (i) => + i.type === 'JSXAttribute' && + ['v-if', 'v-else-if', 'v-else'].includes(`${i.name.name}`) + ) as JSXAttribute + if (attribute) { + if (!nodeMap.has(parent!)) nodeMap.set(parent!, []) + + nodeMap.get(parent!)?.push({ + node, + attribute, + }) + } + }, + }) + + const nodes = [...nodeMap.values()].flat() + nodes.forEach(({ node, attribute }, index) => { + if (['v-if', 'v-else-if'].includes(`${attribute.name.name}`)) { + if (attribute.value) + s.appendLeft( + node.start! + offset, + `${attribute.name.name === 'v-if' ? '{ ' : ''}${s.slice( + attribute.value.start! + offset + 1, + attribute.value.end! + offset - 1 + )} ? ` + ) + + s.appendRight( + node.end! + offset, + `${nodes[index + 1]?.attribute.name.name}`.startsWith('v-else') + ? ' :' + : " : '' }" + ) + s.remove(attribute.start! + offset - 1, attribute.end! + offset) + } else { + s.appendRight(node.end! + offset, ' }') + } + }) +} diff --git a/packages/jsx-directive/src/esbuild.ts b/packages/jsx-directive/src/esbuild.ts new file mode 100644 index 000000000..71f1e0952 --- /dev/null +++ b/packages/jsx-directive/src/esbuild.ts @@ -0,0 +1,3 @@ +import unplugin from '.' + +export default unplugin.esbuild diff --git a/packages/jsx-directive/src/index.ts b/packages/jsx-directive/src/index.ts new file mode 100644 index 000000000..7497d408d --- /dev/null +++ b/packages/jsx-directive/src/index.ts @@ -0,0 +1,45 @@ +import { createUnplugin } from 'unplugin' +import { + type BaseOptions, + type MarkRequired, + REGEX_LANG_JSX, + REGEX_NODE_MODULES, + createFilter, + detectVueVersion, +} from '@vue-macros/common' +import { transformJsxVueDirective } from './core' + +export type Options = BaseOptions +export type OptionsResolved = MarkRequired + +function resolveOption(options: Options): OptionsResolved { + const version = options.version || detectVueVersion() + return { + include: [REGEX_LANG_JSX], + exclude: [REGEX_NODE_MODULES], + ...options, + version, + } +} + +const name = 'unplugin-jsx-vue-directive' + +export default createUnplugin( + (userOptions = {}) => { + const options = resolveOption(userOptions) + const filter = createFilter(options) + + return { + name, + enforce: 'pre', + + transformInclude(id) { + return filter(id) + }, + + transform(code, id) { + return transformJsxVueDirective(code, id) + }, + } + } +) diff --git a/packages/jsx-directive/src/rollup.ts b/packages/jsx-directive/src/rollup.ts new file mode 100644 index 000000000..ed6909cd3 --- /dev/null +++ b/packages/jsx-directive/src/rollup.ts @@ -0,0 +1,3 @@ +import unplugin from '.' + +export default unplugin.rollup diff --git a/packages/jsx-directive/src/vite.ts b/packages/jsx-directive/src/vite.ts new file mode 100644 index 000000000..589f4b964 --- /dev/null +++ b/packages/jsx-directive/src/vite.ts @@ -0,0 +1,3 @@ +import unplugin from '.' + +export default unplugin.vite diff --git a/packages/jsx-directive/src/webpack.ts b/packages/jsx-directive/src/webpack.ts new file mode 100644 index 000000000..83091ee31 --- /dev/null +++ b/packages/jsx-directive/src/webpack.ts @@ -0,0 +1,3 @@ +import unplugin from '.' + +export default unplugin.webpack diff --git a/packages/jsx-directive/tests/__snapshots__/v-for.test.ts.snap b/packages/jsx-directive/tests/__snapshots__/v-for.test.ts.snap new file mode 100644 index 000000000..46ae1546e --- /dev/null +++ b/packages/jsx-directive/tests/__snapshots__/v-for.test.ts.snap @@ -0,0 +1,31 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`jsx-vue-directive > v-for > ./fixtures/v-for/v-for.setup.tsx 1`] = ` +"// @ts-nocheck +const list = [1, 2, 3] + +export default () => ( + <> + { list.map((i, index)=>
+
{i}
+
) } + +) +" +`; + +exports[`jsx-vue-directive > v-for > ./fixtures/v-for/v-for.vue 1`] = ` +" +" +`; diff --git a/packages/jsx-directive/tests/__snapshots__/v-if.test.ts.snap b/packages/jsx-directive/tests/__snapshots__/v-if.test.ts.snap new file mode 100644 index 000000000..994bd9a28 --- /dev/null +++ b/packages/jsx-directive/tests/__snapshots__/v-if.test.ts.snap @@ -0,0 +1,132 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-else.setup.tsx 1`] = ` +"const { foo = 2 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> + { foo === 0 ?
0
: + foo === 1 ?
1
: +
2
} + +) +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-else.vue 1`] = ` +" +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-else-if.setup.tsx 1`] = ` +"const { foo = 0 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> + { foo === 0 ?
0
: + foo === 1 ?
1
: + foo === 2 ?
2
: '' } + +) +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-else-if.vue 1`] = ` +" +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-if.setup.tsx 1`] = ` +"const { foo } = defineProps<{ + foo: number +}>() + +export default () => { + return ( + <> + { foo === 0 ?
0
: '' } + { foo === 1 ?
1
: '' } + + ) +} +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-if.vue 1`] = ` +" +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-if-nested.setup.tsx 1`] = ` +"const { foo = 0 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> + { foo === 0 ?
+ { foo === 0 ?
0-0
: + foo === 1 ?
0-1
: +
0-2
} +
: '' } + +) +" +`; + +exports[`jsx-vue-directive > v-if > ./fixtures/v-if/v-if-nested.vue 1`] = ` +" +" +`; diff --git a/packages/jsx-directive/tests/fixtures/v-for/v-for.setup.tsx b/packages/jsx-directive/tests/fixtures/v-for/v-for.setup.tsx new file mode 100644 index 000000000..da86c63b5 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-for/v-for.setup.tsx @@ -0,0 +1,10 @@ +// @ts-nocheck +const list = [1, 2, 3] + +export default () => ( + <> +
+
{i}
+
+ +) diff --git a/packages/jsx-directive/tests/fixtures/v-for/v-for.vue b/packages/jsx-directive/tests/fixtures/v-for/v-for.vue new file mode 100644 index 000000000..1a02d3b31 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-for/v-for.vue @@ -0,0 +1,12 @@ + diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-else-if.setup.tsx b/packages/jsx-directive/tests/fixtures/v-if/v-else-if.setup.tsx new file mode 100644 index 000000000..d5a33d750 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-else-if.setup.tsx @@ -0,0 +1,11 @@ +const { foo = 0 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> +
0
+
1
+
2
+ +) diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-else-if.vue b/packages/jsx-directive/tests/fixtures/v-if/v-else-if.vue new file mode 100644 index 000000000..da1af84cc --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-else-if.vue @@ -0,0 +1,12 @@ + diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-else.setup.tsx b/packages/jsx-directive/tests/fixtures/v-if/v-else.setup.tsx new file mode 100644 index 000000000..942017f0b --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-else.setup.tsx @@ -0,0 +1,11 @@ +const { foo = 2 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> +
0
+
1
+
2
+ +) diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-else.vue b/packages/jsx-directive/tests/fixtures/v-if/v-else.vue new file mode 100644 index 000000000..044834c51 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-else.vue @@ -0,0 +1,13 @@ + diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.setup.tsx b/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.setup.tsx new file mode 100644 index 000000000..1d6c049b8 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.setup.tsx @@ -0,0 +1,13 @@ +const { foo = 0 } = defineProps<{ + foo: number +}>() + +export default () => ( + <> +
+
0-0
+
0-1
+
0-2
+
+ +) diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.vue b/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.vue new file mode 100644 index 000000000..481f61217 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-if-nested.vue @@ -0,0 +1,15 @@ + diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-if.setup.tsx b/packages/jsx-directive/tests/fixtures/v-if/v-if.setup.tsx new file mode 100644 index 000000000..29561a3fe --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-if.setup.tsx @@ -0,0 +1,12 @@ +const { foo } = defineProps<{ + foo: number +}>() + +export default () => { + return ( + <> +
0
+
1
+ + ) +} diff --git a/packages/jsx-directive/tests/fixtures/v-if/v-if.vue b/packages/jsx-directive/tests/fixtures/v-if/v-if.vue new file mode 100644 index 000000000..7a34fef18 --- /dev/null +++ b/packages/jsx-directive/tests/fixtures/v-if/v-if.vue @@ -0,0 +1,12 @@ + diff --git a/packages/jsx-directive/tests/v-for.test.ts b/packages/jsx-directive/tests/v-for.test.ts new file mode 100644 index 000000000..a3a38be69 --- /dev/null +++ b/packages/jsx-directive/tests/v-for.test.ts @@ -0,0 +1,17 @@ +import { describe } from 'vitest' +import { testFixtures } from 'packages/test-utils/src' +import { transformJsxVueDirective } from '../src/api' + +describe('jsx-vue-directive', () => { + describe('v-for', async () => { + await testFixtures( + import.meta.glob('./fixtures/v-for/*.{vue,jsx,tsx}', { + eager: true, + as: 'raw', + }), + (args, id, code) => { + return transformJsxVueDirective(code, id)?.code + } + ) + }) +}) diff --git a/packages/jsx-directive/tests/v-if.test.ts b/packages/jsx-directive/tests/v-if.test.ts new file mode 100644 index 000000000..45bf9f5f5 --- /dev/null +++ b/packages/jsx-directive/tests/v-if.test.ts @@ -0,0 +1,17 @@ +import { describe } from 'vitest' +import { testFixtures } from 'packages/test-utils/src' +import { transformJsxVueDirective } from '../src/api' + +describe('jsx-vue-directive', () => { + describe('v-if', async () => { + await testFixtures( + import.meta.glob('./fixtures/v-if/*.{vue,jsx,tsx}', { + eager: true, + as: 'raw', + }), + (args, id, code) => { + return transformJsxVueDirective(code, id)?.code + } + ) + }) +}) diff --git a/packages/jsx-directive/tsup.config.ts b/packages/jsx-directive/tsup.config.ts new file mode 100644 index 000000000..1605eae16 --- /dev/null +++ b/packages/jsx-directive/tsup.config.ts @@ -0,0 +1 @@ +export { default } from '../../tsup.config.js' diff --git a/packages/macros/package.json b/packages/macros/package.json index 2b875fc34..fbe37ed3e 100644 --- a/packages/macros/package.json +++ b/packages/macros/package.json @@ -112,6 +112,7 @@ "@vue-macros/export-expose": "workspace:*", "@vue-macros/export-props": "workspace:*", "@vue-macros/hoist-static": "workspace:*", + "@vue-macros/jsx-directive": "workspace:*", "@vue-macros/named-template": "workspace:*", "@vue-macros/reactivity-transform": "workspace:*", "@vue-macros/setup-block": "workspace:*", diff --git a/packages/macros/src/index.ts b/packages/macros/src/index.ts index 5e9567a71..d0ddc99cd 100644 --- a/packages/macros/src/index.ts +++ b/packages/macros/src/index.ts @@ -48,6 +48,9 @@ import VueExportProps, { import VueHoistStatic, { type Options as OptionsHoistStatic, } from '@vue-macros/hoist-static' +import VueJsxDirective, { + type Options as OptionsJsxDirective, +} from '@vue-macros/jsx-directive' import VueNamedTemplate, { type Options as OptionsNamedTemplate, } from '@vue-macros/named-template' @@ -81,6 +84,7 @@ export interface FeatureOptionsMap { exportExpose: OptionsExportExpose exportProps: OptionsExportProps hoistStatic: OptionsHoistStatic + jsxDirective: OptionsJsxDirective namedTemplate: OptionsNamedTemplate reactivityTransform: OptionsReactivityTransform setupBlock: OptionsSetupBlock @@ -135,6 +139,7 @@ export function resolveOptions({ exportExpose, exportProps, hoistStatic, + jsxDirective, namedTemplate, reactivityTransform, setupBlock, @@ -204,6 +209,9 @@ export function resolveOptions({ { version }, false ), + jsxDirective: resolveSubOptions<'jsxDirective'>(jsxDirective, { + version, + }), hoistStatic: resolveSubOptions<'hoistStatic'>(hoistStatic, { version }), namedTemplate: resolveSubOptions<'namedTemplate'>(namedTemplate, { version, @@ -299,6 +307,7 @@ export default createCombinePlugin( ), resolvePlugin(VueHoistStatic, framework, options.hoistStatic), resolvePlugin(VueDefineOptions, framework, options.defineOptions), + resolvePlugin(VueJsxDirective, framework, options.jsxDirective), options.plugins.vue, options.plugins.vueJsx, resolvePlugin(VueDefineRender, framework, options.defineRender), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7676cab40..6b983e754 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -399,6 +399,19 @@ importers: specifier: ^1.4.0 version: 1.4.0 + packages/jsx-directive: + dependencies: + '@vue-macros/common': + specifier: workspace:~ + version: link:../common + unplugin: + specifier: ^1.3.1 + version: 1.4.0 + devDependencies: + vue: + specifier: ^3.3.4 + version: 3.3.4 + packages/macros: dependencies: '@vue-macros/better-define': @@ -443,6 +456,9 @@ importers: '@vue-macros/hoist-static': specifier: workspace:* version: link:../hoist-static + '@vue-macros/jsx-directive': + specifier: workspace:* + version: link:../jsx-directive '@vue-macros/named-template': specifier: workspace:* version: link:../named-template