diff --git a/examples/vue/components/GenericProps.vue b/examples/vue/components/GenericProps.vue new file mode 100644 index 0000000..ed56ffd --- /dev/null +++ b/examples/vue/components/GenericProps.vue @@ -0,0 +1,23 @@ + + + diff --git a/examples/vue/src/index.ts b/examples/vue/src/index.ts index ec14484..3264ed9 100644 --- a/examples/vue/src/index.ts +++ b/examples/vue/src/index.ts @@ -12,6 +12,7 @@ import OutsideProps from '@/components/outside-props' import NoDirectExport from '@/components/NoDirectExport.vue' import OutsideTsProps from '@/components/outside-ts-props' +import GenericProps from '@/components/GenericProps.vue' import JsSetup from '../components/JsSetup.vue' import CssVar from '../components/CssVar.vue' @@ -45,7 +46,8 @@ export { NoDirectExport, JsSetup, CssVar, - OutsideTsProps + OutsideTsProps, + GenericProps } export default DefaultImport diff --git a/src/program.ts b/src/program.ts index 6e8d181..cc31419 100644 --- a/src/program.ts +++ b/src/program.ts @@ -14,7 +14,7 @@ const hasVue = !!tryGetPackageInfo('vue') // If there has no Vue dependency, we think it's a normal TypeScript project. // So we use the original createProgram of TypeScript. -const _createProgram = !hasVue +export const createProgram = !hasVue ? ts.createProgram : proxyCreateProgram(ts, ts.createProgram, (ts, options) => { const { configFilePath } = options.options @@ -31,49 +31,3 @@ const _createProgram = !hasVue ) return [vueLanguagePlugin] }) - -export const createProgram = !hasVue - ? ts.createProgram - : (options: ts.CreateProgramOptions) => { - const program = _createProgram(options) - - const emit = program.emit - program.emit = ( - targetSourceFile, - writeFile, - cancellationToken, - emitOnlyDtsFiles, - customTransformers - ) => { - if (writeFile) { - return emit( - targetSourceFile, - (fileName, data, writeByteOrderMark, onError, sourceFiles) => { - if (fileName.endsWith('.d.ts')) { - // data = removeVolarGlobalTypes(data) - } - return writeFile(fileName, data, writeByteOrderMark, onError, sourceFiles) - }, - cancellationToken, - emitOnlyDtsFiles, - customTransformers - ) - } - - return emit( - targetSourceFile, - writeFile, - cancellationToken, - emitOnlyDtsFiles, - customTransformers - ) - } - - return program - } - -// const removeVolarGlobalTypesRegexp = /^[^\n]*__VLS_globalTypesStart[\w\W]*__VLS_globalTypesEnd[^\n]*\n?$/mg - -// export function removeVolarGlobalTypes(dts: string) { -// return dts.replace(removeVolarGlobalTypesRegexp, '') -// } diff --git a/src/utils.ts b/src/utils.ts index cbfcd9d..85988cc 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -8,6 +8,7 @@ import { sep } from 'node:path' import { existsSync, lstatSync, readdirSync, rmdirSync } from 'node:fs' +import { createRequire } from 'node:module' import ts from 'typescript' import { getPackageInfoSync, resolveModule } from 'local-pkg' @@ -438,6 +439,16 @@ export function parseTsAliases(basePath: string, paths: ts.MapLike) { } export function tryGetPackageInfo(name: string) { + if (process.versions.pnp) { + const targetRequire = createRequire(import.meta.url) + + try { + return getPackageInfoSync( + targetRequire.resolve(`${name}/package.json`, { paths: [process.cwd()] }) + ) + } catch (e) {} + } + try { return (getPackageInfoSync(name) ?? getPackageInfoSync(name, { paths: [resolveModule(name) || process.cwd()] })) as {