diff --git a/package.json b/package.json index 731f4b45..32ccfc98 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "vue-router": "4.3.2" }, "devDependencies": { - "@elegant-router/vue": "0.3.6", + "@elegant-router/vue": "0.3.7", "@iconify/json": "2.2.211", "@sa/scripts": "workspace:*", "@sa/uno-preset": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b4b2375..9406c1d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: version: 4.3.2(vue@3.4.27(typescript@5.4.5)) devDependencies: '@elegant-router/vue': - specifier: 0.3.6 - version: 0.3.6 + specifier: 0.3.7 + version: 0.3.7 '@iconify/json': specifier: 2.2.211 version: 2.2.211 @@ -474,11 +474,11 @@ packages: peerDependencies: vue: ^3.0.11 - '@elegant-router/core@0.3.6': - resolution: {integrity: sha512-cIsAqqfI7MGjcMBEAilVDTaJJeEzUchQ8bjIe+9r61btg55rc7h0wOl3Xt8BragHJ0CnTWL7R7pyXgz4Cu+9YQ==} + '@elegant-router/core@0.3.7': + resolution: {integrity: sha512-iNj+ZGage9w6vnZyAvZzrRX+yQX7Tr02PJZjwX92ShdEEDnDkM71UnUOv94X6z6T1y4QQo+v1/z6MNP0fJl5mw==} - '@elegant-router/vue@0.3.6': - resolution: {integrity: sha512-++FxR2AmPymmXqnZYh5RZkzWgNqL75pigvoQP8FXlYs3XnpYwVK4nnjoKscqlaK0TIUQ3w7v38IPsgyGyulIFw==} + '@elegant-router/vue@0.3.7': + resolution: {integrity: sha512-nw1M62SIlvyVE+BsHoOVntJzib2Ch1uz1U8QLJygNMuKfltb9VmWhZzEpKr8ZSIWLQt3ibK6wsla2T4h67mxGQ==} '@emotion/hash@0.8.0': resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} @@ -1478,9 +1478,6 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - assign-symbols@1.0.0: resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} engines: {node: '>=0.10.0'} @@ -1645,10 +1642,6 @@ packages: character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2739,10 +2732,6 @@ packages: resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} engines: {node: '>= 0.10'} - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -2828,10 +2817,6 @@ packages: resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} engines: {node: '>=18'} - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2848,10 +2833,6 @@ packages: is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -3157,12 +3138,8 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - magic-string@0.30.6: - resolution: {integrity: sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==} - engines: {node: '>=12'} - - magicast@0.3.3: - resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} + magicast@0.3.4: + resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} make-fetch-happen@10.2.1: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} @@ -3519,10 +3496,6 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -3780,11 +3753,6 @@ packages: peerDependencies: prettier: '>=2.0.0' - prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} - engines: {node: '>=14'} - hasBin: true - prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} @@ -3888,8 +3856,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - recast@0.23.4: - resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} + recast@0.23.7: + resolution: {integrity: sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag==} engines: {node: '>= 4'} regenerator-runtime@0.14.1: @@ -4341,6 +4309,9 @@ packages: tiny-emitter@2.1.0: resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -4534,9 +4505,6 @@ packages: resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} engines: {node: '>=14.0.0'} - unplugin@1.6.0: - resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} - unset-value@1.0.0: resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} engines: {node: '>=0.10.0'} @@ -4569,9 +4537,6 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -5071,24 +5036,24 @@ snapshots: dependencies: vue: 3.4.27(typescript@5.4.5) - '@elegant-router/core@0.3.6': + '@elegant-router/core@0.3.7': dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 consola: 3.2.3 fast-glob: 3.3.2 kolorist: 1.8.0 micromatch: 4.0.5 - '@elegant-router/vue@0.3.6': + '@elegant-router/vue@0.3.7': dependencies: - '@elegant-router/core': 0.3.6 + '@elegant-router/core': 0.3.7 consola: 3.2.3 kolorist: 1.8.0 - magic-string: 0.30.6 - magicast: 0.3.3 - prettier: 3.2.4 - recast: 0.23.4 - unplugin: 1.6.0 + magic-string: 0.30.10 + magicast: 0.3.4 + prettier: 3.2.5 + recast: 0.23.7 + unplugin: 1.10.1 '@emotion/hash@0.8.0': {} @@ -6149,14 +6114,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - assert@2.1.0: - dependencies: - call-bind: 1.0.7 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.5 - util: 0.12.5 - assign-symbols@1.0.0: {} ast-types@0.16.1: @@ -6395,18 +6352,6 @@ snapshots: character-entities@2.0.2: {} - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7655,11 +7600,6 @@ snapshots: dependencies: hasown: 2.0.2 - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 @@ -7736,10 +7676,6 @@ snapshots: dependencies: get-east-asian-width: 1.2.0 - is-generator-function@1.0.10: - dependencies: - has-tostringtag: 1.0.2 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -7755,11 +7691,6 @@ snapshots: is-lambda@1.0.1: {} - is-nan@1.3.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - is-negative-zero@2.0.3: {} is-npm@6.0.0: {} @@ -8019,11 +7950,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - magic-string@0.30.6: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - - magicast@0.3.3: + magicast@0.3.4: dependencies: '@babel/parser': 7.24.5 '@babel/types': 7.24.5 @@ -8582,11 +8509,6 @@ snapshots: object-inspect@1.13.1: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - object-keys@1.1.1: {} object-visit@1.0.1: @@ -8850,8 +8772,6 @@ snapshots: dependencies: prettier: 3.2.5 - prettier@3.2.4: {} - prettier@3.2.5: {} pretty-ms@9.0.0: @@ -8962,12 +8882,12 @@ snapshots: dependencies: picomatch: 2.3.1 - recast@0.23.4: + recast@0.23.7: dependencies: - assert: 2.1.0 ast-types: 0.16.1 esprima: 4.0.1 source-map: 0.6.1 + tiny-invariant: 1.3.3 tslib: 2.6.2 regenerator-runtime@0.14.1: {} @@ -9456,6 +9376,8 @@ snapshots: tiny-emitter@2.1.0: {} + tiny-invariant@1.3.3: {} + to-fast-properties@2.0.0: {} to-object-path@0.3.0: @@ -9681,13 +9603,6 @@ snapshots: webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 - unplugin@1.6.0: - dependencies: - acorn: 8.11.3 - chokidar: 3.6.0 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.6.1 - unset-value@1.0.0: dependencies: has-value: 0.3.1 @@ -9728,14 +9643,6 @@ snapshots: util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.1.1 - is-generator-function: 1.0.10 - is-typed-array: 1.1.13 - which-typed-array: 1.1.15 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 6c7c5463..e2af8aa1 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -42,7 +42,13 @@ function transformElegantRouteToVueRoute( } function getLayoutName(component: string) { - return component.replace(LAYOUT_PREFIX, ''); + const layout = component.replace(LAYOUT_PREFIX, ''); + + if(!layouts[layout]) { + throw new Error(`Layout component "${layout}" not found`); + } + + return layout; } function isView(component: string) { @@ -50,7 +56,13 @@ function transformElegantRouteToVueRoute( } function getViewName(component: string) { - return component.replace(VIEW_PREFIX, ''); + const view = component.replace(VIEW_PREFIX, ''); + + if(!views[view]) { + throw new Error(`View component "${view}" not found`); + } + + return view; } function isFirstLevelRoute(item: ElegantConstRoute) { @@ -81,39 +93,45 @@ function transformElegantRouteToVueRoute( const vueRoute = { name, path, ...rest } as RouteRecordRaw; - if (component) { - if (isSingleLevelRoute(route)) { - const { layout, view } = getSingleLevelRouteComponent(component); - - const singleLevelRoute: RouteRecordRaw = { - path, - component: layouts[layout], - children: [ - { - name, - path: '', - component: views[view], - ...rest - } as RouteRecordRaw - ] - }; - - return [singleLevelRoute]; + try { + if (component) { + if (isSingleLevelRoute(route)) { + const { layout, view } = getSingleLevelRouteComponent(component); + + const singleLevelRoute: RouteRecordRaw = { + path, + component: layouts[layout], + children: [ + { + name, + path: '', + component: views[view], + ...rest + } as RouteRecordRaw + ] + }; + + return [singleLevelRoute]; + } + + if (isLayout(component)) { + const layoutName = getLayoutName(component); + + vueRoute.component = layouts[layoutName]; + } + + if (isView(component)) { + const viewName = getViewName(component); + + vueRoute.component = views[viewName]; + } + } - - if (isLayout(component)) { - const layoutName = getLayoutName(component); - - vueRoute.component = layouts[layoutName]; - } - - if (isView(component)) { - const viewName = getViewName(component); - - vueRoute.component = views[viewName]; - } - + } catch (error: any) { + console.error(`Error transforming route "${route.name}": ${error.toString()}`); + return []; } + // add redirect to child if (children?.length && !vueRoute.redirect) {