@storm-stack/core
Version:
A build toolkit and runtime used by Storm Software in TypeScript applications
170 lines (164 loc) • 7.12 kB
JavaScript
var chunkGRNJVY7I_cjs = require('./chunk-GRNJVY7I.cjs');
var listFiles = require('@stryke/fs/list-files');
var readFile = require('@stryke/fs/read-file');
var resolve = require('@stryke/fs/resolve');
var filePathFns = require('@stryke/path/file-path-fns');
var joinPaths = require('@stryke/path/join-paths');
var defu = require('defu');
var minimatch = require('minimatch');
var ts = require('typescript');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var defu__default = /*#__PURE__*/_interopDefault(defu);
var ts__default = /*#__PURE__*/_interopDefault(ts);
var SourcesMap = Map;
async function loadLibFiles() {
const libLocation = await resolve.resolvePackage("typescript");
if (!libLocation) {
throw new Error("Could not resolve TypeScript package location.");
}
const libFiles = await listFiles.listFiles(joinPaths.joinPaths(libLocation, "lib", "**", "lib.*.d.ts"));
if (libFiles.length === 0) {
throw new Error("No TypeScript library files found.");
}
const lib = /* @__PURE__ */ new Map();
for (const file of libFiles) {
lib.set(`/node_modules/typescript/lib/${filePathFns.findFileName(file)}`, await readFile.readFile(file));
}
return lib;
}
chunkGRNJVY7I_cjs.__name(loadLibFiles, "loadLibFiles");
function getDefaultCompilerOptions() {
return {
...ts__default.default.getDefaultCompilerOptions(),
jsx: ts__default.default.JsxEmit.React,
strict: true,
esModuleInterop: true,
module: ts__default.default.ModuleKind.ESNext,
suppressOutputPathCheck: true,
skipLibCheck: true,
skipDefaultLibCheck: true,
moduleResolution: ts__default.default.ModuleResolutionKind.Node10
};
}
chunkGRNJVY7I_cjs.__name(getDefaultCompilerOptions, "getDefaultCompilerOptions");
async function createVirtualProgram(rootNames, context, compilerOptions = {}) {
const options = defu__default.default(compilerOptions, getDefaultCompilerOptions());
const host = {
name: "storm-vfs",
root: context.options.workspaceRoot,
...ts__default.default.sys,
realpath: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((path) => {
if (context.vfs.existsSync(path)) {
return context.vfs.resolvePath(path);
}
return ts__default.default.sys.realpath?.(path) ?? path;
}, "realpath"),
getCurrentDirectory() {
return context.options.workspaceRoot;
},
getCanonicalFileName(fileName) {
return fileName;
},
getDefaultLibFileName(_options) {
return ts__default.default.getDefaultLibFileName(options);
},
getDefaultLibLocation() {
return "/";
},
getNewLine() {
return "\n";
},
useCaseSensitiveFileNames() {
return true;
},
fileExists(fileName) {
return context.vfs.existsSync(fileName);
},
readFile(fileName) {
if (context.vfs.existsSync(fileName)) {
return context.vfs.readFileSync(fileName);
}
return void 0;
},
readDirectory: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((path, extensions = [], exclude = [], include = []) => {
let results = [];
if (context.vfs.existsSync(path)) {
results = context.vfs.readdirSync(path, {
encoding: "utf8",
recursive: true
});
if (extensions.length > 0) {
results = results.filter((file) => extensions.some((ext) => file.endsWith(ext.startsWith(".") ? ext : `.${ext}`)));
}
if (exclude.length > 0) {
results = results.filter((file) => !exclude.some((pattern) => minimatch.minimatch(file, pattern)));
}
if (include.length > 0) {
results = results.filter((file) => include.some((pattern) => minimatch.minimatch(file, pattern)));
}
}
return results;
}, "readDirectory"),
writeFile(fileName, data) {
context.vfs.writeFileSync(fileName, data);
},
resolvePath: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((fileName) => {
if (context.vfs.existsSync(fileName)) {
return context.vfs.resolvePath(fileName);
}
return ts__default.default.sys.resolvePath(fileName);
}, "resolvePath"),
getSourceFile(fileName, languageVersionOrOptions, _, shouldCreateNewSourceFile) {
if (context.vfs.existsSync(fileName)) {
return ts__default.default.createSourceFile(fileName, context.vfs.readFileSync(fileName), languageVersionOrOptions ?? compilerOptions.target ?? getDefaultCompilerOptions().target, false);
} else if (shouldCreateNewSourceFile) {
const sourceFile = ts__default.default.createSourceFile(fileName, "", languageVersionOrOptions ?? compilerOptions.target ?? getDefaultCompilerOptions().target, false);
context.vfs.writeFileSync(fileName, sourceFile.text);
return sourceFile;
}
return void 0;
}
};
return ts__default.default.createProgram(rootNames, options, host);
}
chunkGRNJVY7I_cjs.__name(createVirtualProgram, "createVirtualProgram");
function createVirtualCompilerHost(sys, compilerOptions) {
const sourceFiles = /* @__PURE__ */ new Map();
const save = /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((sourceFile) => {
sourceFiles.set(sourceFile.fileName, sourceFile);
return sourceFile;
}, "save");
const vHost = {
compilerHost: {
...sys,
getCanonicalFileName: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((fileName) => fileName, "getCanonicalFileName"),
getDefaultLibFileName: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name(() => `/${ts__default.default.getDefaultLibFileName(compilerOptions)}`, "getDefaultLibFileName"),
// getDefaultLibLocation: () => '/',
getNewLine: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name(() => sys.newLine, "getNewLine"),
getSourceFile: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((fileName, languageVersionOrOptions) => {
return sourceFiles.get(fileName) ?? save(ts__default.default.createSourceFile(fileName, sys.readFile(fileName), languageVersionOrOptions ?? compilerOptions.target, false));
}, "getSourceFile"),
useCaseSensitiveFileNames: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name(() => sys.useCaseSensitiveFileNames, "useCaseSensitiveFileNames")
},
updateFile: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((sourceFile) => {
const alreadyExists = sourceFiles.has(sourceFile.fileName);
sys.writeFile(sourceFile.fileName, sourceFile.text);
sourceFiles.set(sourceFile.fileName, sourceFile);
return alreadyExists;
}, "updateFile"),
deleteFile: /* @__PURE__ */ chunkGRNJVY7I_cjs.__name((sourceFile) => {
const alreadyExists = sourceFiles.has(sourceFile.fileName);
sourceFiles.delete(sourceFile.fileName);
sys.deleteFile(sourceFile.fileName);
return alreadyExists;
}, "deleteFile")
};
return vHost;
}
chunkGRNJVY7I_cjs.__name(createVirtualCompilerHost, "createVirtualCompilerHost");
exports.SourcesMap = SourcesMap;
exports.createVirtualCompilerHost = createVirtualCompilerHost;
exports.createVirtualProgram = createVirtualProgram;
exports.getDefaultCompilerOptions = getDefaultCompilerOptions;
exports.loadLibFiles = loadLibFiles;
;