UNPKG

@plugjs/plug

Version:
118 lines (116 loc) 5.53 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; 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); // plugs/exports.ts var exports_exports = {}; module.exports = __toCommonJS(exports_exports); var import_node_os = require("node:os"); var import_node_path = require("node:path"); var import_asserts = require("../asserts.cjs"); var import_files = require("../files.cjs"); var import_fs = require("../fs.cjs"); var import_logging = require("../logging.cjs"); var import_paths = require("../paths.cjs"); var import_pipe = require("../pipe.cjs"); (0, import_pipe.install)("exports", class Exports { _packageJson; _outputPackageJson; _cjsExtension; _esmExtension; constructor(...args) { const options = args[0] || {}; const { packageJson = "package.json", outputPackageJson = packageJson, cjsExtension, esmExtension } = options; this._packageJson = packageJson; this._outputPackageJson = outputPackageJson; this._cjsExtension = cjsExtension; this._esmExtension = esmExtension; } async pipe(files, context) { const incomingFile = context.resolve(this._packageJson); const incomingData = await (0, import_fs.readFile)(incomingFile, "utf8"); const packageData = JSON.parse(incomingData); const outgoingFile = context.resolve(this._outputPackageJson); const outgoingDirectory = (0, import_paths.getAbsoluteParent)(outgoingFile); const type = packageData.type === "module" ? "module" : packageData.type === "commonjs" ? "commonjs" : packageData.type == null ? "commonjs" : void 0; (0, import_asserts.assert)(type, `Unknown module type "${packageData.type}" in ${(0, import_logging.$p)(incomingFile)}`); context.log.debug(`Package file ${(0, import_logging.$p)(incomingFile)} declares module type "${type}"`); const cjsExtension = this._cjsExtension || (type === "commonjs" ? ".js" : ".cjs"); const esmExtension = this._esmExtension || (type === "module" ? ".js" : ".mjs"); (0, import_asserts.assert)(cjsExtension !== esmExtension, `CommonJS and EcmaScript modules both resolve to same extension "${cjsExtension}"`); const exports2 = {}; function addExport(name, type2, kind, file) { if (!exports2[name]) exports2[name] = {}; if (!exports2[name][type2]) exports2[name][type2] = {}; exports2[name][type2][kind] = file; } const exts = [".d.mts", ".d.cts", ".d.ts", cjsExtension, esmExtension]; for (const [name, absolute] of files.pathMappings()) { const relative = (0, import_paths.assertRelativeChildPath)(outgoingDirectory, absolute); for (const ext of exts) { if (!relative.endsWith(ext)) continue; const base = `.${import_node_path.sep}${name.slice(0, -ext.length)}`; const exp = base.endsWith(`${import_node_path.sep}index`) ? base.slice(0, -6) : base; switch (ext) { case cjsExtension: addExport(exp, "require", "default", `.${import_node_path.sep}${relative}`); break; case esmExtension: addExport(exp, "import", "default", `.${import_node_path.sep}${relative}`); break; case ".d.cts": addExport(exp, "require", "types", `.${import_node_path.sep}${relative}`); break; case ".d.mts": addExport(exp, "import", "types", `.${import_node_path.sep}${relative}`); break; case ".d.ts": addExport(exp, "require", "types", `.${import_node_path.sep}${relative}`); addExport(exp, "import", "types", `.${import_node_path.sep}${relative}`); break; } } } if ("." in exports2) { const rootExport = exports2["."]; packageData["main"] = rootExport?.require?.default; packageData["module"] = rootExport?.import?.default; packageData["types"] = packageData["type"] === "module" ? rootExport?.import?.types : rootExport?.require?.types; } packageData["exports"] = Object.keys(exports2).sort().reduce((obj, name) => { const current = exports2[name]; if (!current) return obj; obj[name] = current.require?.default || current.import?.default ? { require: current.require?.default ? { types: current.require.types || void 0, default: current.require.default || void 0 } : void 0, import: current.import?.default ? { types: current.import.types || void 0, default: current.import.default || void 0 } : void 0 } : void 0; return obj; }, {}); const outgoingData = JSON.stringify(packageData, null, 2); context.log.info(`Writing new ${(0, import_logging.$p)(outgoingFile)}`, outgoingData); await (0, import_fs.writeFile)(outgoingFile, outgoingData + import_node_os.EOL, "utf8"); return import_files.Files.builder((0, import_paths.getAbsoluteParent)(outgoingFile)).add(outgoingFile).build(); } }); //# sourceMappingURL=exports.cjs.map