From ebdec9286e1c78b948f19fd74e62034ea22abdd9 Mon Sep 17 00:00:00 2001 From: rgehbt <74761884+Gehbt@users.noreply.github.com> Date: Tue, 9 Jul 2024 16:26:22 +0000 Subject: [PATCH 1/3] fix: replace backslash style path to forward slash --- src/codegen/generateRouteRecords.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/codegen/generateRouteRecords.ts b/src/codegen/generateRouteRecords.ts index 2b064d3a1..6b9d200aa 100644 --- a/src/codegen/generateRouteRecords.ts +++ b/src/codegen/generateRouteRecords.ts @@ -139,6 +139,9 @@ function generatePageImport( ) { const mode = typeof importMode === 'function' ? importMode(filepath) : importMode + if(filepath.includes("\\")){ + filepath = filepath.replace(/\\/g, "/") + } if (mode === 'async') { return `() => import('${filepath}')` } From f3ce4a942fae60c63a45d243689b38a2eabbf9ef Mon Sep 17 00:00:00 2001 From: rgehbt <74761884+Gehbt@users.noreply.github.com> Date: Wed, 10 Jul 2024 07:49:39 +0000 Subject: [PATCH 2/3] fix: normalize win32 style file path in generate page import --- src/codegen/generateRouteRecords.spec.ts | 23 +++++++++++++++++++++++ src/codegen/generateRouteRecords.ts | 7 ++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/codegen/generateRouteRecords.spec.ts b/src/codegen/generateRouteRecords.spec.ts index 738027b30..c30f875d1 100644 --- a/src/codegen/generateRouteRecords.spec.ts +++ b/src/codegen/generateRouteRecords.spec.ts @@ -4,6 +4,7 @@ import { PrefixTree, TreeNode } from '../core/tree' import { resolveOptions } from '../options' import { generateRouteRecord } from './generateRouteRecords' import { ImportsMap } from '../core/utils' +import { join } from 'path' const DEFAULT_OPTIONS = resolveOptions({}) @@ -339,5 +340,27 @@ describe('generateRouteRecord', () => { // what matters is that the import name is reused _page_0 expect(generateRouteRecordSimple(tree)).toMatchSnapshot() }) + it('dedupes sync imports for the same component', () => { + const tree = new PrefixTree( + resolveOptions({ + importMode: 'sync', + }) + ) + + tree.insertParsedPath('a/b', 'a.vue') + tree.insertParsedPath('a/c', 'a.vue') + + // what matters is that the import name is reused _page_0 + expect(generateRouteRecordSimple(tree)).toMatchSnapshot() + }) + it.runIf(process.platform === "win32")('path style should be normalized with Posix style', () => { + const tree = new PrefixTree( + resolveOptions({ + importMode: 'async', + }) + ) + tree.insert('from-root', join(__dirname, './src/pages/index.vue')) + expect(generateRouteRecordSimple(tree)[0]).not.toContain("\\") + }) }) }) diff --git a/src/codegen/generateRouteRecords.ts b/src/codegen/generateRouteRecords.ts index 6b9d200aa..60c2861cb 100644 --- a/src/codegen/generateRouteRecords.ts +++ b/src/codegen/generateRouteRecords.ts @@ -1,3 +1,4 @@ +import { normalize } from 'pathe' import type { TreeNode } from '../core/tree' import { ImportsMap } from '../core/utils' import { type ResolvedOptions } from '../options' @@ -137,11 +138,11 @@ function generatePageImport( importMode: ResolvedOptions['importMode'], importsMap: ImportsMap ) { + if (process.platform === 'win32') { + filepath = normalize(filepath) + } const mode = typeof importMode === 'function' ? importMode(filepath) : importMode - if(filepath.includes("\\")){ - filepath = filepath.replace(/\\/g, "/") - } if (mode === 'async') { return `() => import('${filepath}')` } From 0a1218effa7b5d8b6aeee4e9144b2c1f4bfcdafb Mon Sep 17 00:00:00 2001 From: rgehbt <74761884+Gehbt@users.noreply.github.com> Date: Wed, 10 Jul 2024 08:14:05 +0000 Subject: [PATCH 3/3] chore(test): fix test suite and add case --- src/codegen/generateRouteRecords.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/codegen/generateRouteRecords.spec.ts b/src/codegen/generateRouteRecords.spec.ts index c30f875d1..ba7f64b3d 100644 --- a/src/codegen/generateRouteRecords.spec.ts +++ b/src/codegen/generateRouteRecords.spec.ts @@ -360,7 +360,8 @@ describe('generateRouteRecord', () => { }) ) tree.insert('from-root', join(__dirname, './src/pages/index.vue')) - expect(generateRouteRecordSimple(tree)[0]).not.toContain("\\") + tree.insert('from-root2', join("\\unplugin-vue-router\\", './src/pages/index.vue')) + expect(generateRouteRecordSimple(tree)).not.toContain("\\") }) }) })