Skip to content

Instantly share code, notes, and snippets.

@jscheid
Created September 2, 2020 01:50
Show Gist options
  • Select an option

  • Save jscheid/9f3e6ffc1a170959a60e15987430d33e to your computer and use it in GitHub Desktop.

Select an option

Save jscheid/9f3e6ffc1a170959a60e15987430d33e to your computer and use it in GitHub Desktop.
const typescript = require("typescript");
const { resolveModuleName } = require("ts-pnp");
const origCreateProgram = typescript.createProgram;
function createCompilerHost(compilerOptions) {
const compilerHost = {
...typescript.createCompilerHost(compilerOptions),
resolveModuleNames,
resolveTypeReferenceDirectives,
};
return compilerHost;
function fileExists(fileName) {
return typescript.sys.fileExists(fileName);
}
function readFile(fileName) {
return typescript.sys.readFile(fileName);
}
function resolveModuleNames(moduleNames, containingFile) {
return moduleNames.map((moduleName) => {
// Needed to make the aliases work that are described here:
// https://nextjs.org/docs/advanced-features/module-path-aliases
if (moduleName.startsWith("@/")) {
return typescript.resolveModuleName(
moduleName,
containingFile,
compilerOptions,
{ fileExists, readFile }
).resolvedModule;
}
return resolveModuleName(
moduleName,
containingFile,
compilerOptions,
compilerHost,
typescript.resolveModuleName
).resolvedModule;
});
}
function resolveTypeReferenceDirectives(typeDirectiveNames, containingFile) {
return typeDirectiveNames.map((typeDirectiveName) => {
return resolveModuleName(
typeDirectiveName,
containingFile,
compilerOptions,
compilerHost,
typescript.resolveTypeReferenceDirective
).resolvedTypeReferenceDirective;
});
}
}
// ugh
typescript.createProgram = (fileNames, options) => {
return origCreateProgram(fileNames, options, createCompilerHost(options));
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment