Skip to content

Commit

Permalink
fix: support defineModels with defineProp
Browse files Browse the repository at this point in the history
closes #423
  • Loading branch information
sxzz committed Jul 15, 2023
1 parent 4df51da commit 8ab4e93
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 29 deletions.
7 changes: 7 additions & 0 deletions .changeset/tender-pants-sell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'unplugin-vue-macros': patch
---

support defineModels with defineProp

closes #423
19 changes: 15 additions & 4 deletions packages/macros/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,22 +270,33 @@ export default createCombinePlugin<Options | undefined>(
setupComponentPlugins?.[0],
resolvePlugin(VueSetupBlock, framework, options.setupBlock),
namedTemplatePlugins?.[0],
resolvePlugin(VueDefineEmit, framework, options.defineEmit),

// props
resolvePlugin(VueChainCall, framework, options.chainCall),
resolvePlugin(VueDefineProps, framework, options.defineProps),
resolvePlugin(VueDefinePropsRefs, framework, options.definePropsRefs),
resolvePlugin(VueDefineProp, framework, options.defineProp),
resolvePlugin(VueChainCall, framework, options.chainCall),
resolvePlugin(VueExportProps, framework, options.exportProps),

// emits
resolvePlugin(VueDefineEmit, framework, options.defineEmit),
resolvePlugin(VueShortEmits, framework, options.shortEmits),

// both props & emits
resolvePlugin(VueDefineModels, framework, options.defineModels),

// convert to runtime props & emits
resolvePlugin(VueBetterDefine, framework, options.betterDefine),

// runtime props
resolvePlugin(VueDefineProp, framework, options.defineProp),

resolvePlugin(VueDefineSlots, framework, options.defineSlots),
resolvePlugin(VueExportExpose, framework, options.exportExpose),
resolvePlugin(
VueReactivityTransform,
framework,
options.reactivityTransform
),
resolvePlugin(VueBetterDefine, framework, options.betterDefine),
resolvePlugin(VueHoistStatic, framework, options.hoistStatic),
resolvePlugin(VueDefineOptions, framework, options.defineOptions),
options.plugins.vue,
Expand Down
52 changes: 29 additions & 23 deletions packages/macros/tests/__snapshots__/fixtures.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,6 @@ export { case233 as default };
"
`;

exports[`fixtures > tests/fixtures/define-prop-props-refs.vue 1`] = `
"import { defineComponent, toRefs, toRef } from 'vue';
import __MACROS_normalizePropsOrEmits from '/vue-macros/define-prop/helper';
import _export_sfc from '[NULL]/plugin-vue/export-helper';
var _sfc_main = /* @__PURE__ */ defineComponent({
__name: \\"define-prop-props-refs\\",
props: { ...__MACROS_normalizePropsOrEmits([\\"foo\\"]), ...__MACROS_normalizePropsOrEmits([\\"bar\\"]) },
setup(__props) {
const __MACROS_props = __props;
const { foo } = toRefs(__MACROS_props);
const bar = toRef(__props, \\"bar\\");
return () => {
};
}
});
var definePropPropsRefs = /* @__PURE__ */ _export_sfc(_sfc_main, [__FILE__]);
export { definePropPropsRefs as default };
"
`;

exports[`fixtures > tests/fixtures/define-props-refs.vue 1`] = `
"import { defineComponent, toRefs } from 'vue';
import _export_sfc from '[NULL]/plugin-vue/export-helper';
Expand Down Expand Up @@ -161,6 +138,35 @@ export { hoistStaticScope as default };
"
`;
exports[`fixtures > tests/fixtures/mixed-define-props.vue 1`] = `
"import { defineComponent, toRefs, toRef } from 'vue';
import __MACROS_normalizePropsOrEmits from '/vue-macros/define-prop/helper';
import __MACROS_useVModel from '/vue-macros/define-models/use-vmodel';
import _export_sfc from '[NULL]/plugin-vue/export-helper';
var _sfc_main = /* @__PURE__ */ defineComponent({
__name: \\"mixed-define-props\\",
props: { ...__MACROS_normalizePropsOrEmits({
baz: { type: String, required: true },
foo: { type: String, required: false }
}), ...__MACROS_normalizePropsOrEmits([\\"bar\\"]) },
emits: [\\"update:baz\\"],
setup(__props) {
const __MACROS_props = __props;
const { foo } = toRefs(__MACROS_props);
const bar = toRef(__props, \\"bar\\");
const { baz } = __MACROS_useVModel(\\"baz\\");
return () => {
};
}
});
var mixedDefineProps = /* @__PURE__ */ _export_sfc(_sfc_main, [__FILE__]);
export { mixedDefineProps as default };
"
`;
exports[`fixtures > tests/fixtures/short-emits.setup.tsx 1`] = `
"import { defineComponent } from 'vue';
import _export_sfc from '[NULL]/plugin-vue/export-helper';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { defineProp } from '../../../define-prop/macros'
const { foo } = definePropsRefs(['foo'])
const { foo } = definePropsRefs<{ foo?: string }>()
const bar = defineProp('bar')
const { baz } = defineModels<{ baz: string }>()
</script>

0 comments on commit 8ab4e93

Please sign in to comment.