@lytjs/compat 5.0.1 → 6.4.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/dist/index.cjs +3 -20
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.mjs +2 -20
- package/dist/index.mjs.map +1 -0
- package/package.json +33 -29
- package/README.md +0 -314
- package/dist/bin/vue-to-lyt.cjs +0 -42
- package/dist/bin/vue-to-lyt.js +0 -2
- package/dist/bin/vue-to-lyt.mjs +0 -42
- package/dist/types/bin/vue-to-lyt.d.ts +0 -8
- package/dist/types/bin/vue-to-lyt.d.ts.map +0 -1
- package/dist/types/built-in-components.d.ts +0 -31
- package/dist/types/built-in-components.d.ts.map +0 -1
- package/dist/types/compat-mode.d.ts +0 -18
- package/dist/types/compat-mode.d.ts.map +0 -1
- package/dist/types/create-app.d.ts +0 -12
- package/dist/types/create-app.d.ts.map +0 -1
- package/dist/types/define-component.d.ts +0 -12
- package/dist/types/define-component.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -17
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/migrate.d.ts +0 -86
- package/dist/types/migrate.d.ts.map +0 -1
- package/dist/types/sfc-converter.d.ts +0 -92
- package/dist/types/sfc-converter.d.ts.map +0 -1
- package/dist/types/types.d.ts +0 -220
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/vue3-api.d.ts +0 -278
- package/dist/types/vue3-api.d.ts.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,21 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
`),t=t.replace(/const\s+\w+\s*=\s*defineEmits\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineEmits \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 defineComponent({ emits: [...] }) \u4E2D\u5B9A\u4E49
|
|
3
|
-
`),t=t.replace(/defineExpose\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineExpose \u5DF2\u79FB\u9664\uFF0Csetup \u8FD4\u56DE\u503C\u81EA\u52A8\u66B4\u9732
|
|
4
|
-
`),t=t.replace(/const\s+\w+\s*=\s*withDefaults\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] withDefaults \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 props \u9009\u9879\u4E2D\u4F7F\u7528 default
|
|
5
|
-
`),t}convertStyles(e){let t=[];for(let o of e){let n=Object.entries(o.attrs).map(([r,p])=>p?`${r}="${p}"`:r).join(" ");o.attrs.module!==void 0&&this.addWarning("feature","CSS Modules \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301","\u4F7F\u7528 scoped \u6837\u5F0F\u66FF\u4EE3"),t.push(`<style${n?" "+n:""}>
|
|
6
|
-
${o.content}
|
|
7
|
-
</style>`)}return t.join(`
|
|
1
|
+
'use strict';
|
|
8
2
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</template>`)}if(e.scriptSetup){let o=this.convertScript(e.scriptSetup,!0);t.push(`<script setup>
|
|
12
|
-
${o}
|
|
13
|
-
</script>`)}else if(e.script){let o=this.convertScript(e.script,!1);t.push(`<script>
|
|
14
|
-
${o}
|
|
15
|
-
</script>`)}e.styles.length>0&&t.push(this.convertStyles(e.styles));for(let o of e.customBlocks){let n=Object.entries(o.attrs).map(([r,p])=>p?`${r}="${p}"`:r).join(" ");t.push(`<${o.tag}${n?" "+n:""}>
|
|
16
|
-
${o.content}
|
|
17
|
-
</${o.tag}>`)}return t.join(`
|
|
18
|
-
|
|
19
|
-
`)}convertWithWarnings(){return this.warnings=[],{code:this.convert(),warnings:this.warnings}}};function Te(i){return new u(i).convert()}function x(i){return new u(i).convertWithWarnings()}var je=require("@lytjs/core");function Me(i,e){let t=(0,je.createApp)(i,e);return{...t,use(o,...n){return typeof o=="function"?o(this,...n):o&&typeof o.install=="function"&&o.install(this,...n),this},mixin(o){return this},component(o,n){return n?(t.component(o,n),this):t.component(o)},directive(o,n){return n?this:null},provide(o,n){return t.provide(o,n),this}}}var C=require("@lytjs/component");function be(i){return i&&typeof i=="object"?(0,C.defineComponent)(i):typeof i=="function"?(0,C.defineComponent)({setup:i}):(0,C.defineComponent)(i)}var $e=require("@lytjs/component"),Ae=require("@lytjs/core"),g=$e.defineComponent,ke=g({name:"KeepAlive",setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),Ee=g({name:"Teleport",props:{to:{type:[String,Object],required:!0},disabled:Boolean},setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),Pe=g({name:"Transition",props:{name:{type:String,default:"v"}},setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),Ie=g({name:"TransitionGroup",props:{tag:{type:String,default:"span"},name:{type:String,default:"v"}},setup(i,{slots:e}){return()=>{var t;return(0,Ae.h)(i.tag,null,(t=e.default)==null?void 0:t.call(e))}}}),De=g({name:"Suspense",setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}});var Qe=!1;function We(i=!0){Qe=i}function Le(){return{...ve,version:"3.x (Compat)"}}function Ue(i){let e=[],t=i.split(`
|
|
20
|
-
`);for(let o=0;o<t.length;o++){let n=t[o],r=o+1;/from\s+['"]vue['"]/.test(n)&&e.push({type:"import",severity:"warning",description:'\u4ECE "vue" \u5BFC\u5165\u9700\u8981\u66FF\u6362\u4E3A "@lytjs/compat"',suggestion:'\u5C06 from "vue" \u66FF\u6362\u4E3A from "@lytjs/compat"',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vue['"]/,"from '@lytjs/compat'")}),/from\s+['"]vue-router['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"vue-router \u9700\u8981\u66FF\u6362\u4E3A @lytjs/router",suggestion:'\u5C06 from "vue-router" \u66FF\u6362\u4E3A from "@lytjs/router"',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vue-router['"]/,"from '@lytjs/router'")}),/from\s+['"]pinia['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"Pinia \u9700\u8981\u66FF\u6362\u4E3A @lytjs/store",suggestion:'\u5C06 from "pinia" \u66FF\u6362\u4E3A from "@lytjs/store"\uFF0C\u5E76\u8C03\u6574 API \u8C03\u7528',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]pinia['"]/,"from '@lytjs/store'")}),/from\s+['"]vuex['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"Vuex \u9700\u8981\u66FF\u6362\u4E3A @lytjs/store",suggestion:'\u5C06 from "vuex" \u66FF\u6362\u4E3A from "@lytjs/store"\uFF0C\u5E76\u8C03\u6574 API \u8C03\u7528',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vuex['"]/,"from '@lytjs/store'")}),/v-for=/.test(n)&&e.push({type:"directive",severity:"warning",description:"v-for \u9700\u8981\u8F6C\u6362\u4E3A v-each",suggestion:'\u5C06 v-for="..." \u66FF\u6362\u4E3A v-each="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-for=/,"v-each=")}),/v-if=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-if \u9700\u8981\u8F6C\u6362\u4E3A if",suggestion:'\u5C06 v-if="..." \u66FF\u6362\u4E3A if="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-if=/,"if=")}),/v-else-if=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-else-if \u9700\u8981\u8F6C\u6362\u4E3A else-if",suggestion:'\u5C06 v-else-if="..." \u66FF\u6362\u4E3A else-if="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-else-if=/,"else-if=")}),/\bv-else\b/.test(n)&&e.push({type:"directive",severity:"info",description:"v-else \u9700\u8981\u8F6C\u6362\u4E3A else",suggestion:"\u5C06 v-else \u66FF\u6362\u4E3A else",line:r,original:n.trim(),replacement:n.trim().replace(/\bv-else\b/,"else")}),/v-show=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-show \u9700\u8981\u8F6C\u6362\u4E3A show",suggestion:'\u5C06 v-show="..." \u66FF\u6362\u4E3A show="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-show=/,"show=")}),/v-model/.test(n)&&e.push({type:"directive",severity:"info",description:"v-model \u9700\u8981\u8F6C\u6362\u4E3A model",suggestion:'\u5C06 v-model="..." \u66FF\u6362\u4E3A model="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-model/,"model")}),/v-on:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-on: \u9700\u8981\u8F6C\u6362\u4E3A on:",suggestion:'\u5C06 v-on:click="..." \u66FF\u6362\u4E3A on:click="..." \u6216 @click="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-on:/,"on:")}),/v-bind:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-bind: \u53EF\u4EE5\u7B80\u5199\u4E3A :",suggestion:'\u5C06 v-bind:attr="..." \u66FF\u6362\u4E3A :attr="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-bind:/,":")}),/v-slot:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-slot: \u9700\u8981\u8F6C\u6362\u4E3A slot:",suggestion:"\u5C06 v-slot:name \u66FF\u6362\u4E3A slot:name \u6216 #name",line:r,original:n.trim(),replacement:n.trim().replace(/v-slot:/,"slot:")}),/v-html=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-html \u9700\u8981\u8F6C\u6362\u4E3A html",suggestion:'\u5C06 v-html="..." \u66FF\u6362\u4E3A html="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-html=/,"html=")}),/v-text=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-text \u9700\u8981\u8F6C\u6362\u4E3A text",suggestion:'\u5C06 v-text="..." \u66FF\u6362\u4E3A text="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-text=/,"text=")}),/v-memo/.test(n)&&e.push({type:"feature",severity:"error",description:"v-memo \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 computed \u5C5E\u6027\u66FF\u4EE3\u624B\u52A8\u7F13\u5B58\u903B\u8F91",line:r,original:n.trim()}),/\$refs/.test(n)&&e.push({type:"api",severity:"warning",description:"$refs \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 ref() \u548C\u6A21\u677F ref \u5C5E\u6027\u66FF\u4EE3",line:r,original:n.trim()}),/\$emit/.test(n)&&e.push({type:"api",severity:"warning",description:"$emit \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 setup \u4E0A\u4E0B\u6587\u4E2D\u7684 emit \u51FD\u6570\u66FF\u4EE3",line:r,original:n.trim()}),/\$el/.test(n)&&e.push({type:"api",severity:"warning",description:"$el \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 template ref \u66FF\u4EE3",line:r,original:n.trim()}),/\$parent/.test(n)&&e.push({type:"api",severity:"warning",description:"$parent \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 provide/inject \u66FF\u4EE3",line:r,original:n.trim()}),/\$children/.test(n)&&e.push({type:"api",severity:"error",description:"$children \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 provide/inject \u6216\u4E8B\u4EF6\u603B\u7EBF\u66FF\u4EE3",line:r,original:n.trim()}),/\$forceUpdate/.test(n)&&e.push({type:"api",severity:"warning",description:"$forceUpdate \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981",suggestion:"Lyt.js \u7684\u54CD\u5E94\u5F0F\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u89E6\u53D1\u66F4\u65B0",line:r,original:n.trim()}),/\$nextTick/.test(n)&&e.push({type:"api",severity:"info",description:"$nextTick \u9700\u8981\u66FF\u6362\u4E3A\u72EC\u7ACB\u7684 nextTick \u51FD\u6570",suggestion:'import { nextTick } from "@lytjs/compat"',line:r,original:n.trim()}),/defineProps/.test(n)&&e.push({type:"api",severity:"warning",description:"defineProps \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362",suggestion:"\u5728 defineComponent({ props: {...} }) \u4E2D\u5B9A\u4E49 props",line:r,original:n.trim()}),/defineEmits/.test(n)&&e.push({type:"api",severity:"warning",description:"defineEmits \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362",suggestion:"\u5728 defineComponent({ emits: [...] }) \u4E2D\u5B9A\u4E49 emits",line:r,original:n.trim()}),/defineExpose/.test(n)&&e.push({type:"api",severity:"info",description:"defineExpose \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981",suggestion:"setup \u8FD4\u56DE\u503C\u81EA\u52A8\u66B4\u9732\u4E3A\u516C\u5171\u5C5E\u6027",line:r,original:n.trim()}),/<style[^>]*module/.test(n)&&e.push({type:"style",severity:"error",description:"CSS Modules \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 scoped \u6837\u5F0F\u66FF\u4EE3",line:r,original:n.trim()}),/<Teleport/.test(n)&&e.push({type:"component",severity:"info",description:"Teleport \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 Teleport",line:r}),/<Suspense/.test(n)&&e.push({type:"component",severity:"info",description:"Suspense \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 Suspense",line:r}),/<KeepAlive/.test(n)&&e.push({type:"component",severity:"info",description:"KeepAlive \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 KeepAlive",line:r})}return e}function Xe(i){if(i.length===0)return 100;let e=100;for(let t of i)switch(t.severity){case"error":e-=15;break;case"warning":e-=5;break;case"info":e-=1;break}return Math.max(0,Math.min(100,e))}function Ye(i){let e=[],t=new Set;for(let o of i)if(o.severity==="error"||o.severity==="warning"){let n=`${o.type}:${o.description}`;t.has(n)||(t.add(n),e.push(`- [${o.severity.toUpperCase()}] ${o.description}: ${o.suggestion}`))}return e}function Be(i){let e=x(i),t=Ue(i);for(let p of e.warnings)t.push({type:p.type,severity:"warning",description:p.message,suggestion:p.suggestion||""});let o=t.filter(p=>p.severity==="error").length,n=t.filter(p=>p.severity==="warning").length,r=t.filter(p=>p.severity==="info").length;return{code:e.code,issues:t,errorCount:o,warningCount:n,infoCount:r,compatibilityScore:Xe(t),manualFixes:Ye(t)}}function Fe(i){return Ue(i)}function Oe(i){let e=[];if(e.push("========================================"),e.push(" Vue 3 -> Lyt.js \u8FC1\u79FB\u62A5\u544A"),e.push("========================================"),e.push(""),e.push(`\u517C\u5BB9\u6027\u8BC4\u5206: ${i.compatibilityScore}/100`),i.compatibilityScore>=80?e.push("\u8FC1\u79FB\u96BE\u5EA6: \u4F4E - \u5927\u90E8\u5206\u4EE3\u7801\u53EF\u4EE5\u81EA\u52A8\u8F6C\u6362"):i.compatibilityScore>=50?e.push("\u8FC1\u79FB\u96BE\u5EA6: \u4E2D - \u9700\u8981\u4E00\u4E9B\u624B\u52A8\u8C03\u6574"):e.push("\u8FC1\u79FB\u96BE\u5EA6: \u9AD8 - \u9700\u8981\u5927\u91CF\u624B\u52A8\u4FEE\u6539"),e.push(""),e.push("\u95EE\u9898\u7EDF\u8BA1:"),e.push(` \u9519\u8BEF: ${i.errorCount}`),e.push(` \u8B66\u544A: ${i.warningCount}`),e.push(` \u4FE1\u606F: ${i.infoCount}`),e.push(""),i.manualFixes.length>0){e.push("\u9700\u8981\u624B\u52A8\u4FEE\u6539\u7684\u90E8\u5206:");for(let t of i.manualFixes)e.push(` ${t}`);e.push("")}if(i.issues.length>0){e.push("\u8BE6\u7EC6\u95EE\u9898\u5217\u8868:"),e.push("");let t=new Map;for(let n of i.issues){let r=t.get(n.type)||[];r.push(n),t.set(n.type,r)}let o={import:"\u5BFC\u5165\u8BED\u53E5",directive:"\u6307\u4EE4\u8BED\u6CD5",lifecycle:"\u751F\u547D\u5468\u671F",api:"API \u5DEE\u5F02",component:"\u7EC4\u4EF6",style:"\u6837\u5F0F",feature:"\u4E0D\u652F\u6301\u7684\u529F\u80FD",ecosystem:"\u751F\u6001\u7CFB\u7EDF"};for(let[n,r]of t){e.push(` [${o[n]}]`);for(let p of r){let w=p.line?` (\u884C ${p.line})`:"";e.push(` ${p.severity.toUpperCase()}: ${p.description}${w}`),e.push(` \u5EFA\u8BAE: ${p.suggestion}`)}e.push("")}}return e.push("========================================"),e.join(`
|
|
21
|
-
`)}0&&(module.exports={Fragment,KeepAlive,Suspense,Teleport,Transition,TransitionGroup,VueSfcConverter,analyzeVueFile,computed,convertVueSfcToLyt,convertVueSfcToLytWithWarnings,createApp,createCompatVue,defineAsyncComponent,defineComponent,defineEmits,defineExpose,defineProps,effect,formatMigrationReport,getCurrentInstance,getCurrentScope,h,inject,isProxy,isReactive,isReadonly,isRef,markRaw,migrateVueFile,nextTick,onActivated,onBeforeMount,onBeforeUnmount,onBeforeUpdate,onDeactivated,onErrorCaptured,onMounted,onRenderTracked,onRenderTriggered,onScopeDispose,onServerPrefetch,onUnmounted,onUpdated,provide,proxyRefs,reactive,readonly,ref,shallowReactive,shallowRef,toRaw,toRef,toRefs,triggerRef,unref,useAttrs,useCompatMode,useSlots,useTemplateRef,watch,watchEffect,watchPostEffect,watchSyncEffect,withDefaults});
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
4
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED
package/dist/index.mjs
CHANGED
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
var Re=Object.defineProperty;var Se=(i,e)=>{for(var t in e)Re(i,t,{get:e[t],enumerable:!0})};var h={};Se(h,{Fragment:()=>ae,computed:()=>L,defineAsyncComponent:()=>ce,defineEmits:()=>ue,defineExpose:()=>me,defineProps:()=>le,effect:()=>V,getCurrentInstance:()=>oe,getCurrentScope:()=>re,h:()=>pe,inject:()=>G,isProxy:()=>ve,isReactive:()=>y,isReadonly:()=>v,isRef:()=>M,markRaw:()=>W,nextTick:()=>K,onActivated:()=>ee,onBeforeMount:()=>H,onBeforeUnmount:()=>Q,onBeforeUpdate:()=>J,onDeactivated:()=>te,onErrorCaptured:()=>X,onMounted:()=>N,onRenderTracked:()=>Y,onRenderTriggered:()=>Z,onScopeDispose:()=>se,onServerPrefetch:()=>ne,onUnmounted:()=>q,onUpdated:()=>_,provide:()=>z,proxyRefs:()=>he,reactive:()=>E,readonly:()=>P,ref:()=>T,setCurrentInstance:()=>et,shallowReactive:()=>I,shallowRef:()=>j,toRaw:()=>D,toRef:()=>$,toRefs:()=>A,triggerRef:()=>k,unref:()=>b,useAttrs:()=>de,useSlots:()=>ge,useTemplateRef:()=>ye,watch:()=>U,watchEffect:()=>B,watchPostEffect:()=>F,watchSyncEffect:()=>O,withDefaults:()=>fe});import{ref as Te,shallowRef as je,isRef as Me,unref as be,toRef as $e,toRefs as Ae,triggerRef as ke,reactive as Ee,readonly as Pe,shallowReactive as Ie,toRaw as De,isReactive as We,isReadonly as Le,computed as Ue,watch as Be,watchEffect as d,effect as Fe,nextTick as Oe}from"@lytjs/reactivity";import{provide as Ve,inject as Ke,onMounted as ze,onUpdated as Ge,onUnmounted as Ne,compositionOnBeforeMount as _e,onBeforeUpdate as qe,onBeforeUnmount as He,defineEmits as Je}from"@lytjs/component";import{h as Qe,Fragment as Xe}from"@lytjs/core";import{defineAsyncComponent as Ye}from"@lytjs/component/builtins/async-component";var T=Te,j=je,M=Me,b=be,$=$e,A=Ae,k=ke,E=Ee,P=Pe,I=Ie,D=De,y=We,v=Le;function W(i){return i.__v_skip=!0,i}var L=Ue,U=Be,B=d;function F(i){return d(i,{flush:"post"})}function O(i){return d(i,{flush:"sync"})}var V=Fe,K=Oe,z=Ve,G=Ke,N=ze,_=Ge,q=Ne,H=_e,J=qe,Q=He;function X(i){}function Y(i){}function Z(i){}function ee(i){}function te(i){}function ne(i){}var ie=null,Ze=null;function oe(){return ie}function et(i){ie=i}function re(){return Ze}function se(i){}var pe=Qe,ae=Xe,ce=Ye;function le(){return{}}var ue=Je;function fe(i,e){return{...i,...e}}function me(i){}function ge(){return{}}function de(){return{}}function ye(i){return{value:null}}function ve(i){return y(i)||v(i)}function he(i){return i}var u=class{constructor(e){this.warnings=[];this.content=e}getWarnings(){return[...this.warnings]}addWarning(e,t,o){this.warnings.push({type:e,message:t,suggestion:o})}parse(){let e={template:null,script:null,scriptSetup:null,styles:[],customBlocks:[]},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 p=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);p&&(e.script=p[1].trim())}let n=/<style([^>]*)>([\s\S]*?)<\/style>/g,r;for(;(r=n.exec(this.content))!==null;){let p={},c=r[1].match(/(\w+)(?:="([^"]*)")?/g);if(c)for(let a of c){let[m,l]=a.split("=");p[m.trim()]=l?l.replace(/"/g,""):""}e.styles.push({content:r[2].trim(),attrs:p})}let s=/<(template|script|style)([^>]*)>([\s\S]*?)<\/\1>/g,g=this.content.match(/<(\w+)([^>]*)>([\s\S]*?)<\/\1>/g)||[];for(let p of g){let c=p.match(/^<(\w+)/);if(!c)continue;let a=c[1];if(["template","script","style"].includes(a))continue;let m=p.match(new RegExp(`^<${a}[^>]*>([\\s\\S]*?)</${a}>$`));if(!m)continue;let l={},w=p.match(new RegExp(`^<${a}([^>]*)>`));if(w){let R=w[1].match(/(\w+)(?:="([^"]*)")?/g);if(R)for(let Ce of R){let[we,S]=Ce.split("=");l[we.trim()]=S?S.replace(/"/g,""):""}}e.customBlocks.push({tag:a,content:m[1].trim(),attrs:l})}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-if=/g,"if="),t=t.replace(/v-else-if=/g,"else-if="),t=t.replace(/v-else/g,"else"),t=t.replace(/v-show=/g,"show="),t=t.replace(/v-html=/g,"html="),t=t.replace(/v-text=/g,"text="),t=t.replace(/\bv-once\b/g,"once"),t=t.replace(/\bv-pre\b/g,"pre"),t=t.replace(/\bv-cloak\b/g,"cloak"),t=t.replace(/v-slot:/g,"slot:"),t=t.replace(/v-on:/g,"on:"),t=t.replace(/v-model\.(\w+)="/g,'model.$1="'),t=t.replace(/v-model="/g,'model="'),t=t.replace(/v-bind:/g,":"),/v-memo/.test(t)&&(this.addWarning("directive","v-memo \u6307\u4EE4\u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301","\u4F7F\u7528 computed \u5C5E\u6027\u66FF\u4EE3\u624B\u52A8\u7F13\u5B58"),t=t.replace(/\s*v-memo="[^"]*"/g,"")),/v-is/.test(t)&&(this.addWarning("directive","v-is \u52A8\u6001\u7EC4\u4EF6\u8BED\u6CD5\u5728 Lyt.js \u4E2D\u53EF\u80FD\u9700\u8981\u8C03\u6574","\u4F7F\u7528 :is \u5C5E\u6027\u66FF\u4EE3 v-is"),t=t.replace(/v-is=/g,":is=")),t}convertScript(e,t=!1){let o=e;return o=o.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),o=o.replace(/from\s+['"]vue-router['"]/g,"from '@lytjs/router'"),o=o.replace(/from\s+['"]pinia['"]/g,"from '@lytjs/store'"),o=o.replace(/from\s+['"]vuex['"]/g,"from '@lytjs/store'"),t&&(/defineProps/.test(o)&&this.addWarning("api","defineProps \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362\u4E3A defineComponent({ props: {...} })","\u5728 Lyt.js \u4E2D\u4F7F\u7528 defineComponent \u7684 props \u9009\u9879"),/defineEmits/.test(o)&&this.addWarning("api","defineEmits \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362\u4E3A defineComponent({ emits: {...} })","\u5728 Lyt.js \u4E2D\u4F7F\u7528 defineComponent \u7684 emits \u9009\u9879"),/defineExpose/.test(o)&&this.addWarning("api","defineExpose \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981","\u5728 Lyt.js \u4E2D setup \u8FD4\u56DE\u7684\u5BF9\u8C61\u81EA\u52A8\u66B4\u9732\u4E3A\u516C\u5171\u5C5E\u6027"),/withDefaults/.test(o)&&this.addWarning("api","withDefaults \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362","\u5728 defineComponent \u7684 props \u9009\u9879\u4E2D\u4F7F\u7528 default \u5B57\u6BB5"),/useSlots/.test(o)&&this.addWarning("api","useSlots \u5728 Lyt.js \u4E2D\u9700\u8981\u901A\u8FC7 setup \u4E0A\u4E0B\u6587\u8BBF\u95EE","\u4F7F\u7528 setup(props, { slots }) \u8BBF\u95EE\u63D2\u69FD"),/useAttrs/.test(o)&&this.addWarning("api","useAttrs \u5728 Lyt.js \u4E2D\u9700\u8981\u901A\u8FC7 setup \u4E0A\u4E0B\u6587\u8BBF\u95EE","\u4F7F\u7528 setup(props, { attrs }) \u8BBF\u95EE attrs"),o=this.convertScriptSetupToSetup(o)),o}convertScriptSetupToSetup(e){let t=e;return t=t.replace(/const\s+\w+\s*=\s*defineProps\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineProps \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 defineComponent({ props: {...} }) \u4E2D\u5B9A\u4E49
|
|
2
|
-
`),t=t.replace(/const\s+\w+\s*=\s*defineEmits\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineEmits \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 defineComponent({ emits: [...] }) \u4E2D\u5B9A\u4E49
|
|
3
|
-
`),t=t.replace(/defineExpose\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineExpose \u5DF2\u79FB\u9664\uFF0Csetup \u8FD4\u56DE\u503C\u81EA\u52A8\u66B4\u9732
|
|
4
|
-
`),t=t.replace(/const\s+\w+\s*=\s*withDefaults\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] withDefaults \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 props \u9009\u9879\u4E2D\u4F7F\u7528 default
|
|
5
|
-
`),t}convertStyles(e){let t=[];for(let o of e){let n=Object.entries(o.attrs).map(([r,s])=>s?`${r}="${s}"`:r).join(" ");o.attrs.module!==void 0&&this.addWarning("feature","CSS Modules \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301","\u4F7F\u7528 scoped \u6837\u5F0F\u66FF\u4EE3"),t.push(`<style${n?" "+n:""}>
|
|
6
|
-
${o.content}
|
|
7
|
-
</style>`)}return t.join(`
|
|
8
1
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
</template>`)}if(e.scriptSetup){let o=this.convertScript(e.scriptSetup,!0);t.push(`<script setup>
|
|
12
|
-
${o}
|
|
13
|
-
</script>`)}else if(e.script){let o=this.convertScript(e.script,!1);t.push(`<script>
|
|
14
|
-
${o}
|
|
15
|
-
</script>`)}e.styles.length>0&&t.push(this.convertStyles(e.styles));for(let o of e.customBlocks){let n=Object.entries(o.attrs).map(([r,s])=>s?`${r}="${s}"`:r).join(" ");t.push(`<${o.tag}${n?" "+n:""}>
|
|
16
|
-
${o.content}
|
|
17
|
-
</${o.tag}>`)}return t.join(`
|
|
18
|
-
|
|
19
|
-
`)}convertWithWarnings(){return this.warnings=[],{code:this.convert(),warnings:this.warnings}}};function tt(i){return new u(i).convert()}function x(i){return new u(i).convertWithWarnings()}import{createApp as nt}from"@lytjs/core";function it(i,e){let t=nt(i,e);return{...t,use(o,...n){return typeof o=="function"?o(this,...n):o&&typeof o.install=="function"&&o.install(this,...n),this},mixin(o){return this},component(o,n){return n?(t.component(o,n),this):t.component(o)},directive(o,n){return n?this:null},provide(o,n){return t.provide(o,n),this}}}import{defineComponent as C}from"@lytjs/component";function ot(i){return i&&typeof i=="object"?C(i):typeof i=="function"?C({setup:i}):C(i)}import{defineComponent as rt}from"@lytjs/component";import{h as st}from"@lytjs/core";var f=rt,pt=f({name:"KeepAlive",setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),at=f({name:"Teleport",props:{to:{type:[String,Object],required:!0},disabled:Boolean},setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),ct=f({name:"Transition",props:{name:{type:String,default:"v"}},setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}}),lt=f({name:"TransitionGroup",props:{tag:{type:String,default:"span"},name:{type:String,default:"v"}},setup(i,{slots:e}){return()=>{var t;return st(i.tag,null,(t=e.default)==null?void 0:t.call(e))}}}),ut=f({name:"Suspense",setup(i,{slots:e}){return()=>{var t;return(t=e.default)==null?void 0:t.call(e)}}});var ft=!1;function mt(i=!0){ft=i}function gt(){return{...h,version:"3.x (Compat)"}}function xe(i){let e=[],t=i.split(`
|
|
20
|
-
`);for(let o=0;o<t.length;o++){let n=t[o],r=o+1;/from\s+['"]vue['"]/.test(n)&&e.push({type:"import",severity:"warning",description:'\u4ECE "vue" \u5BFC\u5165\u9700\u8981\u66FF\u6362\u4E3A "@lytjs/compat"',suggestion:'\u5C06 from "vue" \u66FF\u6362\u4E3A from "@lytjs/compat"',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vue['"]/,"from '@lytjs/compat'")}),/from\s+['"]vue-router['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"vue-router \u9700\u8981\u66FF\u6362\u4E3A @lytjs/router",suggestion:'\u5C06 from "vue-router" \u66FF\u6362\u4E3A from "@lytjs/router"',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vue-router['"]/,"from '@lytjs/router'")}),/from\s+['"]pinia['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"Pinia \u9700\u8981\u66FF\u6362\u4E3A @lytjs/store",suggestion:'\u5C06 from "pinia" \u66FF\u6362\u4E3A from "@lytjs/store"\uFF0C\u5E76\u8C03\u6574 API \u8C03\u7528',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]pinia['"]/,"from '@lytjs/store'")}),/from\s+['"]vuex['"]/.test(n)&&e.push({type:"ecosystem",severity:"warning",description:"Vuex \u9700\u8981\u66FF\u6362\u4E3A @lytjs/store",suggestion:'\u5C06 from "vuex" \u66FF\u6362\u4E3A from "@lytjs/store"\uFF0C\u5E76\u8C03\u6574 API \u8C03\u7528',line:r,original:n.trim(),replacement:n.trim().replace(/from\s+['"]vuex['"]/,"from '@lytjs/store'")}),/v-for=/.test(n)&&e.push({type:"directive",severity:"warning",description:"v-for \u9700\u8981\u8F6C\u6362\u4E3A v-each",suggestion:'\u5C06 v-for="..." \u66FF\u6362\u4E3A v-each="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-for=/,"v-each=")}),/v-if=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-if \u9700\u8981\u8F6C\u6362\u4E3A if",suggestion:'\u5C06 v-if="..." \u66FF\u6362\u4E3A if="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-if=/,"if=")}),/v-else-if=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-else-if \u9700\u8981\u8F6C\u6362\u4E3A else-if",suggestion:'\u5C06 v-else-if="..." \u66FF\u6362\u4E3A else-if="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-else-if=/,"else-if=")}),/\bv-else\b/.test(n)&&e.push({type:"directive",severity:"info",description:"v-else \u9700\u8981\u8F6C\u6362\u4E3A else",suggestion:"\u5C06 v-else \u66FF\u6362\u4E3A else",line:r,original:n.trim(),replacement:n.trim().replace(/\bv-else\b/,"else")}),/v-show=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-show \u9700\u8981\u8F6C\u6362\u4E3A show",suggestion:'\u5C06 v-show="..." \u66FF\u6362\u4E3A show="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-show=/,"show=")}),/v-model/.test(n)&&e.push({type:"directive",severity:"info",description:"v-model \u9700\u8981\u8F6C\u6362\u4E3A model",suggestion:'\u5C06 v-model="..." \u66FF\u6362\u4E3A model="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-model/,"model")}),/v-on:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-on: \u9700\u8981\u8F6C\u6362\u4E3A on:",suggestion:'\u5C06 v-on:click="..." \u66FF\u6362\u4E3A on:click="..." \u6216 @click="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-on:/,"on:")}),/v-bind:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-bind: \u53EF\u4EE5\u7B80\u5199\u4E3A :",suggestion:'\u5C06 v-bind:attr="..." \u66FF\u6362\u4E3A :attr="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-bind:/,":")}),/v-slot:/.test(n)&&e.push({type:"directive",severity:"info",description:"v-slot: \u9700\u8981\u8F6C\u6362\u4E3A slot:",suggestion:"\u5C06 v-slot:name \u66FF\u6362\u4E3A slot:name \u6216 #name",line:r,original:n.trim(),replacement:n.trim().replace(/v-slot:/,"slot:")}),/v-html=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-html \u9700\u8981\u8F6C\u6362\u4E3A html",suggestion:'\u5C06 v-html="..." \u66FF\u6362\u4E3A html="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-html=/,"html=")}),/v-text=/.test(n)&&e.push({type:"directive",severity:"info",description:"v-text \u9700\u8981\u8F6C\u6362\u4E3A text",suggestion:'\u5C06 v-text="..." \u66FF\u6362\u4E3A text="..."',line:r,original:n.trim(),replacement:n.trim().replace(/v-text=/,"text=")}),/v-memo/.test(n)&&e.push({type:"feature",severity:"error",description:"v-memo \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 computed \u5C5E\u6027\u66FF\u4EE3\u624B\u52A8\u7F13\u5B58\u903B\u8F91",line:r,original:n.trim()}),/\$refs/.test(n)&&e.push({type:"api",severity:"warning",description:"$refs \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 ref() \u548C\u6A21\u677F ref \u5C5E\u6027\u66FF\u4EE3",line:r,original:n.trim()}),/\$emit/.test(n)&&e.push({type:"api",severity:"warning",description:"$emit \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 setup \u4E0A\u4E0B\u6587\u4E2D\u7684 emit \u51FD\u6570\u66FF\u4EE3",line:r,original:n.trim()}),/\$el/.test(n)&&e.push({type:"api",severity:"warning",description:"$el \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 template ref \u66FF\u4EE3",line:r,original:n.trim()}),/\$parent/.test(n)&&e.push({type:"api",severity:"warning",description:"$parent \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 provide/inject \u66FF\u4EE3",line:r,original:n.trim()}),/\$children/.test(n)&&e.push({type:"api",severity:"error",description:"$children \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 provide/inject \u6216\u4E8B\u4EF6\u603B\u7EBF\u66FF\u4EE3",line:r,original:n.trim()}),/\$forceUpdate/.test(n)&&e.push({type:"api",severity:"warning",description:"$forceUpdate \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981",suggestion:"Lyt.js \u7684\u54CD\u5E94\u5F0F\u7CFB\u7EDF\u4F1A\u81EA\u52A8\u89E6\u53D1\u66F4\u65B0",line:r,original:n.trim()}),/\$nextTick/.test(n)&&e.push({type:"api",severity:"info",description:"$nextTick \u9700\u8981\u66FF\u6362\u4E3A\u72EC\u7ACB\u7684 nextTick \u51FD\u6570",suggestion:'import { nextTick } from "@lytjs/compat"',line:r,original:n.trim()}),/defineProps/.test(n)&&e.push({type:"api",severity:"warning",description:"defineProps \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362",suggestion:"\u5728 defineComponent({ props: {...} }) \u4E2D\u5B9A\u4E49 props",line:r,original:n.trim()}),/defineEmits/.test(n)&&e.push({type:"api",severity:"warning",description:"defineEmits \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362",suggestion:"\u5728 defineComponent({ emits: [...] }) \u4E2D\u5B9A\u4E49 emits",line:r,original:n.trim()}),/defineExpose/.test(n)&&e.push({type:"api",severity:"info",description:"defineExpose \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981",suggestion:"setup \u8FD4\u56DE\u503C\u81EA\u52A8\u66B4\u9732\u4E3A\u516C\u5171\u5C5E\u6027",line:r,original:n.trim()}),/<style[^>]*module/.test(n)&&e.push({type:"style",severity:"error",description:"CSS Modules \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301",suggestion:"\u4F7F\u7528 scoped \u6837\u5F0F\u66FF\u4EE3",line:r,original:n.trim()}),/<Teleport/.test(n)&&e.push({type:"component",severity:"info",description:"Teleport \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 Teleport",line:r}),/<Suspense/.test(n)&&e.push({type:"component",severity:"info",description:"Suspense \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 Suspense",line:r}),/<KeepAlive/.test(n)&&e.push({type:"component",severity:"info",description:"KeepAlive \u7EC4\u4EF6\u5DF2\u901A\u8FC7 @lytjs/compat \u63D0\u4F9B",suggestion:"\u786E\u4FDD\u4ECE @lytjs/compat \u5BFC\u5165 KeepAlive",line:r})}return e}function dt(i){if(i.length===0)return 100;let e=100;for(let t of i)switch(t.severity){case"error":e-=15;break;case"warning":e-=5;break;case"info":e-=1;break}return Math.max(0,Math.min(100,e))}function yt(i){let e=[],t=new Set;for(let o of i)if(o.severity==="error"||o.severity==="warning"){let n=`${o.type}:${o.description}`;t.has(n)||(t.add(n),e.push(`- [${o.severity.toUpperCase()}] ${o.description}: ${o.suggestion}`))}return e}function vt(i){let e=x(i),t=xe(i);for(let s of e.warnings)t.push({type:s.type,severity:"warning",description:s.message,suggestion:s.suggestion||""});let o=t.filter(s=>s.severity==="error").length,n=t.filter(s=>s.severity==="warning").length,r=t.filter(s=>s.severity==="info").length;return{code:e.code,issues:t,errorCount:o,warningCount:n,infoCount:r,compatibilityScore:dt(t),manualFixes:yt(t)}}function ht(i){return xe(i)}function xt(i){let e=[];if(e.push("========================================"),e.push(" Vue 3 -> Lyt.js \u8FC1\u79FB\u62A5\u544A"),e.push("========================================"),e.push(""),e.push(`\u517C\u5BB9\u6027\u8BC4\u5206: ${i.compatibilityScore}/100`),i.compatibilityScore>=80?e.push("\u8FC1\u79FB\u96BE\u5EA6: \u4F4E - \u5927\u90E8\u5206\u4EE3\u7801\u53EF\u4EE5\u81EA\u52A8\u8F6C\u6362"):i.compatibilityScore>=50?e.push("\u8FC1\u79FB\u96BE\u5EA6: \u4E2D - \u9700\u8981\u4E00\u4E9B\u624B\u52A8\u8C03\u6574"):e.push("\u8FC1\u79FB\u96BE\u5EA6: \u9AD8 - \u9700\u8981\u5927\u91CF\u624B\u52A8\u4FEE\u6539"),e.push(""),e.push("\u95EE\u9898\u7EDF\u8BA1:"),e.push(` \u9519\u8BEF: ${i.errorCount}`),e.push(` \u8B66\u544A: ${i.warningCount}`),e.push(` \u4FE1\u606F: ${i.infoCount}`),e.push(""),i.manualFixes.length>0){e.push("\u9700\u8981\u624B\u52A8\u4FEE\u6539\u7684\u90E8\u5206:");for(let t of i.manualFixes)e.push(` ${t}`);e.push("")}if(i.issues.length>0){e.push("\u8BE6\u7EC6\u95EE\u9898\u5217\u8868:"),e.push("");let t=new Map;for(let n of i.issues){let r=t.get(n.type)||[];r.push(n),t.set(n.type,r)}let o={import:"\u5BFC\u5165\u8BED\u53E5",directive:"\u6307\u4EE4\u8BED\u6CD5",lifecycle:"\u751F\u547D\u5468\u671F",api:"API \u5DEE\u5F02",component:"\u7EC4\u4EF6",style:"\u6837\u5F0F",feature:"\u4E0D\u652F\u6301\u7684\u529F\u80FD",ecosystem:"\u751F\u6001\u7CFB\u7EDF"};for(let[n,r]of t){e.push(` [${o[n]}]`);for(let s of r){let g=s.line?` (\u884C ${s.line})`:"";e.push(` ${s.severity.toUpperCase()}: ${s.description}${g}`),e.push(` \u5EFA\u8BAE: ${s.suggestion}`)}e.push("")}}return e.push("========================================"),e.join(`
|
|
21
|
-
`)}export{ae as Fragment,pt as KeepAlive,ut as Suspense,at as Teleport,ct as Transition,lt as TransitionGroup,u as VueSfcConverter,ht as analyzeVueFile,L as computed,tt as convertVueSfcToLyt,x as convertVueSfcToLytWithWarnings,it as createApp,gt as createCompatVue,ce as defineAsyncComponent,ot as defineComponent,ue as defineEmits,me as defineExpose,le as defineProps,V as effect,xt as formatMigrationReport,oe as getCurrentInstance,re as getCurrentScope,pe as h,G as inject,ve as isProxy,y as isReactive,v as isReadonly,M as isRef,W as markRaw,vt as migrateVueFile,K as nextTick,ee as onActivated,H as onBeforeMount,Q as onBeforeUnmount,J as onBeforeUpdate,te as onDeactivated,X as onErrorCaptured,N as onMounted,Y as onRenderTracked,Z as onRenderTriggered,se as onScopeDispose,ne as onServerPrefetch,q as onUnmounted,_ as onUpdated,z as provide,he as proxyRefs,E as reactive,P as readonly,T as ref,I as shallowReactive,j as shallowRef,D as toRaw,$ as toRef,A as toRefs,k as triggerRef,b as unref,de as useAttrs,mt as useCompatMode,ge as useSlots,ye as useTemplateRef,U as watch,B as watchEffect,F as watchPostEffect,O as watchSyncEffect,fe as withDefaults};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
3
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|
package/package.json
CHANGED
|
@@ -1,48 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lytjs/compat",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "6.4.0",
|
|
4
|
+
"description": "LytJS Vue 2/3 compatibility layer for migration support",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "./dist/index.cjs",
|
|
6
7
|
"module": "./dist/index.mjs",
|
|
7
|
-
"types": "./dist/
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
8
9
|
"exports": {
|
|
9
10
|
".": {
|
|
10
|
-
"types": "./dist/
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
11
12
|
"import": "./dist/index.mjs",
|
|
12
|
-
"require": "./dist/index.cjs"
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
15
16
|
},
|
|
16
|
-
"bin": {
|
|
17
|
-
"vue-to-lyt": "./dist/bin/vue-to-lyt.js"
|
|
18
|
-
},
|
|
19
|
-
"sideEffects": false,
|
|
20
17
|
"files": [
|
|
21
18
|
"dist"
|
|
22
19
|
],
|
|
20
|
+
"sideEffects": false,
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup",
|
|
23
|
+
"dev": "tsup --watch",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"type-check": "tsc --noEmit",
|
|
27
|
+
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
28
|
+
"clean": "rm -rf dist"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@lytjs/reactivity": "^6.0.0",
|
|
32
|
+
"@lytjs/component": "^6.0.0",
|
|
33
|
+
"@lytjs/core": "^6.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"tsup": "^8.0.0",
|
|
37
|
+
"typescript": "^5.4.0",
|
|
38
|
+
"vitest": "^3.0.0"
|
|
39
|
+
},
|
|
23
40
|
"license": "MIT",
|
|
24
|
-
"author": "lytjs",
|
|
25
41
|
"repository": {
|
|
26
42
|
"type": "git",
|
|
27
|
-
"url": "https://gitee.com/lytjs/lytjs"
|
|
43
|
+
"url": "https://gitee.com/lytjs/lytjs.git",
|
|
44
|
+
"directory": "packages/ecosystem/packages/compat"
|
|
28
45
|
},
|
|
29
|
-
"homepage": "https://gitee.com/lytjs/lytjs",
|
|
30
46
|
"keywords": [
|
|
31
|
-
"lyt",
|
|
32
47
|
"lytjs",
|
|
33
|
-
"
|
|
34
|
-
"vue3",
|
|
35
|
-
"compatibility",
|
|
48
|
+
"compat",
|
|
36
49
|
"migration",
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
],
|
|
40
|
-
"publishConfig": {
|
|
41
|
-
"access": "public"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@lytjs/core": "^5.0.1",
|
|
45
|
-
"@lytjs/reactivity": "^5.0.1",
|
|
46
|
-
"@lytjs/component": "^5.0.1"
|
|
47
|
-
}
|
|
50
|
+
"vue"
|
|
51
|
+
]
|
|
48
52
|
}
|
package/README.md
DELETED
|
@@ -1,314 +0,0 @@
|
|
|
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,
|
|
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
|
package/dist/bin/vue-to-lyt.cjs
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
"use strict";var k=Object.create;var S=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var M=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var T=(n,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of L(e))!E.call(n,r)&&r!==t&&S(n,r,{get:()=>e[r],enumerable:!(s=R(e,r))||s.enumerable});return n};var w=(n,e,t)=>(t=n!=null?k(M(n)):{},T(e||!n||!n.__esModule?S(t,"default",{value:n,enumerable:!0}):t,n));var a=w(require("fs")),p=w(require("path"));var m=class{constructor(e){this.warnings=[];this.content=e}getWarnings(){return[...this.warnings]}addWarning(e,t,s){this.warnings.push({type:e,message:t,suggestion:s})}parse(){let e={template:null,script:null,scriptSetup:null,styles:[],customBlocks:[]},t=this.content.match(/<template[^>]*>([\s\S]*?)<\/template>/);t&&(e.template=t[1].trim());let s=this.content.match(/<script[^>]*setup[^>]*>([\s\S]*?)<\/script>/);if(s&&(e.scriptSetup=s[1].trim()),!e.scriptSetup){let c=this.content.match(/<script(?:\s[^>]*?)?>([\s\S]*?)<\/script>/);c&&(e.script=c[1].trim())}let r=/<style([^>]*)>([\s\S]*?)<\/style>/g,i;for(;(i=r.exec(this.content))!==null;){let c={},u=i[1].match(/(\w+)(?:="([^"]*)")?/g);if(u)for(let l of u){let[g,f]=l.split("=");c[g.trim()]=f?f.replace(/"/g,""):""}e.styles.push({content:i[2].trim(),attrs:c})}let o=/<(template|script|style)([^>]*)>([\s\S]*?)<\/\1>/g,v=this.content.match(/<(\w+)([^>]*)>([\s\S]*?)<\/\1>/g)||[];for(let c of v){let u=c.match(/^<(\w+)/);if(!u)continue;let l=u[1];if(["template","script","style"].includes(l))continue;let g=c.match(new RegExp(`^<${l}[^>]*>([\\s\\S]*?)</${l}>$`));if(!g)continue;let f={},d=c.match(new RegExp(`^<${l}([^>]*)>`));if(d){let h=d[1].match(/(\w+)(?:="([^"]*)")?/g);if(h)for(let W of h){let[x,y]=W.split("=");f[x.trim()]=y?y.replace(/"/g,""):""}}e.customBlocks.push({tag:l,content:g[1].trim(),attrs:f})}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-if=/g,"if="),t=t.replace(/v-else-if=/g,"else-if="),t=t.replace(/v-else/g,"else"),t=t.replace(/v-show=/g,"show="),t=t.replace(/v-html=/g,"html="),t=t.replace(/v-text=/g,"text="),t=t.replace(/\bv-once\b/g,"once"),t=t.replace(/\bv-pre\b/g,"pre"),t=t.replace(/\bv-cloak\b/g,"cloak"),t=t.replace(/v-slot:/g,"slot:"),t=t.replace(/v-on:/g,"on:"),t=t.replace(/v-model\.(\w+)="/g,'model.$1="'),t=t.replace(/v-model="/g,'model="'),t=t.replace(/v-bind:/g,":"),/v-memo/.test(t)&&(this.addWarning("directive","v-memo \u6307\u4EE4\u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301","\u4F7F\u7528 computed \u5C5E\u6027\u66FF\u4EE3\u624B\u52A8\u7F13\u5B58"),t=t.replace(/\s*v-memo="[^"]*"/g,"")),/v-is/.test(t)&&(this.addWarning("directive","v-is \u52A8\u6001\u7EC4\u4EF6\u8BED\u6CD5\u5728 Lyt.js \u4E2D\u53EF\u80FD\u9700\u8981\u8C03\u6574","\u4F7F\u7528 :is \u5C5E\u6027\u66FF\u4EE3 v-is"),t=t.replace(/v-is=/g,":is=")),t}convertScript(e,t=!1){let s=e;return s=s.replace(/from\s+['"]vue['"]/g,"from '@lytjs/compat'"),s=s.replace(/from\s+['"]vue-router['"]/g,"from '@lytjs/router'"),s=s.replace(/from\s+['"]pinia['"]/g,"from '@lytjs/store'"),s=s.replace(/from\s+['"]vuex['"]/g,"from '@lytjs/store'"),t&&(/defineProps/.test(s)&&this.addWarning("api","defineProps \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362\u4E3A defineComponent({ props: {...} })","\u5728 Lyt.js \u4E2D\u4F7F\u7528 defineComponent \u7684 props \u9009\u9879"),/defineEmits/.test(s)&&this.addWarning("api","defineEmits \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362\u4E3A defineComponent({ emits: {...} })","\u5728 Lyt.js \u4E2D\u4F7F\u7528 defineComponent \u7684 emits \u9009\u9879"),/defineExpose/.test(s)&&this.addWarning("api","defineExpose \u5728 Lyt.js \u4E2D\u4E0D\u9700\u8981","\u5728 Lyt.js \u4E2D setup \u8FD4\u56DE\u7684\u5BF9\u8C61\u81EA\u52A8\u66B4\u9732\u4E3A\u516C\u5171\u5C5E\u6027"),/withDefaults/.test(s)&&this.addWarning("api","withDefaults \u662F\u7F16\u8BD1\u5668\u5B8F\uFF0C\u9700\u8981\u624B\u52A8\u8F6C\u6362","\u5728 defineComponent \u7684 props \u9009\u9879\u4E2D\u4F7F\u7528 default \u5B57\u6BB5"),/useSlots/.test(s)&&this.addWarning("api","useSlots \u5728 Lyt.js \u4E2D\u9700\u8981\u901A\u8FC7 setup \u4E0A\u4E0B\u6587\u8BBF\u95EE","\u4F7F\u7528 setup(props, { slots }) \u8BBF\u95EE\u63D2\u69FD"),/useAttrs/.test(s)&&this.addWarning("api","useAttrs \u5728 Lyt.js \u4E2D\u9700\u8981\u901A\u8FC7 setup \u4E0A\u4E0B\u6587\u8BBF\u95EE","\u4F7F\u7528 setup(props, { attrs }) \u8BBF\u95EE attrs"),s=this.convertScriptSetupToSetup(s)),s}convertScriptSetupToSetup(e){let t=e;return t=t.replace(/const\s+\w+\s*=\s*defineProps\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineProps \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 defineComponent({ props: {...} }) \u4E2D\u5B9A\u4E49
|
|
3
|
-
`),t=t.replace(/const\s+\w+\s*=\s*defineEmits\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineEmits \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 defineComponent({ emits: [...] }) \u4E2D\u5B9A\u4E49
|
|
4
|
-
`),t=t.replace(/defineExpose\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] defineExpose \u5DF2\u79FB\u9664\uFF0Csetup \u8FD4\u56DE\u503C\u81EA\u52A8\u66B4\u9732
|
|
5
|
-
`),t=t.replace(/const\s+\w+\s*=\s*withDefaults\s*\([^)]*\)\s*;?\s*\n?/g,`// [Compat] withDefaults \u5DF2\u79FB\u9664\uFF0C\u8BF7\u5728 props \u9009\u9879\u4E2D\u4F7F\u7528 default
|
|
6
|
-
`),t}convertStyles(e){let t=[];for(let s of e){let r=Object.entries(s.attrs).map(([i,o])=>o?`${i}="${o}"`:i).join(" ");s.attrs.module!==void 0&&this.addWarning("feature","CSS Modules \u5728 Lyt.js \u4E2D\u4E0D\u652F\u6301","\u4F7F\u7528 scoped \u6837\u5F0F\u66FF\u4EE3"),t.push(`<style${r?" "+r:""}>
|
|
7
|
-
${s.content}
|
|
8
|
-
</style>`)}return t.join(`
|
|
9
|
-
|
|
10
|
-
`)}convert(){let e=this.parse(),t=[];if(e.template){let s=this.convertTemplate(e.template);t.push(`<template>
|
|
11
|
-
${s}
|
|
12
|
-
</template>`)}if(e.scriptSetup){let s=this.convertScript(e.scriptSetup,!0);t.push(`<script setup>
|
|
13
|
-
${s}
|
|
14
|
-
</script>`)}else if(e.script){let s=this.convertScript(e.script,!1);t.push(`<script>
|
|
15
|
-
${s}
|
|
16
|
-
</script>`)}e.styles.length>0&&t.push(this.convertStyles(e.styles));for(let s of e.customBlocks){let r=Object.entries(s.attrs).map(([i,o])=>o?`${i}="${o}"`:i).join(" ");t.push(`<${s.tag}${r?" "+r:""}>
|
|
17
|
-
${s.content}
|
|
18
|
-
</${s.tag}>`)}return t.join(`
|
|
19
|
-
|
|
20
|
-
`)}convertWithWarnings(){return this.warnings=[],{code:this.convert(),warnings:this.warnings}}};function C(n){return new m(n).convert()}function P(){let n=process.argv.slice(2),e={input:"",recursive:!1,dryRun:!1,help:!1};for(let t=0;t<n.length;t++){let s=n[t];switch(s){case"-h":case"--help":e.help=!0;break;case"-r":case"--recursive":e.recursive=!0;break;case"-d":case"--dry-run":e.dryRun=!0;break;case"-o":case"--output":e.output=n[++t];break;default:e.input||(e.input=s);break}}return e}function b(){console.log(`
|
|
21
|
-
vue-to-lyt - \u5C06 Vue \u9879\u76EE\u8F6C\u6362\u4E3A Lyt.js \u9879\u76EE
|
|
22
|
-
|
|
23
|
-
\u7528\u6CD5:
|
|
24
|
-
vue-to-lyt <input> [options]
|
|
25
|
-
|
|
26
|
-
\u9009\u9879:
|
|
27
|
-
-h, --help \u663E\u793A\u5E2E\u52A9\u4FE1\u606F
|
|
28
|
-
-o, --output \u6307\u5B9A\u8F93\u51FA\u76EE\u5F55\uFF08\u53EF\u9009\uFF09
|
|
29
|
-
-r, --recursive \u9012\u5F52\u5904\u7406\u76EE\u5F55
|
|
30
|
-
-d, --dry-run \u9884\u89C8\u8F6C\u6362\uFF0C\u4E0D\u5B9E\u9645\u5199\u5165\u6587\u4EF6
|
|
31
|
-
|
|
32
|
-
\u793A\u4F8B:
|
|
33
|
-
# \u8F6C\u6362\u5355\u4E2A\u6587\u4EF6
|
|
34
|
-
vue-to-lyt ./src/MyComponent.vue
|
|
35
|
-
|
|
36
|
-
# \u8F6C\u6362\u6574\u4E2A\u76EE\u5F55
|
|
37
|
-
vue-to-lyt ./src --recursive
|
|
38
|
-
|
|
39
|
-
# \u8F6C\u6362\u5230\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55
|
|
40
|
-
vue-to-lyt ./src --recursive --output ./lyt-src
|
|
41
|
-
`)}function $(n,e){try{let t=a.readFileSync(n,"utf-8"),s=C(t),r=e||n.replace(/\.vue$/,".lyt");return console.log(`[\u8F6C\u6362] ${n} -> ${r}`),console.log(t!==s?"[\u53D8\u66F4] \u6587\u4EF6\u5185\u5BB9\u5DF2\u8F6C\u6362":"[\u8DF3\u8FC7] \u6587\u4EF6\u5185\u5BB9\u65E0\u9700\u8F6C\u6362"),!0}catch(t){return console.error(`[\u9519\u8BEF] \u5904\u7406\u6587\u4EF6 ${n} \u65F6\u51FA\u9519:`,t),!1}}function j(n,e){let t=a.readdirSync(n);for(let s of t){let r=p.join(n,s);if(a.statSync(r).isDirectory()){if(s==="node_modules"||s===".git")continue;let o=e?p.join(e,s):void 0;j(r,o)}else if(s.endsWith(".vue")){let o;if(e){let v=p.relative(n,r);o=p.join(e,v.replace(/\.vue$/,".lyt"))}$(r,o)}}}function B(){let n=P();n.help&&(b(),process.exit(0)),n.input||(console.error("\u9519\u8BEF: \u8BF7\u6307\u5B9A\u8F93\u5165\u6587\u4EF6\u6216\u76EE\u5F55"),b(),process.exit(1));let e=p.resolve(n.input);a.existsSync(e)||(console.error(`\u9519\u8BEF: \u8DEF\u5F84\u4E0D\u5B58\u5728: ${e}`),process.exit(1));let t=a.statSync(e);t.isDirectory()?(n.recursive||(console.error("\u9519\u8BEF: \u8F93\u5165\u662F\u76EE\u5F55\uFF0C\u8BF7\u4F7F\u7528 --recursive \u9009\u9879"),process.exit(1)),j(e,n.output)):t.isFile()&&$(e,n.output),console.log(`
|
|
42
|
-
\u8F6C\u6362\u5B8C\u6210!`)}B();
|
package/dist/bin/vue-to-lyt.js
DELETED