@lytjs/compat 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,314 @@
1
+ # @lytjs/compat
2
+
3
+ Lyt.js Vue 3 兼容层 - 让 Vue 3 用户可以无缝迁移到 Lyt.js。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @lytjs/compat
9
+
10
+ # 或使用 pnpm
11
+ pnpm add @lytjs/compat
12
+ ```
13
+
14
+ ## 特性
15
+
16
+ - 🚀 完全兼容 Vue 3 API
17
+ - 📦 SFC 文件转换器
18
+ - 🔄 自动迁移工具
19
+ - 💡 渐进式迁移策略
20
+ - 🎯 零运行时依赖
21
+
22
+ ## 快速开始
23
+
24
+ ### 迁移工具
25
+
26
+ ```bash
27
+ # 转换单个文件
28
+ vue-to-lyt src/App.vue
29
+
30
+ # 转换整个目录
31
+ vue-to-lyt src/components/
32
+ ```
33
+
34
+ ### 在代码中使用
35
+
36
+ ```javascript
37
+ // 从 'vue' 改为 '@lytjs/compat'
38
+ import { ref, computed, watch, createApp } from '@lytjs/compat';
39
+
40
+ // 代码完全相同!
41
+ const count = ref(0);
42
+ const doubled = computed(() => count.value * 2);
43
+ watch(count, (newVal) => console.log(newVal));
44
+
45
+ createApp(App).mount('#app');
46
+ ```
47
+
48
+ ## API 兼容性
49
+
50
+ ### 响应式 API(完全兼容)
51
+
52
+ ```javascript
53
+ import {
54
+ ref, shallowRef, toRef, toRefs, unref, proxyRefs,
55
+ reactive, readonly, shallowReactive,
56
+ computed,
57
+ watch, watchEffect, watchPostEffect, watchSyncEffect,
58
+ effect, stop,
59
+ provide, inject,
60
+ nextTick
61
+ } from '@lytjs/compat';
62
+ ```
63
+
64
+ ### 组件选项(完全兼容)
65
+
66
+ ```javascript
67
+ import { defineComponent, defineAsyncComponent } from '@lytjs/compat';
68
+
69
+ const Component = defineComponent({
70
+ props: {},
71
+ emits: [],
72
+ setup(props, context) {
73
+ return {};
74
+ },
75
+ data() { return {}; },
76
+ computed: {},
77
+ methods: {},
78
+ watch: {},
79
+ components: {},
80
+ directives: {}
81
+ });
82
+ ```
83
+
84
+ ### 生命周期钩子(完全兼容)
85
+
86
+ ```javascript
87
+ import {
88
+ onBeforeMount, onMounted,
89
+ onBeforeUpdate, onUpdated,
90
+ onBeforeUnmount, onUnmounted,
91
+ onErrorCaptured,
92
+ onRenderTracked, onRenderTriggered,
93
+ onActivated, onDeactivated,
94
+ onServerPrefetch
95
+ } from '@lytjs/compat';
96
+ ```
97
+
98
+ ## SFC 转换
99
+
100
+ 转换前后对比:
101
+
102
+ ```vue
103
+ <!-- 转换前 (Vue SFC) -->
104
+ <template>
105
+ <div>
106
+ <h1>{{ title }}</h1>
107
+ <button v-if="showButton" @click="handleClick">
108
+ Click me
109
+ </button>
110
+ <ul>
111
+ <li v-for="item in items" :key="item.id">{{ item.text }}</li>
112
+ </ul>
113
+ </div>
114
+ </template>
115
+
116
+ <script setup>
117
+ import { ref } from 'vue';
118
+
119
+ const title = ref('Hello Vue');
120
+ const showButton = ref(true);
121
+ const items = ref([{ id: 1, text: 'Item 1' }]);
122
+
123
+ function handleClick() {
124
+ console.log('Button clicked');
125
+ }
126
+ </script>
127
+ ```
128
+
129
+ ```vue
130
+ <!-- 转换后 (Lyt SFC) -->
131
+ <template>
132
+ <div>
133
+ <h1>{{ title }}</h1>
134
+ <button if="showButton" @click="handleClick">
135
+ Click me
136
+ </button>
137
+ <ul>
138
+ <li each="item in items" :key="item.id">{{ item.text }}</li>
139
+ </ul>
140
+ </div>
141
+ </template>
142
+
143
+ <script setup>
144
+ import { ref } from '@lytjs/compat';
145
+
146
+ const title = ref('Hello Vue');
147
+ const showButton = ref(true);
148
+ const items = ref([{ id: 1, text: 'Item 1' }]);
149
+
150
+ function handleClick() {
151
+ console.log('Button clicked');
152
+ }
153
+ </script>
154
+ ```
155
+
156
+ ## 模板语法转换
157
+
158
+ | Vue 3 | Lyt.js |
159
+ |------|------|
160
+ | `v-if` | `if` |
161
+ | `v-else-if` | `else-if` |
162
+ | `v-else` | `else` |
163
+ | `v-for` | `each` |
164
+ | `v-on:click` | `@click` |
165
+ | `v-bind:prop` | `:prop` |
166
+ | `v-model` | `v-model` |
167
+
168
+ ## 程序化使用转换器
169
+
170
+ ```javascript
171
+ import { convertVueSfcToLyt, VueSfcConverter } from '@lytjs/compat';
172
+
173
+ // 便捷函数
174
+ const lytCode = convertVueSfcToLyt(vueCode);
175
+
176
+ // 类实例方式
177
+ const converter = new VueSfcConverter(vueCode);
178
+ const parsed = converter.parse(); // 解析 SFC 结构
179
+ const converted = converter.convert(); // 执行完整转换
180
+ ```
181
+
182
+ ## 渐进式迁移策略
183
+
184
+ ### 阶段 1:引入兼容层
185
+
186
+ ```javascript
187
+ // 在 main.js 中
188
+ import { createApp } from '@lytjs/compat'; // 替换 'vue'
189
+
190
+ const app = createApp(App);
191
+ app.mount('#app');
192
+ ```
193
+
194
+ ### 阶段 2:逐个转换组件
195
+
196
+ ```bash
197
+ vue-to-lyt src/components/Header.vue
198
+ vue-to-lyt src/components/Footer.vue
199
+ ```
200
+
201
+ ### 阶段 3:完全迁移
202
+
203
+ 移除兼容层,直接使用原生 Lyt.js API:
204
+
205
+ ```javascript
206
+ // 从 '@lytjs/compat' 改为 '@lytjs/core' 和 '@lytjs/reactivity'
207
+ import { createApp } from '@lytjs/core';
208
+ import { ref, computed } from '@lytjs/reactivity';
209
+ ```
210
+
211
+ ## 内置组件兼容
212
+
213
+ | Vue 3 组件 | Lyt.js 组件 | 兼容状态 |
214
+ |----------|------------|---------|
215
+ | `KeepAlive` | `KeepAlive` | ✅ 完全兼容 |
216
+ | `Teleport` | `Teleport` | ✅ 完全兼容 |
217
+ | `Transition` | `Transition` | ✅ 完全兼容 |
218
+ | `TransitionGroup` | `TransitionGroup` | ✅ 完全兼容 |
219
+ | `Suspense` | `Suspense` | ✅ 完全兼容 |
220
+
221
+ ## 示例
222
+
223
+ ### 完整迁移示例
224
+
225
+ ```javascript
226
+ // Vue 3 代码
227
+ import { ref, computed, watch, onMounted } from 'vue';
228
+
229
+ export default {
230
+ props: {
231
+ title: String
232
+ },
233
+ emits: ['update'],
234
+ setup(props, { emit }) {
235
+ const count = ref(0);
236
+ const doubled = computed(() => count.value * 2);
237
+
238
+ watch(count, (newVal) => {
239
+ emit('update', newVal);
240
+ });
241
+
242
+ onMounted(() => {
243
+ console.log('Mounted');
244
+ });
245
+
246
+ return { count, doubled };
247
+ }
248
+ };
249
+ ```
250
+
251
+ ```javascript
252
+ // Lyt.js 兼容层代码(几乎不变)
253
+ import { ref, computed, watch, onMounted } from '@lytjs/compat';
254
+
255
+ export default {
256
+ props: {
257
+ title: String
258
+ },
259
+ emits: ['update'],
260
+ setup(props, { emit }) {
261
+ const count = ref(0);
262
+ const doubled = computed(() => count.value * 2);
263
+
264
+ watch(count, (newVal) => {
265
+ emit('update', newVal);
266
+ });
267
+
268
+ onMounted(() => {
269
+ console.log('Mounted');
270
+ });
271
+
272
+ return { count, doubled };
273
+ }
274
+ };
275
+ ```
276
+
277
+ ### 批量迁移脚本
278
+
279
+ ```bash
280
+ # 创建迁移脚本
281
+ cat > migrate.sh << 'EOF'
282
+ #!/bin/bash
283
+
284
+ # 转换所有 .vue 文件
285
+ find src -name "*.vue" -exec vue-to-lyt {} \;
286
+
287
+ # 更新所有 import 语句
288
+ find src -name "*.js" -o -name "*.ts" -o -name "*.vue" | xargs sed -i 's/from "vue"/from "@lytjs\/compat"/g'
289
+ find src -name "*.js" -o -name "*.ts" -o -name "*.vue" | xargs sed -i "s/from 'vue'/from '@lytjs\/compat'/g"
290
+
291
+ echo "迁移完成!"
292
+ EOF
293
+
294
+ chmod +x migrate.sh
295
+ ./migrate.sh
296
+ ```
297
+
298
+ ## 性能
299
+
300
+ - 完全兼容但零运行时开销
301
+ - 转换后的代码直接使用 Lyt.js 核心
302
+ - 转换器本身也是零依赖
303
+
304
+ ## 兼容性
305
+
306
+ - Node.js >= 18.0.0
307
+ - Chrome 64+
308
+ - Firefox 63+
309
+ - Safari 12+
310
+ - Edge 79+
311
+
312
+ ## License
313
+
314
+ MIT
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ var $=Object.create;var f=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var k=(s,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of R(t))!x.call(s,n)&&n!==e&&f(s,n,{get:()=>t[n],enumerable:!(r=b(t,n))||r.enumerable});return s};var v=(s,t,e)=>(e=s!=null?$(j(s)):{},k(t||!s||!s.__esModule?f(e,"default",{value:s,enumerable:!0}):e,s));var c=v(require("fs")),i=v(require("path"));var u=class{constructor(t){this.content=t}parse(){let t={template:null,script:null,scriptSetup:null,styles:[]},e=this.content.match(/<template[^>]*>([\s\S]*?)<\/template>/);e&&(t.template=e[1].trim());let r=this.content.match(/<script[^>]*setup[^>]*>([\s\S]*?)<\/script>/);if(r&&(t.scriptSetup=r[1].trim()),!t.scriptSetup){let o=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);o&&(t.script=o[1].trim())}let n=/<style([^>]*)>([\s\S]*?)<\/style>/g,l;for(;(l=n.exec(this.content))!==null;){let o={},p=l[1].match(/(\w+)(?:="([^"]*)")?/g);if(p)for(let d of p){let[S,a]=d.split("=");o[S.trim()]=a?a.replace(/"/g,""):""}t.styles.push({content:l[2].trim(),attrs:o})}return t}convertTemplate(t){let e=t;return e=e.replace(/v-for="([^"]*)"/g,'v-each="$1"'),e=e.replace(/:key=/g,"key="),e=e.replace(/v-model=/g,"v-model="),e}convertScript(t,e=!1){let r=t;return r=r.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),r}convertStyles(t){let e=[];for(let r of t){let n=Object.entries(r.attrs).map(([l,o])=>o?`${l}="${o}"`:l).join(" ");e.push(`<style${n?" "+n:""}>
3
+ ${r.content}
4
+ </style>`)}return e.join(`
5
+
6
+ `)}convert(){let t=this.parse(),e=[];if(t.template){let r=this.convertTemplate(t.template);e.push(`<template>
7
+ ${r}
8
+ </template>`)}if(t.scriptSetup){let r=this.convertScript(t.scriptSetup,!0);e.push(`<script setup>
9
+ ${r}
10
+ </script>`)}else if(t.script){let r=this.convertScript(t.script,!1);e.push(`<script>
11
+ ${r}
12
+ </script>`)}return t.styles.length>0&&e.push(this.convertStyles(t.styles)),e.join(`
13
+
14
+ `)}};function g(s){return new u(s).convert()}function C(){let s=process.argv.slice(2),t={input:"",recursive:!1,dryRun:!1,help:!1};for(let e=0;e<s.length;e++){let r=s[e];switch(r){case"-h":case"--help":t.help=!0;break;case"-r":case"--recursive":t.recursive=!0;break;case"-d":case"--dry-run":t.dryRun=!0;break;case"-o":case"--output":t.output=s[++e];break;default:t.input||(t.input=r);break}}return t}function h(){console.log(`
15
+ vue-to-lyt - \u5C06 Vue \u9879\u76EE\u8F6C\u6362\u4E3A Lyt.js \u9879\u76EE
16
+
17
+ \u7528\u6CD5:
18
+ vue-to-lyt <input> [options]
19
+
20
+ \u9009\u9879:
21
+ -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F
22
+ -o, --output \u6307\u5B9A\u8F93\u51FA\u76EE\u5F55\uFF08\u53EF\u9009\uFF09
23
+ -r, --recursive \u9012\u5F52\u5904\u7406\u76EE\u5F55
24
+ -d, --dry-run \u9884\u89C8\u8F6C\u6362\uFF0C\u4E0D\u5B9E\u9645\u5199\u5165\u6587\u4EF6
25
+
26
+ \u793A\u4F8B:
27
+ # \u8F6C\u6362\u5355\u4E2A\u6587\u4EF6
28
+ vue-to-lyt ./src/MyComponent.vue
29
+
30
+ # \u8F6C\u6362\u6574\u4E2A\u76EE\u5F55
31
+ vue-to-lyt ./src --recursive
32
+
33
+ # \u8F6C\u6362\u5230\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55
34
+ vue-to-lyt ./src --recursive --output ./lyt-src
35
+ `)}function y(s,t){try{let e=c.readFileSync(s,"utf-8"),r=g(e),n=t||s.replace(/\.vue$/,".lyt");return console.log(`[\u8F6C\u6362] ${s} -> ${n}`),console.log(e!==r?"[\u53D8\u66F4] \u6587\u4EF6\u5185\u5BB9\u5DF2\u8F6C\u6362":"[\u8DF3\u8FC7] \u6587\u4EF6\u5185\u5BB9\u65E0\u9700\u8F6C\u6362"),!0}catch(e){return console.error(`[\u9519\u8BEF] \u5904\u7406\u6587\u4EF6 ${s} \u65F6\u51FA\u9519:`,e),!1}}function m(s,t){let e=c.readdirSync(s);for(let r of e){let n=i.join(s,r);if(c.statSync(n).isDirectory()){if(r==="node_modules"||r===".git")continue;let o=t?i.join(t,r):void 0;m(n,o)}else if(r.endsWith(".vue")){let o;if(t){let p=i.relative(s,n);o=i.join(t,p.replace(/\.vue$/,".lyt"))}y(n,o)}}}function F(){let s=C();s.help&&(h(),process.exit(0)),s.input||(console.error("\u9519\u8BEF: \u8BF7\u6307\u5B9A\u8F93\u5165\u6587\u4EF6\u6216\u76EE\u5F55"),h(),process.exit(1));let t=i.resolve(s.input);c.existsSync(t)||(console.error(`\u9519\u8BEF: \u8DEF\u5F84\u4E0D\u5B58\u5728: ${t}`),process.exit(1));let e=c.statSync(t);e.isDirectory()?(s.recursive||(console.error("\u9519\u8BEF: \u8F93\u5165\u662F\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 --recursive \u9009\u9879"),process.exit(1)),m(t,s.output)):e.isFile()&&y(t,s.output),console.log(`
36
+ \u8F6C\u6362\u5B8C\u6210!`)}F();
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require("./vue-to-lyt.cjs")
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import*as c from"fs";import*as i from"path";var u=class{constructor(t){this.content=t}parse(){let t={template:null,script:null,scriptSetup:null,styles:[]},e=this.content.match(/<template[^>]*>([\s\S]*?)<\/template>/);e&&(t.template=e[1].trim());let s=this.content.match(/<script[^>]*setup[^>]*>([\s\S]*?)<\/script>/);if(s&&(t.scriptSetup=s[1].trim()),!t.scriptSetup){let n=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);n&&(t.script=n[1].trim())}let o=/<style([^>]*)>([\s\S]*?)<\/style>/g,l;for(;(l=o.exec(this.content))!==null;){let n={},p=l[1].match(/(\w+)(?:="([^"]*)")?/g);if(p)for(let y of p){let[m,a]=y.split("=");n[m.trim()]=a?a.replace(/"/g,""):""}t.styles.push({content:l[2].trim(),attrs:n})}return t}convertTemplate(t){let e=t;return e=e.replace(/v-for="([^"]*)"/g,'v-each="$1"'),e=e.replace(/:key=/g,"key="),e=e.replace(/v-model=/g,"v-model="),e}convertScript(t,e=!1){let s=t;return s=s.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),s}convertStyles(t){let e=[];for(let s of t){let o=Object.entries(s.attrs).map(([l,n])=>n?`${l}="${n}"`:l).join(" ");e.push(`<style${o?" "+o:""}>
3
+ ${s.content}
4
+ </style>`)}return e.join(`
5
+
6
+ `)}convert(){let t=this.parse(),e=[];if(t.template){let s=this.convertTemplate(t.template);e.push(`<template>
7
+ ${s}
8
+ </template>`)}if(t.scriptSetup){let s=this.convertScript(t.scriptSetup,!0);e.push(`<script setup>
9
+ ${s}
10
+ </script>`)}else if(t.script){let s=this.convertScript(t.script,!1);e.push(`<script>
11
+ ${s}
12
+ </script>`)}return t.styles.length>0&&e.push(this.convertStyles(t.styles)),e.join(`
13
+
14
+ `)}};function f(r){return new u(r).convert()}function d(){let r=process.argv.slice(2),t={input:"",recursive:!1,dryRun:!1,help:!1};for(let e=0;e<r.length;e++){let s=r[e];switch(s){case"-h":case"--help":t.help=!0;break;case"-r":case"--recursive":t.recursive=!0;break;case"-d":case"--dry-run":t.dryRun=!0;break;case"-o":case"--output":t.output=r[++e];break;default:t.input||(t.input=s);break}}return t}function v(){console.log(`
15
+ vue-to-lyt - \u5C06 Vue \u9879\u76EE\u8F6C\u6362\u4E3A Lyt.js \u9879\u76EE
16
+
17
+ \u7528\u6CD5:
18
+ vue-to-lyt <input> [options]
19
+
20
+ \u9009\u9879:
21
+ -h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F
22
+ -o, --output \u6307\u5B9A\u8F93\u51FA\u76EE\u5F55\uFF08\u53EF\u9009\uFF09
23
+ -r, --recursive \u9012\u5F52\u5904\u7406\u76EE\u5F55
24
+ -d, --dry-run \u9884\u89C8\u8F6C\u6362\uFF0C\u4E0D\u5B9E\u9645\u5199\u5165\u6587\u4EF6
25
+
26
+ \u793A\u4F8B:
27
+ # \u8F6C\u6362\u5355\u4E2A\u6587\u4EF6
28
+ vue-to-lyt ./src/MyComponent.vue
29
+
30
+ # \u8F6C\u6362\u6574\u4E2A\u76EE\u5F55
31
+ vue-to-lyt ./src --recursive
32
+
33
+ # \u8F6C\u6362\u5230\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55
34
+ vue-to-lyt ./src --recursive --output ./lyt-src
35
+ `)}function g(r,t){try{let e=c.readFileSync(r,"utf-8"),s=f(e),o=t||r.replace(/\.vue$/,".lyt");return console.log(`[\u8F6C\u6362] ${r} -> ${o}`),console.log(e!==s?"[\u53D8\u66F4] \u6587\u4EF6\u5185\u5BB9\u5DF2\u8F6C\u6362":"[\u8DF3\u8FC7] \u6587\u4EF6\u5185\u5BB9\u65E0\u9700\u8F6C\u6362"),!0}catch(e){return console.error(`[\u9519\u8BEF] \u5904\u7406\u6587\u4EF6 ${r} \u65F6\u51FA\u9519:`,e),!1}}function h(r,t){let e=c.readdirSync(r);for(let s of e){let o=i.join(r,s);if(c.statSync(o).isDirectory()){if(s==="node_modules"||s===".git")continue;let n=t?i.join(t,s):void 0;h(o,n)}else if(s.endsWith(".vue")){let n;if(t){let p=i.relative(r,o);n=i.join(t,p.replace(/\.vue$/,".lyt"))}g(o,n)}}}function S(){let r=d();r.help&&(v(),process.exit(0)),r.input||(console.error("\u9519\u8BEF: \u8BF7\u6307\u5B9A\u8F93\u5165\u6587\u4EF6\u6216\u76EE\u5F55"),v(),process.exit(1));let t=i.resolve(r.input);c.existsSync(t)||(console.error(`\u9519\u8BEF: \u8DEF\u5F84\u4E0D\u5B58\u5728: ${t}`),process.exit(1));let e=c.statSync(t);e.isDirectory()?(r.recursive||(console.error("\u9519\u8BEF: \u8F93\u5165\u662F\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 --recursive \u9009\u9879"),process.exit(1)),h(t,r.output)):e.isFile()&&g(t,r.output),console.log(`
36
+ \u8F6C\u6362\u5B8C\u6210!`)}S();
package/dist/index.cjs ADDED
@@ -0,0 +1,13 @@
1
+ var u=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var xe=Object.getOwnPropertyNames;var he=Object.prototype.hasOwnProperty;var ee=(n,e)=>{for(var t in e)u(n,t,{get:e[t],enumerable:!0})},ge=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of xe(e))!he.call(n,s)&&s!==t&&u(n,s,{get:()=>e[s],enumerable:!(r=ve(e,s))||r.enumerable});return n};var Re=n=>ge(u({},"__esModule",{value:!0}),n);var Te={};ee(Te,{KeepAlive:()=>ie,Suspense:()=>fe,Teleport:()=>pe,Transition:()=>ce,TransitionGroup:()=>le,VueSfcConverter:()=>l,computed:()=>U,convertVueSfcToLyt:()=>ne,createApp:()=>re,createCompatVue:()=>de,defineComponent:()=>se,effect:()=>k,getCurrentInstance:()=>H,getCurrentScope:()=>J,inject:()=>j,isReactive:()=>T,isReadonly:()=>M,isRef:()=>y,markRaw:()=>P,nextTick:()=>D,onActivated:()=>q,onBeforeMount:()=>V,onBeforeUnmount:()=>K,onBeforeUpdate:()=>G,onDeactivated:()=>N,onErrorCaptured:()=>W,onMounted:()=>I,onRenderTracked:()=>_,onRenderTriggered:()=>L,onScopeDispose:()=>Q,onServerPrefetch:()=>z,onUnmounted:()=>F,onUpdated:()=>$,provide:()=>b,reactive:()=>R,readonly:()=>C,ref:()=>d,shallowReactive:()=>S,shallowRef:()=>m,toRaw:()=>w,toRef:()=>x,toRefs:()=>h,triggerRef:()=>g,unref:()=>v,useCompatMode:()=>ue,watch:()=>A,watchEffect:()=>E,watchPostEffect:()=>B,watchSyncEffect:()=>O});module.exports=Re(Te);var X={};ee(X,{computed:()=>U,effect:()=>k,getCurrentInstance:()=>H,getCurrentScope:()=>J,inject:()=>j,isReactive:()=>T,isReadonly:()=>M,isRef:()=>y,markRaw:()=>P,nextTick:()=>D,onActivated:()=>q,onBeforeMount:()=>V,onBeforeUnmount:()=>K,onBeforeUpdate:()=>G,onDeactivated:()=>N,onErrorCaptured:()=>W,onMounted:()=>I,onRenderTracked:()=>_,onRenderTriggered:()=>L,onScopeDispose:()=>Q,onServerPrefetch:()=>z,onUnmounted:()=>F,onUpdated:()=>$,provide:()=>b,reactive:()=>R,readonly:()=>C,ref:()=>d,setCurrentInstance:()=>Se,shallowReactive:()=>S,shallowRef:()=>m,toRaw:()=>w,toRef:()=>x,toRefs:()=>h,triggerRef:()=>g,unref:()=>v,watch:()=>A,watchEffect:()=>E,watchPostEffect:()=>B,watchSyncEffect:()=>O});var o=require("@lytjs/reactivity"),a=require("@lytjs/component"),d=o.ref,m=o.shallowRef,y=o.isRef,v=o.unref,x=o.toRef,h=o.toRefs,g=o.triggerRef,R=o.reactive,C=o.readonly,S=o.shallowReactive,w=o.toRaw,T=o.isReactive,M=o.isReadonly;function P(n){return n.__v_skip=!0,n}var U=o.computed,A=o.watch,E=o.watchEffect;function B(n){return(0,o.watchEffect)(n,{flush:"post"})}function O(n){return(0,o.watchEffect)(n,{flush:"sync"})}var k=o.effect,D=o.nextTick,b=a.provide,j=a.inject,I=a.onMounted,$=a.onUpdated,F=a.onUnmounted,V=a.compositionOnBeforeMount,G=a.onBeforeUpdate,K=a.onBeforeUnmount;function W(n){}function _(n){}function L(n){}function q(n){}function N(n){}function z(n){}var te=null,Ce=null;function H(){return te}function Se(n){te=n}function J(){return Ce}function Q(n){}var l=class{constructor(e){this.content=e}parse(){let e={template:null,script:null,scriptSetup:null,styles:[]},t=this.content.match(/<template[^>]*>([\s\S]*?)<\/template>/);t&&(e.template=t[1].trim());let r=this.content.match(/<script[^>]*setup[^>]*>([\s\S]*?)<\/script>/);if(r&&(e.scriptSetup=r[1].trim()),!e.scriptSetup){let i=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);i&&(e.script=i[1].trim())}let s=/<style([^>]*)>([\s\S]*?)<\/style>/g,p;for(;(p=s.exec(this.content))!==null;){let i={},Y=p[1].match(/(\w+)(?:="([^"]*)")?/g);if(Y)for(let me of Y){let[ye,Z]=me.split("=");i[ye.trim()]=Z?Z.replace(/"/g,""):""}e.styles.push({content:p[2].trim(),attrs:i})}return e}convertTemplate(e){let t=e;return t=t.replace(/v-for="([^"]*)"/g,'v-each="$1"'),t=t.replace(/:key=/g,"key="),t=t.replace(/v-model=/g,"v-model="),t}convertScript(e,t=!1){let r=e;return r=r.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),r}convertStyles(e){let t=[];for(let r of e){let s=Object.entries(r.attrs).map(([p,i])=>i?`${p}="${i}"`:p).join(" ");t.push(`<style${s?" "+s:""}>
2
+ ${r.content}
3
+ </style>`)}return t.join(`
4
+
5
+ `)}convert(){let e=this.parse(),t=[];if(e.template){let r=this.convertTemplate(e.template);t.push(`<template>
6
+ ${r}
7
+ </template>`)}if(e.scriptSetup){let r=this.convertScript(e.scriptSetup,!0);t.push(`<script setup>
8
+ ${r}
9
+ </script>`)}else if(e.script){let r=this.convertScript(e.script,!1);t.push(`<script>
10
+ ${r}
11
+ </script>`)}return e.styles.length>0&&t.push(this.convertStyles(e.styles)),t.join(`
12
+
13
+ `)}};function ne(n){return new l(n).convert()}var oe=require("@lytjs/core");function re(n,e){let t=(0,oe.createApp)(n,e);return{...t,use(r,...s){return typeof r=="function"?r(this,...s):r&&typeof r.install=="function"&&r.install(this,...s),this},mixin(r){return this},component(r,s){return s?(t.component(r,s),this):t.component(r)},directive(r,s){return s?this:null},provide(r,s){return t.provide(r,s),this}}}var f=require("@lytjs/component");function se(n){return n&&typeof n=="object"?(0,f.defineComponent)(n):typeof n=="function"?(0,f.defineComponent)({setup:n}):(0,f.defineComponent)(n)}var c=require("@lytjs/component"),ae=require("@lytjs/core"),ie=(0,c.defineComponent)({name:"KeepAlive",setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),pe=(0,c.defineComponent)({name:"Teleport",props:{to:{type:[String,Object],required:!0},disabled:Boolean},setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),ce=(0,c.defineComponent)({name:"Transition",props:{name:{type:String,default:"v"}},setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),le=(0,c.defineComponent)({name:"TransitionGroup",props:{tag:{type:String,default:"span"},name:{type:String,default:"v"}},setup(n,{slots:e}){return()=>{var t;return(0,ae.h)(n.tag,null,(t=e.default)==null?void 0:t.call(e))}}}),fe=(0,c.defineComponent)({name:"Suspense",setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}});var we=!1;function ue(n=!0){we=n}function de(){return{...X,version:"3.x (Compat)"}}0&&(module.exports={KeepAlive,Suspense,Teleport,Transition,TransitionGroup,VueSfcConverter,computed,convertVueSfcToLyt,createApp,createCompatVue,defineComponent,effect,getCurrentInstance,getCurrentScope,inject,isReactive,isReadonly,isRef,markRaw,nextTick,onActivated,onBeforeMount,onBeforeUnmount,onBeforeUpdate,onDeactivated,onErrorCaptured,onMounted,onRenderTracked,onRenderTriggered,onScopeDispose,onServerPrefetch,onUnmounted,onUpdated,provide,reactive,readonly,ref,shallowReactive,shallowRef,toRaw,toRef,toRefs,triggerRef,unref,useCompatMode,watch,watchEffect,watchPostEffect,watchSyncEffect});
package/dist/index.mjs ADDED
@@ -0,0 +1,13 @@
1
+ var te=Object.defineProperty;var ne=(n,e)=>{for(var t in e)te(n,t,{get:e[t],enumerable:!0})};var l={};ne(l,{computed:()=>A,effect:()=>D,getCurrentInstance:()=>Q,getCurrentScope:()=>X,inject:()=>I,isReactive:()=>M,isReadonly:()=>P,isRef:()=>v,markRaw:()=>U,nextTick:()=>b,onActivated:()=>N,onBeforeMount:()=>G,onBeforeUnmount:()=>W,onBeforeUpdate:()=>K,onDeactivated:()=>z,onErrorCaptured:()=>_,onMounted:()=>$,onRenderTracked:()=>L,onRenderTriggered:()=>q,onScopeDispose:()=>Y,onServerPrefetch:()=>H,onUnmounted:()=>V,onUpdated:()=>F,provide:()=>j,reactive:()=>C,readonly:()=>S,ref:()=>m,setCurrentInstance:()=>Ee,shallowReactive:()=>w,shallowRef:()=>y,toRaw:()=>T,toRef:()=>h,toRefs:()=>g,triggerRef:()=>R,unref:()=>x,watch:()=>E,watchEffect:()=>B,watchPostEffect:()=>O,watchSyncEffect:()=>k});import{ref as oe,shallowRef as re,isRef as se,unref as ae,toRef as ie,toRefs as pe,triggerRef as ce,reactive as le,readonly as fe,shallowReactive as ue,toRaw as de,isReactive as me,isReadonly as ye,computed as ve,watch as xe,watchEffect as c,effect as he,nextTick as ge}from"@lytjs/reactivity";import{provide as Re,inject as Ce,onMounted as Se,onUpdated as we,onUnmounted as Te,compositionOnBeforeMount as Me,onBeforeUpdate as Pe,onBeforeUnmount as Ue}from"@lytjs/component";var m=oe,y=re,v=se,x=ae,h=ie,g=pe,R=ce,C=le,S=fe,w=ue,T=de,M=me,P=ye;function U(n){return n.__v_skip=!0,n}var A=ve,E=xe,B=c;function O(n){return c(n,{flush:"post"})}function k(n){return c(n,{flush:"sync"})}var D=he,b=ge,j=Re,I=Ce,$=Se,F=we,V=Te,G=Me,K=Pe,W=Ue;function _(n){}function L(n){}function q(n){}function N(n){}function z(n){}function H(n){}var J=null,Ae=null;function Q(){return J}function Ee(n){J=n}function X(){return Ae}function Y(n){}var p=class{constructor(e){this.content=e}parse(){let e={template:null,script:null,scriptSetup:null,styles:[]},t=this.content.match(/<template[^>]*>([\s\S]*?)<\/template>/);t&&(e.template=t[1].trim());let o=this.content.match(/<script[^>]*setup[^>]*>([\s\S]*?)<\/script>/);if(o&&(e.scriptSetup=o[1].trim()),!e.scriptSetup){let s=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);s&&(e.script=s[1].trim())}let r=/<style([^>]*)>([\s\S]*?)<\/style>/g,a;for(;(a=r.exec(this.content))!==null;){let s={},u=a[1].match(/(\w+)(?:="([^"]*)")?/g);if(u)for(let Z of u){let[ee,d]=Z.split("=");s[ee.trim()]=d?d.replace(/"/g,""):""}e.styles.push({content:a[2].trim(),attrs:s})}return e}convertTemplate(e){let t=e;return t=t.replace(/v-for="([^"]*)"/g,'v-each="$1"'),t=t.replace(/:key=/g,"key="),t=t.replace(/v-model=/g,"v-model="),t}convertScript(e,t=!1){let o=e;return o=o.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),o}convertStyles(e){let t=[];for(let o of e){let r=Object.entries(o.attrs).map(([a,s])=>s?`${a}="${s}"`:a).join(" ");t.push(`<style${r?" "+r:""}>
2
+ ${o.content}
3
+ </style>`)}return t.join(`
4
+
5
+ `)}convert(){let e=this.parse(),t=[];if(e.template){let o=this.convertTemplate(e.template);t.push(`<template>
6
+ ${o}
7
+ </template>`)}if(e.scriptSetup){let o=this.convertScript(e.scriptSetup,!0);t.push(`<script setup>
8
+ ${o}
9
+ </script>`)}else if(e.script){let o=this.convertScript(e.script,!1);t.push(`<script>
10
+ ${o}
11
+ </script>`)}return e.styles.length>0&&t.push(this.convertStyles(e.styles)),t.join(`
12
+
13
+ `)}};function Be(n){return new p(n).convert()}import{createApp as Oe}from"@lytjs/core";function ke(n,e){let t=Oe(n,e);return{...t,use(o,...r){return typeof o=="function"?o(this,...r):o&&typeof o.install=="function"&&o.install(this,...r),this},mixin(o){return this},component(o,r){return r?(t.component(o,r),this):t.component(o)},directive(o,r){return r?this:null},provide(o,r){return t.provide(o,r),this}}}import{defineComponent as f}from"@lytjs/component";function De(n){return n&&typeof n=="object"?f(n):typeof n=="function"?f({setup:n}):f(n)}import{defineComponent as i}from"@lytjs/component";import{h as be}from"@lytjs/core";var je=i({name:"KeepAlive",setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),Ie=i({name:"Teleport",props:{to:{type:[String,Object],required:!0},disabled:Boolean},setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),$e=i({name:"Transition",props:{name:{type:String,default:"v"}},setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),Fe=i({name:"TransitionGroup",props:{tag:{type:String,default:"span"},name:{type:String,default:"v"}},setup(n,{slots:e}){return()=>{var t;return be(n.tag,null,(t=e.default)==null?void 0:t.call(e))}}}),Ve=i({name:"Suspense",setup(n,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}});var Ge=!1;function Ke(n=!0){Ge=n}function We(){return{...l,version:"3.x (Compat)"}}export{je as KeepAlive,Ve as Suspense,Ie as Teleport,$e as Transition,Fe as TransitionGroup,p as VueSfcConverter,A as computed,Be as convertVueSfcToLyt,ke as createApp,We as createCompatVue,De as defineComponent,D as effect,Q as getCurrentInstance,X as getCurrentScope,I as inject,M as isReactive,P as isReadonly,v as isRef,U as markRaw,b as nextTick,N as onActivated,G as onBeforeMount,W as onBeforeUnmount,K as onBeforeUpdate,z as onDeactivated,_ as onErrorCaptured,$ as onMounted,L as onRenderTracked,q as onRenderTriggered,Y as onScopeDispose,H as onServerPrefetch,V as onUnmounted,F as onUpdated,j as provide,C as reactive,S as readonly,m as ref,w as shallowReactive,y as shallowRef,T as toRaw,h as toRef,g as toRefs,R as triggerRef,x as unref,Ke as useCompatMode,E as watch,B as watchEffect,O as watchPostEffect,k as watchSyncEffect};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * vue-to-lyt CLI 工具
4
+ *
5
+ * 将 Vue 项目转换为 Lyt.js 项目
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=vue-to-lyt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue-to-lyt.d.ts","sourceRoot":"","sources":["../../../src/bin/vue-to-lyt.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 内置组件兼容层
3
+ *
4
+ * 提供与 Vue 3 兼容的内置组件
5
+ */
6
+ /**
7
+ * KeepAlive 组件
8
+ * @see https://vuejs.org/api/built-in-components.html#keepalive
9
+ */
10
+ export declare const KeepAlive: import("@lytjs/component").ComponentDefine;
11
+ /**
12
+ * Teleport 组件
13
+ * @see https://vuejs.org/api/built-in-components.html#teleport
14
+ */
15
+ export declare const Teleport: import("@lytjs/component").ComponentDefine;
16
+ /**
17
+ * Transition 组件
18
+ * @see https://vuejs.org/api/built-in-components.html#transition
19
+ */
20
+ export declare const Transition: import("@lytjs/component").ComponentDefine;
21
+ /**
22
+ * TransitionGroup 组件
23
+ * @see https://vuejs.org/api/built-in-components.html#transitiongroup
24
+ */
25
+ export declare const TransitionGroup: import("@lytjs/component").ComponentDefine;
26
+ /**
27
+ * Suspense 组件
28
+ * @see https://vuejs.org/api/built-in-components.html#suspense
29
+ */
30
+ export declare const Suspense: import("@lytjs/component").ComponentDefine;
31
+ //# sourceMappingURL=built-in-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-in-components.d.ts","sourceRoot":"","sources":["../../src/built-in-components.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;GAGG;AACH,eAAO,MAAM,SAAS,4CAKpB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,4CASnB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,4CAQrB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,4CAS1B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,QAAQ,4CAKnB,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 兼容模式工具
3
+ *
4
+ * 提供 Vue 3 兼容模式的相关工具
5
+ */
6
+ /**
7
+ * 启用 Vue 3 兼容模式
8
+ */
9
+ export declare function useCompatMode(enabled?: boolean): void;
10
+ /**
11
+ * 检查是否在 Vue 3 兼容模式下
12
+ */
13
+ export declare function isCompatMode(): boolean;
14
+ /**
15
+ * 创建兼容的 Vue 3 风格对象
16
+ */
17
+ export declare function createCompatVue(): any;
18
+ //# sourceMappingURL=compat-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compat-mode.d.ts","sourceRoot":"","sources":["../../src/compat-mode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,GAAG,CAKrC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * createApp 兼容层
3
+ *
4
+ * 提供与 Vue 3 兼容的 createApp API
5
+ */
6
+ import type { App } from './types';
7
+ /**
8
+ * 创建应用实例
9
+ * @see https://vuejs.org/api/application.html#createapp
10
+ */
11
+ export declare function createApp(rootComponent: any, rootProps?: any): App;
12
+ //# sourceMappingURL=create-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/create-app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAuC,MAAM,SAAS,CAAA;AAEvE;;;GAGG;AACH,wBAAgB,SAAS,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,GAAG,GAAG,CA0DlE"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * defineComponent 兼容层
3
+ *
4
+ * 提供与 Vue 3 兼容的 defineComponent API
5
+ */
6
+ import type { ComponentOptions, DefineComponent } from './types';
7
+ /**
8
+ * 定义组件
9
+ * @see https://vuejs.org/api/general.html#definecomponent
10
+ */
11
+ export declare function defineComponent<Props = any, RawBindings = any, D = any, C extends Record<string, any> = any, M extends Record<string, any> = any, Mixin extends ComponentOptions = any, Extends extends ComponentOptions = any, E extends Record<string, any> = any, EE extends string = string, I extends Record<string, any> = any, II extends string = string, S extends Record<string, any> = any, PP = Props>(options: any): DefineComponent;
12
+ //# sourceMappingURL=define-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-component.d.ts","sourceRoot":"","sources":["../../src/define-component.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAA;AAE9E;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,GAAG,GAAG,EACX,WAAW,GAAG,GAAG,EACjB,CAAC,GAAG,GAAG,EACP,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACnC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACnC,KAAK,SAAS,gBAAgB,GAAG,GAAG,EACpC,OAAO,SAAS,gBAAgB,GAAG,GAAG,EACtC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACnC,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACnC,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EACnC,EAAE,GAAG,KAAK,EACV,OAAO,EAAE,GAAG,GAAG,eAAe,CAc/B"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Lyt.js Vue 3 兼容层
3
+ *
4
+ * 提供与 Vue 3 完全兼容的 API,使 Vue 3 用户可以无缝迁移到 Lyt.js
5
+ *
6
+ * @module @lytjs/compat
7
+ */
8
+ export { ref, shallowRef, isRef, unref, toRef, toRefs, triggerRef, reactive, readonly, shallowReactive, toRaw, isReactive, isReadonly, markRaw, computed, watch, watchEffect, watchPostEffect, watchSyncEffect, effect, nextTick, provide, inject, onMounted, onUpdated, onUnmounted, onBeforeMount, onBeforeUpdate, onBeforeUnmount, onErrorCaptured, onRenderTracked, onRenderTriggered, onActivated, onDeactivated, onServerPrefetch, getCurrentInstance, getCurrentScope, onScopeDispose, } from './vue3-api';
9
+ export { convertVueSfcToLyt, VueSfcConverter, } from './sfc-converter';
10
+ export { createApp } from './create-app';
11
+ export { defineComponent } from './define-component';
12
+ export { KeepAlive, Teleport, Transition, TransitionGroup, Suspense, } from './built-in-components';
13
+ export type { Ref, ComputedRef, WritableComputedRef, Reactive, UnwrapRef, ComponentPublicInstance, SetupContext, ComponentOptions, DefineComponent, App, AppConfig, Plugin, Directive, } from './types';
14
+ export { createCompatVue, useCompatMode, } from './compat-mode';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,GAAG,EACH,UAAU,EACV,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,KAAK,EACL,UAAU,EACV,UAAU,EACV,OAAO,EACP,QAAQ,EACR,KAAK,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,kBAAkB,EAClB,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,eAAe,EACf,QAAQ,GACT,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,uBAAuB,EACvB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,GAAG,EACH,SAAS,EACT,MAAM,EACN,SAAS,GACV,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,eAAe,EACf,aAAa,GACd,MAAM,eAAe,CAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Vue SFC 转换器
3
+ *
4
+ * 将 Vue 的 .vue 文件转换为 Lyt.js 的 .lyt 文件
5
+ */
6
+ /**
7
+ * SFC 解析结果
8
+ */
9
+ interface SFCParseResult {
10
+ template: string | null;
11
+ script: string | null;
12
+ scriptSetup: string | null;
13
+ styles: Array<{
14
+ content: string;
15
+ attrs: Record<string, string>;
16
+ }>;
17
+ }
18
+ /**
19
+ * Vue SFC 转换器类
20
+ */
21
+ export declare class VueSfcConverter {
22
+ private content;
23
+ constructor(content: string);
24
+ /**
25
+ * 解析 Vue SFC
26
+ */
27
+ parse(): SFCParseResult;
28
+ /**
29
+ * 转换模板语法
30
+ */
31
+ convertTemplate(template: string): string;
32
+ /**
33
+ * 转换脚本
34
+ */
35
+ convertScript(script: string, isSetup?: boolean): string;
36
+ /**
37
+ * 转换样式
38
+ */
39
+ convertStyles(styles: SFCParseResult['styles']): string;
40
+ /**
41
+ * 执行完整转换
42
+ */
43
+ convert(): string;
44
+ }
45
+ /**
46
+ * 便捷函数:转换 Vue SFC 内容为 Lyt.js SFC
47
+ */
48
+ export declare function convertVueSfcToLyt(content: string): string;
49
+ export {};
50
+ //# sourceMappingURL=sfc-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfc-converter.d.ts","sourceRoot":"","sources":["../../src/sfc-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAA;CAClE;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,KAAK,IAAI,cAAc;IAiDvB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAqBzC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,MAAM;IAmB/D;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,MAAM;IAgBvD;;OAEG;IACH,OAAO,IAAI,MAAM;CAgClB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Vue 3 兼容类型定义
3
+ */
4
+ import type { Ref as LytRef, ComputedRef as LytComputedRef, WritableComputedRef as LytWritableComputedRef } from '@lytjs/reactivity';
5
+ /**
6
+ * Ref 类型
7
+ * @see https://vuejs.org/api/reactivity-core.html#ref
8
+ */
9
+ export type Ref<T = any> = LytRef<T>;
10
+ /**
11
+ * 计算属性类型(只读)
12
+ * @see https://vuejs.org/api/reactivity-core.html#computed
13
+ */
14
+ export type ComputedRef<T = any> = LytComputedRef<T>;
15
+ /**
16
+ * 可写计算属性类型
17
+ * @see https://vuejs.org/api/reactivity-core.html#computed
18
+ */
19
+ export type WritableComputedRef<T = any> = LytWritableComputedRef<T>;
20
+ /**
21
+ * 响应式对象类型
22
+ * @see https://vuejs.org/api/reactivity-core.html#reactive
23
+ */
24
+ export type Reactive<T = any> = T;
25
+ /**
26
+ * 解包 Ref 类型
27
+ * @see https://vuejs.org/api/reactivity-utilities.html#unref
28
+ */
29
+ export type UnwrapRef<T> = T extends Ref<infer V> ? V : T;
30
+ /**
31
+ * 组件公共实例类型
32
+ * @see https://vuejs.org/api/component-instance.html
33
+ */
34
+ export interface ComponentPublicInstance {
35
+ $el: any;
36
+ $data: any;
37
+ $props: any;
38
+ $attrs: any;
39
+ $slots: any;
40
+ $refs: any;
41
+ $parent: any;
42
+ $root: any;
43
+ $emit: (event: string, ...args: any[]) => void;
44
+ $forceUpdate: () => void;
45
+ $nextTick: (fn: () => void) => Promise<void>;
46
+ }
47
+ /**
48
+ * Setup 上下文类型
49
+ * @see https://vuejs.org/api/composition-api-setup.html#setup-context
50
+ */
51
+ export interface SetupContext {
52
+ attrs: Record<string, any>;
53
+ slots: Record<string, any>;
54
+ emit: (event: string, ...args: any[]) => void;
55
+ expose: (exposed?: Record<string, any>) => void;
56
+ }
57
+ /**
58
+ * 组件选项类型
59
+ * @see https://vuejs.org/api/options-state.html
60
+ */
61
+ export interface ComponentOptions {
62
+ name?: string;
63
+ props?: any;
64
+ emits?: any;
65
+ data?: () => object;
66
+ computed?: Record<string, any>;
67
+ methods?: Record<string, Function>;
68
+ watch?: Record<string, any>;
69
+ setup?: (props: any, ctx: SetupContext) => any;
70
+ render?: () => any;
71
+ template?: string;
72
+ components?: Record<string, any>;
73
+ directives?: Record<string, any>;
74
+ provide?: any;
75
+ inject?: any;
76
+ beforeCreate?: () => void;
77
+ created?: () => void;
78
+ beforeMount?: () => void;
79
+ mounted?: () => void;
80
+ beforeUpdate?: () => void;
81
+ updated?: () => void;
82
+ beforeUnmount?: () => void;
83
+ unmounted?: () => void;
84
+ errorCaptured?: (err: any, instance: any, info: string) => boolean | void;
85
+ }
86
+ /**
87
+ * defineComponent 返回类型
88
+ * @see https://vuejs.org/api/general.html#definecomponent
89
+ */
90
+ export type DefineComponent<Props = any, RawBindings = any, D = any, C extends ComputedOptions = ComputedOptions, M extends MethodOptions = MethodOptions, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, E extends EmitsOptions = {}, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string, S extends SlotsType = {}, PP = Props> = any;
91
+ /**
92
+ * 计算选项类型
93
+ */
94
+ export interface ComputedOptions {
95
+ [key: string]: ((...args: any[]) => any) | {
96
+ get?: (...args: any[]) => any;
97
+ set?: (v: any) => any;
98
+ };
99
+ }
100
+ /**
101
+ * 方法选项类型
102
+ */
103
+ export interface MethodOptions {
104
+ [key: string]: (...args: any[]) => any;
105
+ }
106
+ /**
107
+ * 组件混入选项类型
108
+ */
109
+ export type ComponentOptionsMixin = ComponentOptions;
110
+ /**
111
+ * 触发选项类型
112
+ */
113
+ export interface EmitsOptions {
114
+ [key: string]: ((...args: any[]) => any) | null;
115
+ }
116
+ /**
117
+ * 组件注入选项类型
118
+ */
119
+ export type ComponentInjectOptions = string[] | {
120
+ [key: string]: string | symbol | {
121
+ from?: string | symbol;
122
+ default?: any;
123
+ };
124
+ };
125
+ /**
126
+ * 插槽类型
127
+ */
128
+ export type SlotsType = {
129
+ [key: string]: any;
130
+ };
131
+ /**
132
+ * App 实例类型
133
+ * @see https://vuejs.org/api/application.html
134
+ */
135
+ export interface App {
136
+ config: AppConfig;
137
+ use(plugin: Plugin, ...options: any[]): this;
138
+ mixin(mixin: ComponentOptions): this;
139
+ component(name: string, component?: any): any;
140
+ directive(name: string, directive?: Directive): any;
141
+ mount(rootContainer: any, isHydrate?: boolean): ComponentPublicInstance;
142
+ unmount(): void;
143
+ provide<T>(key: string | symbol, value: T): this;
144
+ }
145
+ /**
146
+ * App 配置类型
147
+ * @see https://vuejs.org/api/application.html#app-config
148
+ */
149
+ export interface AppConfig {
150
+ errorHandler?: (err: any, instance: any, info: string) => void;
151
+ warnHandler?: (msg: string, instance: any, trace: string) => void;
152
+ performance?: boolean;
153
+ compilerOptions?: any;
154
+ globalProperties?: any;
155
+ }
156
+ /**
157
+ * 插件类型
158
+ * @see https://vuejs.org/guide/reusability/plugins.html
159
+ */
160
+ export type Plugin = ((app: App, ...options: any[]) => any) | {
161
+ install: (app: App, ...options: any[]) => any;
162
+ };
163
+ /**
164
+ * 指令类型
165
+ * @see https://vuejs.org/guide/reusability/custom-directives.html
166
+ */
167
+ export interface Directive {
168
+ created?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
169
+ beforeMount?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
170
+ mounted?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
171
+ beforeUpdate?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
172
+ updated?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
173
+ beforeUnmount?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
174
+ unmounted?: (el: any, binding: any, vnode: any, prevVnode: any) => void;
175
+ }
176
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Vue 3 兼容 API 实现
3
+ *
4
+ * 重新导出 Lyt.js 的响应式 API,并提供 Vue 3 特有的 API
5
+ */
6
+ import { ref as lytRef, shallowRef as lytShallowRef, isRef as lytIsRef, unref as lytUnref, toRef as lytToRef, toRefs as lytToRefs, triggerRef as lytTriggerRef, reactive as lytReactive, readonly as lytReadonly, shallowReactive as lytShallowReactive, toRaw as lytToRaw, isReactive as lytIsReactive, isReadonly as lytIsReadonly, computed as lytComputed, watch as lytWatch, watchEffect as lytWatchEffect, effect as lytEffect, nextTick as lytNextTick } from '@lytjs/reactivity';
7
+ import { provide as lytProvide, inject as lytInject, compositionOnBeforeMount as lytOnBeforeMount } from '@lytjs/component';
8
+ /**
9
+ * 创建响应式引用
10
+ * @see https://vuejs.org/api/reactivity-core.html#ref
11
+ */
12
+ export declare const ref: typeof lytRef;
13
+ /**
14
+ * 创建浅层响应式引用
15
+ * @see https://vuejs.org/api/reactivity-advanced.html#shallowref
16
+ */
17
+ export declare const shallowRef: typeof lytShallowRef;
18
+ /**
19
+ * 检查值是否为 Ref
20
+ * @see https://vuejs.org/api/reactivity-utilities.html#isref
21
+ */
22
+ export declare const isRef: typeof lytIsRef;
23
+ /**
24
+ * 解包 Ref
25
+ * @see https://vuejs.org/api/reactivity-utilities.html#unref
26
+ */
27
+ export declare const unref: typeof lytUnref;
28
+ /**
29
+ * 为对象属性创建 Ref
30
+ * @see https://vuejs.org/api/reactivity-utilities.html#toref
31
+ */
32
+ export declare const toRef: typeof lytToRef;
33
+ /**
34
+ * 将响应式对象转换为 Ref 对象
35
+ * @see https://vuejs.org/api/reactivity-utilities.html#torefs
36
+ */
37
+ export declare const toRefs: typeof lytToRefs;
38
+ /**
39
+ * 手动触发 Ref 更新
40
+ * @see https://vuejs.org/api/reactivity-advanced.html#triggerref
41
+ */
42
+ export declare const triggerRef: typeof lytTriggerRef;
43
+ /**
44
+ * 创建响应式代理
45
+ * @see https://vuejs.org/api/reactivity-core.html#reactive
46
+ */
47
+ export declare const reactive: typeof lytReactive;
48
+ /**
49
+ * 创建只读响应式代理
50
+ * @see https://vuejs.org/api/reactivity-core.html#readonly
51
+ */
52
+ export declare const readonly: typeof lytReadonly;
53
+ /**
54
+ * 创建浅层响应式代理
55
+ * @see https://vuejs.org/api/reactivity-advanced.html#shallowreactive
56
+ */
57
+ export declare const shallowReactive: typeof lytShallowReactive;
58
+ /**
59
+ * 获取原始对象
60
+ * @see https://vuejs.org/api/reactivity-advanced.html#toraw
61
+ */
62
+ export declare const toRaw: typeof lytToRaw;
63
+ /**
64
+ * 检查是否为响应式代理
65
+ * @see https://vuejs.org/api/reactivity-utilities.html#isreactive
66
+ */
67
+ export declare const isReactive: typeof lytIsReactive;
68
+ /**
69
+ * 检查是否为只读代理
70
+ * @see https://vuejs.org/api/reactivity-utilities.html#isreadonly
71
+ */
72
+ export declare const isReadonly: typeof lytIsReadonly;
73
+ /**
74
+ * 标记对象不进行响应式转换
75
+ * @see https://vuejs.org/api/reactivity-advanced.html#markraw
76
+ */
77
+ export declare function markRaw<T extends object>(value: T): T;
78
+ /**
79
+ * 创建计算属性
80
+ * @see https://vuejs.org/api/reactivity-core.html#computed
81
+ */
82
+ export declare const computed: typeof lytComputed;
83
+ /**
84
+ * 侦听响应式数据变化
85
+ * @see https://vuejs.org/api/reactivity-core.html#watch
86
+ */
87
+ export declare const watch: typeof lytWatch;
88
+ /**
89
+ * 侦听副作用
90
+ * @see https://vuejs.org/api/reactivity-core.html#watcheffect
91
+ */
92
+ export declare const watchEffect: typeof lytWatchEffect;
93
+ /**
94
+ * 侦听副作用(post 模式)
95
+ * @see https://vuejs.org/api/reactivity-core.html#watchposteffect
96
+ */
97
+ export declare function watchPostEffect(fn: (onCleanup: (cleanupFn: () => void) => void) => void): () => void;
98
+ /**
99
+ * 侦听副作用(sync 模式)
100
+ * @see https://vuejs.org/api/reactivity-core.html#watchsynceffect
101
+ */
102
+ export declare function watchSyncEffect(fn: (onCleanup: (cleanupFn: () => void) => void) => void): () => void;
103
+ /**
104
+ * 创建副作用
105
+ * @see https://vuejs.org/api/reactivity-advanced.html#effect
106
+ */
107
+ export declare const effect: typeof lytEffect;
108
+ /**
109
+ * 在下一个微任务中执行回调
110
+ * @see https://vuejs.org/api/general.html#nexttick
111
+ */
112
+ export declare const nextTick: typeof lytNextTick;
113
+ /**
114
+ * 提供依赖
115
+ * @see https://vuejs.org/api/composition-api-dependency-injection.html#provide
116
+ */
117
+ export declare const provide: typeof lytProvide;
118
+ /**
119
+ * 注入依赖
120
+ * @see https://vuejs.org/api/composition-api-dependency-injection.html#inject
121
+ */
122
+ export declare const inject: typeof lytInject;
123
+ /**
124
+ * 组件挂载后调用
125
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onmounted
126
+ */
127
+ export declare const onMounted: (callback: import("@lytjs/component").LifecycleHookCallback, target?: import("@lytjs/component").LifecycleInstance) => void;
128
+ /**
129
+ * 组件更新后调用
130
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onupdated
131
+ */
132
+ export declare const onUpdated: (callback: import("@lytjs/component").LifecycleHookCallback, target?: import("@lytjs/component").LifecycleInstance) => void;
133
+ /**
134
+ * 组件卸载前调用
135
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onunmounted
136
+ */
137
+ export declare const onUnmounted: (callback: import("@lytjs/component").LifecycleHookCallback, target?: import("@lytjs/component").LifecycleInstance) => void;
138
+ /**
139
+ * 组件挂载前调用
140
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onbeforemount
141
+ */
142
+ export declare const onBeforeMount: typeof lytOnBeforeMount;
143
+ /**
144
+ * 组件更新前调用
145
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onbeforeupdate
146
+ */
147
+ export declare const onBeforeUpdate: (callback: import("@lytjs/component").LifecycleHookCallback, target?: import("@lytjs/component").LifecycleInstance) => void;
148
+ /**
149
+ * 组件卸载前调用
150
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onbeforeunmount
151
+ */
152
+ export declare const onBeforeUnmount: (callback: import("@lytjs/component").LifecycleHookCallback, target?: import("@lytjs/component").LifecycleInstance) => void;
153
+ /**
154
+ * 捕获后代组件的错误
155
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onerrorcaptured
156
+ */
157
+ export declare function onErrorCaptured(fn: (err: any, instance: any, info: string) => boolean | void): void;
158
+ /**
159
+ * 响应式依赖被追踪时调用
160
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onrendertracked
161
+ */
162
+ export declare function onRenderTracked(fn: (event: any) => void): void;
163
+ /**
164
+ * 响应式依赖触发更新时调用
165
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onrendertriggered
166
+ */
167
+ export declare function onRenderTriggered(fn: (event: any) => void): void;
168
+ /**
169
+ * KeepAlive 组件激活时调用
170
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onactivated
171
+ */
172
+ export declare function onActivated(fn: () => void): void;
173
+ /**
174
+ * KeepAlive 组件停用时调用
175
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#ondeactivated
176
+ */
177
+ export declare function onDeactivated(fn: () => void): void;
178
+ /**
179
+ * 服务器端预取时调用
180
+ * @see https://vuejs.org/api/composition-api-lifecycle.html#onserverprefetch
181
+ */
182
+ export declare function onServerPrefetch(fn: () => Promise<any>): void;
183
+ /**
184
+ * 获取当前组件实例
185
+ * @see https://vuejs.org/api/composition-api-general.html#getcurrentinstance
186
+ */
187
+ export declare function getCurrentInstance(): any;
188
+ /**
189
+ * 设置当前组件实例(内部使用)
190
+ */
191
+ export declare function setCurrentInstance(instance: any): void;
192
+ /**
193
+ * 获取当前作用域
194
+ * @see https://vuejs.org/api/reactivity-advanced.html#getcurrentscope
195
+ */
196
+ export declare function getCurrentScope(): any;
197
+ /**
198
+ * 在当前作用域销毁时调用
199
+ * @see https://vuejs.org/api/reactivity-advanced.html#onscopedispose
200
+ */
201
+ export declare function onScopeDispose(fn: () => void): void;
202
+ //# sourceMappingURL=vue3-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue3-api.d.ts","sourceRoot":"","sources":["../../src/vue3-api.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@lytjs/compat",
3
+ "version": "4.2.0",
4
+ "description": "Lyt.js Vue 3 兼容层 - 提供与 Vue 3 兼容的 API 和工具",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/types/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.cjs",
13
+ "default": "./dist/index.mjs"
14
+ },
15
+ "./vite": {
16
+ "types": "./dist/types/vite.d.ts",
17
+ "import": "./dist/vite.mjs",
18
+ "require": "./dist/vite.cjs",
19
+ "default": "./dist/vite.mjs"
20
+ }
21
+ },
22
+ "bin": {
23
+ "vue-to-lyt": "./dist/bin/vue-to-lyt.js"
24
+ },
25
+ "sideEffects": false,
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "license": "MIT",
30
+ "author": "lytjs",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://gitee.com/lytjs/lytjs"
34
+ },
35
+ "homepage": "https://gitee.com/lytjs/lytjs",
36
+ "keywords": [
37
+ "lyt",
38
+ "lytjs",
39
+ "vue",
40
+ "vue3",
41
+ "compatibility",
42
+ "migration",
43
+ "frontend",
44
+ "framework"
45
+ ],
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "dependencies": {
50
+ "@lytjs/core": "^4.2.0",
51
+ "@lytjs/reactivity": "^4.2.0",
52
+ "@lytjs/component": "^4.2.0"
53
+ },
54
+ "devDependencies": {}
55
+ }