@eljs/utils
Version:
Collection of nodejs utility.
248 lines (246 loc) • 7.2 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/file/loader.ts
var loader_exports = {};
__export(loader_exports, {
fileLoaders: () => fileLoaders,
fileLoadersSync: () => fileLoadersSync,
loadJs: () => loadJs,
loadJsSync: () => loadJsSync,
loadJson: () => loadJson,
loadJsonSync: () => loadJsonSync,
loadTs: () => loadTs,
loadTsSync: () => loadTsSync,
loadYaml: () => loadYaml,
loadYamlSync: () => loadYamlSync,
resolveTsConfig: () => resolveTsConfig
});
module.exports = __toCommonJS(loader_exports);
var import_type = require("../type");
var import_node_path = require("node:path");
var import_node_url = require("node:url");
var import_is = require("./is");
var import_read = require("./read");
var import_remove = require("./remove");
var import_write = require("./write");
var fileLoaders = Object.freeze({
".mjs": loadJs,
".cjs": loadJs,
".js": loadJs,
".ts": loadTs,
".json": loadJson,
".yaml": loadYaml,
".yml": loadYaml
});
var fileLoadersSync = Object.freeze({
".cjs": loadJsSync,
".js": loadJsSync,
".ts": loadTsSync,
".json": loadJsonSync,
".yaml": loadYamlSync,
".yml": loadYamlSync
});
async function loadJs(path) {
try {
const { href } = (0, import_node_url.pathToFileURL)(path);
const content = await import(href);
return (0, import_type.isESModule)(content) ? content.default : content;
} catch (dynamicImportError) {
const dynamicImportErr = dynamicImportError;
try {
return loadJsSync(path);
} catch (requireError) {
const requireErr = requireError;
if (requireErr.code === "ERR_REQUIRE_ESM" || requireErr instanceof SyntaxError && requireErr.toString().includes("Cannot use import statement outside a module")) {
dynamicImportErr.message = `Load ${path} failed: ${dynamicImportErr.message}`;
throw dynamicImportErr;
}
requireErr.message = `Load ${path} failed: ${dynamicImportErr.message}`;
throw requireError;
}
}
}
var importFresh;
function loadJsSync(path) {
if (!importFresh) {
importFresh = require("import-fresh");
}
try {
const content = importFresh(path);
return content;
} catch (error) {
const err = error;
err.message = `Load ${path} failed: ${err.message}`;
throw err;
}
}
var typescript;
async function loadTs(path) {
if (!typescript) {
typescript = require("typescript");
}
const compiledPath = `${path.slice(0, -2)}cjs`;
try {
const config = resolveTsConfig((0, import_node_path.dirname)(path)) ?? {};
config.compilerOptions = {
...config.compilerOptions,
module: typescript.ModuleKind.NodeNext,
moduleResolution: typescript.ModuleResolutionKind.NodeNext,
target: typescript.ScriptTarget.ES2022,
noEmit: false
};
const content = await (0, import_read.readFile)(path);
let transpiledContent = "";
try {
transpiledContent = typescript.transpileModule(content, config).outputText;
} catch (error) {
const err = error;
err.message = `TypeScript Error in ${path}: ${err.message}`;
throw err;
}
await (0, import_write.writeFile)(compiledPath, transpiledContent);
const js = await loadJs(compiledPath);
return js;
} finally {
if (await (0, import_is.isPathExists)(compiledPath)) {
await (0, import_remove.remove)(compiledPath);
}
}
}
function loadTsSync(path) {
if (!typescript) {
typescript = require("typescript");
}
const compiledPath = `${path.slice(0, -2)}cjs`;
try {
const config = resolveTsConfig((0, import_node_path.dirname)(path)) ?? {};
config.compilerOptions = {
...config.compilerOptions,
module: typescript.ModuleKind.NodeNext,
moduleResolution: typescript.ModuleResolutionKind.NodeNext,
target: typescript.ScriptTarget.ES2022,
noEmit: false
};
const content = (0, import_read.readFileSync)(path);
let transpiledContent = "";
try {
transpiledContent = typescript.transpileModule(content, config).outputText;
} catch (error) {
const err = error;
err.message = `TypeScript Error in ${path}: ${err.message}`;
throw err;
}
(0, import_write.writeFileSync)(compiledPath, transpiledContent);
const js = loadJsSync(compiledPath);
return js;
} finally {
if ((0, import_is.isPathExistsSync)(compiledPath)) {
(0, import_remove.removeSync)(compiledPath);
}
}
}
var parseJson;
async function loadJson(path) {
if (!parseJson) {
parseJson = require("parse-json");
}
const content = await (0, import_read.readFile)(path);
try {
const json = parseJson(content);
return json;
} catch (error) {
const err = error;
err.message = `Parse ${path} failed: ${err.message}`;
throw err;
}
}
function loadJsonSync(path) {
if (!parseJson) {
parseJson = require("parse-json");
}
const content = (0, import_read.readFileSync)(path);
try {
const json = parseJson(content);
return json;
} catch (error) {
const err = error;
err.message = `Parse ${path} failed: ${err.message}`;
throw err;
}
}
var yaml;
async function loadYaml(path) {
if (!yaml) {
yaml = require("js-yaml");
}
const content = await (0, import_read.readFile)(path);
try {
const data = yaml.load(content);
return data;
} catch (error) {
const err = error;
err.message = `Load ${path} failed: ${err.message}`;
throw err;
}
}
function loadYamlSync(path) {
if (!yaml) {
yaml = require("js-yaml");
}
const content = (0, import_read.readFileSync)(path);
try {
const data = yaml.load(content);
return data;
} catch (error) {
const err = error;
err.message = `Load ${path} failed: ${err.message}`;
throw err;
}
}
function resolveTsConfig(dir) {
const path = typescript.findConfigFile(dir, (fileName) => {
return typescript.sys.fileExists(fileName);
});
if (path !== void 0) {
const { config, error } = typescript.readConfigFile(
path,
(path2) => typescript.sys.readFile(path2)
);
if (error) {
throw new Error(
`Resolve file ${path} failed: ${error.messageText.toString()}`
);
}
return config;
}
return {};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
fileLoaders,
fileLoadersSync,
loadJs,
loadJsSync,
loadJson,
loadJsonSync,
loadTs,
loadTsSync,
loadYaml,
loadYamlSync,
resolveTsConfig
});