@plugjs/plug
Version:
PlugJS Build System ===================
118 lines (116 loc) • 5.53 kB
JavaScript
;
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