Skip to content

Commit 984f487

Browse files
committedSep 24, 2024··
fix: correctly get package info in pnp mode
fix #384
1 parent fa84e9c commit 984f487

File tree

4 files changed

+38
-48
lines changed

4 files changed

+38
-48
lines changed
 
+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<script setup lang="ts" generic="T extends { label: string }">
2+
import { computed } from 'vue'
3+
4+
const props = defineProps<{
5+
item: T
6+
}>()
7+
8+
const emit = defineEmits<{
9+
select: [node: T]
10+
}>()
11+
12+
const item = computed(() => props.item)
13+
</script>
14+
15+
<template>
16+
<div
17+
class="setup"
18+
@click="emit('select', item)"
19+
>
20+
{{ item.label }}
21+
</div>
22+
<HelloWorld></HelloWorld>
23+
</template>

‎examples/vue/src/index.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import OutsideProps from '@/components/outside-props'
1212
import NoDirectExport from '@/components/NoDirectExport.vue'
1313

1414
import OutsideTsProps from '@/components/outside-ts-props'
15+
import GenericProps from '@/components/GenericProps.vue'
1516

1617
import JsSetup from '../components/JsSetup.vue'
1718
import CssVar from '../components/CssVar.vue'
@@ -45,7 +46,8 @@ export {
4546
NoDirectExport,
4647
JsSetup,
4748
CssVar,
48-
OutsideTsProps
49+
OutsideTsProps,
50+
GenericProps
4951
}
5052

5153
export default DefaultImport

‎src/program.ts

+1-47
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const hasVue = !!tryGetPackageInfo('vue')
1414

1515
// If there has no Vue dependency, we think it's a normal TypeScript project.
1616
// So we use the original createProgram of TypeScript.
17-
const _createProgram = !hasVue
17+
export const createProgram = !hasVue
1818
? ts.createProgram
1919
: proxyCreateProgram(ts, ts.createProgram, (ts, options) => {
2020
const { configFilePath } = options.options
@@ -31,49 +31,3 @@ const _createProgram = !hasVue
3131
)
3232
return [vueLanguagePlugin]
3333
})
34-
35-
export const createProgram = !hasVue
36-
? ts.createProgram
37-
: (options: ts.CreateProgramOptions) => {
38-
const program = _createProgram(options)
39-
40-
const emit = program.emit
41-
program.emit = (
42-
targetSourceFile,
43-
writeFile,
44-
cancellationToken,
45-
emitOnlyDtsFiles,
46-
customTransformers
47-
) => {
48-
if (writeFile) {
49-
return emit(
50-
targetSourceFile,
51-
(fileName, data, writeByteOrderMark, onError, sourceFiles) => {
52-
if (fileName.endsWith('.d.ts')) {
53-
// data = removeVolarGlobalTypes(data)
54-
}
55-
return writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles)
56-
},
57-
cancellationToken,
58-
emitOnlyDtsFiles,
59-
customTransformers
60-
)
61-
}
62-
63-
return emit(
64-
targetSourceFile,
65-
writeFile,
66-
cancellationToken,
67-
emitOnlyDtsFiles,
68-
customTransformers
69-
)
70-
}
71-
72-
return program
73-
}
74-
75-
// const removeVolarGlobalTypesRegexp = /^[^\n]*__VLS_globalTypesStart[\w\W]*__VLS_globalTypesEnd[^\n]*\n?$/mg
76-
77-
// export function removeVolarGlobalTypes(dts: string) {
78-
// return dts.replace(removeVolarGlobalTypesRegexp, '')
79-
// }

‎src/utils.ts

+11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
sep
99
} from 'node:path'
1010
import { existsSync, lstatSync, readdirSync, rmdirSync } from 'node:fs'
11+
import { createRequire } from 'node:module'
1112

1213
import ts from 'typescript'
1314
import { getPackageInfoSync, resolveModule } from 'local-pkg'
@@ -438,6 +439,16 @@ export function parseTsAliases(basePath: string, paths: ts.MapLike<string[]>) {
438439
}
439440

440441
export function tryGetPackageInfo(name: string) {
442+
if (process.versions.pnp) {
443+
const targetRequire = createRequire(import.meta.url)
444+
445+
try {
446+
return getPackageInfoSync(
447+
targetRequire.resolve(`${name}/package.json`, { paths: [process.cwd()] })
448+
)
449+
} catch (e) {}
450+
}
451+
441452
try {
442453
return (getPackageInfoSync(name) ??
443454
getPackageInfoSync(name, { paths: [resolveModule(name) || process.cwd()] })) as {

0 commit comments

Comments
 (0)
Please sign in to comment.