| "use strict"; |
| /* eslint-disable @typescript-eslint/no-require-imports */ |
| var __importDefault = (this && this.__importDefault) || function (mod) { |
| return (mod && mod.__esModule) ? mod : { "default": mod }; |
| }; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| exports.loadTs = exports.loadTsSync = exports.loadYaml = exports.loadJson = exports.loadJs = exports.loadJsSync = void 0; |
| const fs_1 = require("fs"); |
| const promises_1 = require("fs/promises"); |
| const path_1 = __importDefault(require("path")); |
| const url_1 = require("url"); |
| let importFresh; |
| const loadJsSync = function loadJsSync(filepath) { |
| if (importFresh === undefined) { |
| importFresh = require('import-fresh'); |
| } |
| return importFresh(filepath); |
| }; |
| exports.loadJsSync = loadJsSync; |
| const loadJs = async function loadJs(filepath) { |
| try { |
| const { href } = (0, url_1.pathToFileURL)(filepath); |
| return (await import(href)).default; |
| } |
| catch (error) { |
| try { |
| return (0, exports.loadJsSync)(filepath, ''); |
| } |
| catch (requireError) { |
| if (requireError.code === 'ERR_REQUIRE_ESM' || |
| (requireError instanceof SyntaxError && |
| requireError |
| .toString() |
| .includes('Cannot use import statement outside a module'))) { |
| throw error; |
| } |
| throw requireError; |
| } |
| } |
| }; |
| exports.loadJs = loadJs; |
| let parseJson; |
| const loadJson = function loadJson(filepath, content) { |
| if (parseJson === undefined) { |
| parseJson = require('parse-json'); |
| } |
| try { |
| return parseJson(content); |
| } |
| catch (error) { |
| error.message = `JSON Error in ${filepath}:\n${error.message}`; |
| throw error; |
| } |
| }; |
| exports.loadJson = loadJson; |
| let yaml; |
| const loadYaml = function loadYaml(filepath, content) { |
| if (yaml === undefined) { |
| yaml = require('js-yaml'); |
| } |
| try { |
| return yaml.load(content); |
| } |
| catch (error) { |
| error.message = `YAML Error in ${filepath}:\n${error.message}`; |
| throw error; |
| } |
| }; |
| exports.loadYaml = loadYaml; |
| let typescript; |
| const loadTsSync = function loadTsSync(filepath, content) { |
| /* istanbul ignore next -- @preserve */ |
| if (typescript === undefined) { |
| typescript = require('typescript'); |
| } |
| const compiledFilepath = `${filepath.slice(0, -2)}cjs`; |
| try { |
| const config = resolveTsConfig(path_1.default.dirname(filepath)) ?? {}; |
| config.compilerOptions = { |
| ...config.compilerOptions, |
| module: typescript.ModuleKind.NodeNext, |
| moduleResolution: typescript.ModuleResolutionKind.NodeNext, |
| target: typescript.ScriptTarget.ES2022, |
| noEmit: false, |
| }; |
| content = typescript.transpileModule(content, config).outputText; |
| (0, fs_1.writeFileSync)(compiledFilepath, content); |
| return (0, exports.loadJsSync)(compiledFilepath, content).default; |
| } |
| catch (error) { |
| error.message = `TypeScript Error in ${filepath}:\n${error.message}`; |
| throw error; |
| } |
| finally { |
| if ((0, fs_1.existsSync)(compiledFilepath)) { |
| (0, fs_1.rmSync)(compiledFilepath); |
| } |
| } |
| }; |
| exports.loadTsSync = loadTsSync; |
| const loadTs = async function loadTs(filepath, content) { |
| if (typescript === undefined) { |
| typescript = (await import('typescript')).default; |
| } |
| const compiledFilepath = `${filepath.slice(0, -2)}mjs`; |
| let transpiledContent; |
| try { |
| try { |
| const config = resolveTsConfig(path_1.default.dirname(filepath)) ?? {}; |
| config.compilerOptions = { |
| ...config.compilerOptions, |
| module: typescript.ModuleKind.ES2022, |
| moduleResolution: typescript.ModuleResolutionKind.Bundler, |
| target: typescript.ScriptTarget.ES2022, |
| noEmit: false, |
| }; |
| transpiledContent = typescript.transpileModule(content, config).outputText; |
| await (0, promises_1.writeFile)(compiledFilepath, transpiledContent); |
| } |
| catch (error) { |
| error.message = `TypeScript Error in ${filepath}:\n${error.message}`; |
| throw error; |
| } |
| // eslint-disable-next-line @typescript-eslint/return-await |
| return await (0, exports.loadJs)(compiledFilepath, transpiledContent); |
| } |
| finally { |
| if ((0, fs_1.existsSync)(compiledFilepath)) { |
| await (0, promises_1.rm)(compiledFilepath); |
| } |
| } |
| }; |
| exports.loadTs = loadTs; |
| // eslint-disable-next-line @typescript-eslint/no-explicit-any |
| function resolveTsConfig(directory) { |
| const filePath = typescript.findConfigFile(directory, (fileName) => { |
| return typescript.sys.fileExists(fileName); |
| }); |
| if (filePath !== undefined) { |
| const { config, error } = typescript.readConfigFile(filePath, (path) => typescript.sys.readFile(path)); |
| if (error) { |
| throw new Error(`Error in ${filePath}: ${error.messageText.toString()}`); |
| } |
| return config; |
| } |
| return; |
| } |
| //# sourceMappingURL=loaders.js.map |