Skip to content

Commit

Permalink
fix(compiler-sfc): malformed filename on windows using path.posix.joi…
Browse files Browse the repository at this point in the history
…n() (vuejs#9478)

Closes: vuejs#8671, vuejs#9583

Not fixed with: vuejs#9446

Related: vuejs#9473
  • Loading branch information
b12k committed Nov 13, 2023
1 parent e422023 commit f18a174
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -481,25 +481,28 @@ describe('resolveType', () => {

test.runIf(process.platform === 'win32')('relative ts on Windows', () => {
const files = {
'C:\\Test\\foo.ts': 'export type P = { foo: number }',
'C:\\Test\\bar.d.ts':
'C:\\Test\\FolderA\\foo.ts': 'export type P = { foo: number }',
'C:\\Test\\FolderA\\bar.d.ts':
'type X = { bar: string }; export { X as Y };' +
// verify that we can parse syntax that is only valid in d.ts
'export const baz: boolean'
'export const baz: boolean',
'C:\\Test\\FolderB\\buz.ts': 'export type Z = { buz: string }'
}
const { props, deps } = resolve(
`
import { P } from './foo'
import { Y as PP } from './bar'
defineProps<P & PP>()
import { Z as PPP } from '../FolderB/buz'
defineProps<P & PP & PPP>()
`,
files,
{},
'C:\\Test\\Test.vue'
'C:\\Test\\FolderA\\Test.vue'
)
expect(props).toStrictEqual({
foo: ['Number'],
bar: ['String']
bar: ['String'],
buz: ['String']
})
expect(deps && [...deps].map(normalize)).toStrictEqual(
Object.keys(files).map(normalize)
Expand Down
10 changes: 8 additions & 2 deletions packages/compiler-sfc/src/script/resolveType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@ import { parse as babelParse } from '@babel/parser'
import { parse } from '../parse'
import { createCache } from '../cache'
import type TS from 'typescript'
import { extname, dirname } from 'path'
import { extname, dirname, join } from 'path'
import { minimatch as isMatch } from 'minimatch'
import * as process from 'process'

/**
* TypeResolveContext is compatible with ScriptCompileContext
Expand Down Expand Up @@ -779,7 +780,12 @@ function importSourceToScope(

let resolved: string | undefined = scope.resolvedImportSources[source]
if (!resolved) {
if (source.startsWith('.')) {
if (source.startsWith('..')) {
const osSpecificJoinFn = process.platform === 'win32' ? join : joinPaths

const filename = osSpecificJoinFn(dirname(scope.filename), source)
resolved = resolveExt(filename, fs)
} else if (source.startsWith('.')) {
// relative import - fast path
const filename = joinPaths(dirname(scope.filename), source)
resolved = resolveExt(filename, fs)
Expand Down

0 comments on commit f18a174

Please sign in to comment.