UNPKG

@eljs/utils

Version:
248 lines (246 loc) 7.2 kB
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 });