@arthurgubaidullin/nx-embed-dependencies
Version:
This plugin for [Nx](https://nx.dev) helps injecting local dependencies into a package.
64 lines • 4.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPackageName = exports.fixPackageJson = exports.insertDependencies = exports._removePeerDependencies = void 0;
const A = require("fp-ts/Array");
const E = require("fp-ts/Either");
const function_1 = require("fp-ts/function");
const IO = require("fp-ts/IO");
const IOE = require("fp-ts/IOEither");
const Json = require("fp-ts/Json");
const RA = require("fp-ts/ReadonlyArray");
const Record = require("fp-ts/Record");
const S = require("fp-ts/string");
const fs_1 = require("fs");
const t = require("io-ts");
const io_ts_types_1 = require("io-ts-types");
const PathReporter_1 = require("io-ts/PathReporter");
const path_1 = require("path");
const PackageJson = t.readonly(t.intersection([
t.type({
name: t.string,
peerDependencies: (0, io_ts_types_1.withFallback)(t.record(t.string, t.string), {}),
dependencies: (0, io_ts_types_1.withFallback)(t.record(t.string, t.string), {}),
}),
t.partial({
bundledDependencies: t.readonlyArray(t.string),
}),
]));
function _removePeerDependencies(packageJson, name) {
return (0, function_1.pipe)(packageJson.peerDependencies, Record.deleteAt(name), (peerDependencies) => (Object.assign(Object.assign({}, packageJson), { peerDependencies })));
}
exports._removePeerDependencies = _removePeerDependencies;
function _insertDependencies(deps) {
return (packageJson) => (0, function_1.pipe)(deps, RA.reduce({}, (b, a) => (Object.assign(Object.assign({}, b), { [a.name]: a.path }))), (deps) => (Object.assign(Object.assign({}, packageJson), { dependencies: Object.assign(Object.assign({}, packageJson.dependencies), deps) })));
}
function updateBundledDependencies(packageJson) {
var _a;
return (0, function_1.pipe)(packageJson.dependencies, Record.keys, RA.filter((k) => packageJson.dependencies[k].startsWith('file:')), RA.concat((_a = packageJson.bundledDependencies) !== null && _a !== void 0 ? _a : []), (bundledDependencies) => (Object.assign(Object.assign({}, packageJson), { bundledDependencies })));
}
function removePeerDependencyDuplucates(packageJson) {
return (0, function_1.pipe)(packageJson.dependencies, Record.keys, A.intersection(S.Eq)((0, function_1.pipe)(packageJson.peerDependencies, Record.keys)), A.map((a) => (packageJson) => _removePeerDependencies(packageJson, a)), A.reduce(packageJson, (acc, v) => v(acc)));
}
function insertDependencies(pathToPackage) {
return (deps) => (0, function_1.pipe)(readPackageJson(pathToPackage), IOE.map(_insertDependencies(deps)), IOE.chain((a) => writePackageJson(pathToPackage, a)), IOE.map(function_1.constVoid));
}
exports.insertDependencies = insertDependencies;
function fixPackageJson(pathToPackage) {
return (0, function_1.pipe)(readPackageJson(pathToPackage), IOE.map((a) => removePeerDependencyDuplucates(a)), IOE.map((a) => updateBundledDependencies(a)), IOE.chain((a) => writePackageJson(pathToPackage, a)));
}
exports.fixPackageJson = fixPackageJson;
function readPackageJson(pathToPackage) {
const pathToPackageJson = (0, path_1.join)(pathToPackage, 'package.json');
return (0, function_1.pipe)(pathToPackageJson, (a) => () => (0, fs_1.readFileSync)(a), IO.map(String), IO.map(Json.parse), IOE.mapLeft(E.toError), IOE.chainW((0, function_1.flow)(PackageJson.decode, E.mapLeft(PathReporter_1.failure), E.mapLeft((e) => new Error(JSON.stringify({
message: `Invalid package.json with path: \`${pathToPackageJson}\`.`,
errors: e,
}, null, 2))), IOE.fromEither)));
}
function writePackageJson(pathToPackage, packageJson) {
return (0, function_1.pipe)((0, path_1.join)(pathToPackage, 'package.json'), (a) => () => (0, fs_1.writeFileSync)(a, JSON.stringify(packageJson, null, 2)), IO.map(String), (f) => IOE.tryCatch(f, E.toError));
}
function getPackageName(pathToPackage) {
return (0, function_1.pipe)(readPackageJson(pathToPackage), IOE.map((a) => a.name));
}
exports.getPackageName = getPackageName;
//# sourceMappingURL=PackageJson.js.map