UNPKG

@arthurgubaidullin/nx-embed-dependencies

Version:

This plugin for [Nx](https://nx.dev) helps injecting local dependencies into a package.

64 lines 4.04 kB
"use strict"; 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