mirror of
https://gitee.com/newgateway/vtj.git
synced 2026-06-24 04:03:38 +08:00
- 新增 compositionPatch 功能,实现 <script setup> 代码中标识符到 this.xxx 的自动转换 - 扩展全局 API map,新增 pinia 和 vue-i18n 相关全局变量支持与合并声明 - 增加 ScriptSetup 解析模块,完整解析 refs、reactives、computed、methods 等组成部分 - 修改 parseVue 实现,单点分流支持 Composition API 和 Options API 两种模式解析 - 修正工具函数,调整 props 替换逻辑,避免不必要的 this.props 访问替换 - 扩展 Vitest 测试用例,覆盖 Composition API 使用场景 - 增加对 defineProps、defineEmits、inject、provide 等新语法的支持与提取 - 优化 AST 遍历,准确识别 setup 函数内容及生命周期函数映射 - 添加全局 @vueuse/core 和自定义 composable 支持逻辑 - 规范代码结构,拆分解析细节并提升整体可维护性与扩展性
38 lines
986 B
TypeScript
38 lines
986 B
TypeScript
import { expect, test, describe } from 'vitest';
|
|
import { parseScripts } from '../src/vue/scripts';
|
|
import { project } from './sources/project';
|
|
|
|
const optionsScriptSource = `
|
|
import { defineComponent, ref, reactive, computed } from 'vue';
|
|
import { ElButton } from 'element-plus';
|
|
|
|
export default defineComponent({
|
|
name: 'TestComponent',
|
|
props: {
|
|
title: { type: String, required: true, default: 'Hello' }
|
|
},
|
|
setup() {
|
|
const state = reactive({
|
|
items: [],
|
|
loading: false
|
|
});
|
|
return { items, loading };
|
|
}
|
|
});
|
|
`;
|
|
|
|
describe('parseScripts', () => {
|
|
const result = parseScripts(optionsScriptSource, project);
|
|
|
|
test('should parse imports', () => {
|
|
expect(result.imports).toBeDefined();
|
|
expect(result.imports!.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
test('should parse state from setup', () => {
|
|
expect(result.state).toBeDefined();
|
|
expect(result.state!['items']).toBeDefined();
|
|
expect(result.state!['loading']).toBeDefined();
|
|
});
|
|
});
|