@ts-ast-parser/core
Version:
Reflects a simplified version of the TypeScript AST for generating documentation
59 lines • 2.06 kB
JavaScript
import { createRequire } from 'node:module';
import { cwd } from 'node:process';
import * as path from 'node:path';
import * as fs from 'node:fs';
const require = createRequire(import.meta.url);
// TODO(Jordi M.): Replace this with some sort of API call
// if https://github.com/microsoft/TypeScript/pull/54011 or
// similar is merged in TypeScript.
/**
* Resolves the TypeScript declaration files from "node_modules" directory.
* This is used when working in an in memory file system inside Node.js.
* We need to load the declaration files in memory.
*
* @returns The TypeScript declaration files location and content
*/
export function getLibFilesFromNode() {
const files = new Map();
const tsLibDirectory = path.dirname(require.resolve('typescript'));
const libFiles = fs.readdirSync(tsLibDirectory);
for (const lib of libFiles) {
if (!lib.startsWith('lib.') || !lib.endsWith('d.ts')) {
continue;
}
files.set(lib, fs.readFileSync(path.join(tsLibDirectory, lib), 'utf-8'));
}
return files;
}
export function getTypesFromNode() {
const fsMap = new Map();
const files = [];
const validExtensions = ['.ts', '.tsx'];
const walk = (dir) => {
if (!fs.existsSync(dir)) {
return;
}
const list = fs.readdirSync(dir);
for (const file of list) {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);
if (stat.isDirectory()) {
/* Recurse into a subdirectory */
walk(filePath);
}
else {
/* Is a file */
files.push(filePath);
}
}
};
walk(path.join(cwd(), 'node_modules', '@types'));
for (const lib of files) {
const content = fs.readFileSync(lib, 'utf8');
if (validExtensions.includes(path.extname(lib))) {
fsMap.set(path.relative(cwd(), lib), content);
}
}
return fsMap;
}
//# sourceMappingURL=get-lib-files-from-node.js.map