@tinymce/beehive-flow
Version:
A CLI tool implementing the beehive flow git branching process
78 lines • 4.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.shouldNotHavePreReleasePackages = exports.writePackageJsonFileWithNewVersion = exports.setVersion = exports.writePackageJsonFile = exports.toJson = exports.parsePackageJsonFileInFolder = exports.parsePackageJsonFile = exports.decode = exports.decodeE = exports.pjInFolder = exports.packageJsonCodec = exports.versionCodec = void 0;
const tslib_1 = require("tslib");
const path = tslib_1.__importStar(require("path"));
const function_1 = require("fp-ts/function");
const O = tslib_1.__importStar(require("fp-ts/Option"));
const R = tslib_1.__importStar(require("fp-ts/Record"));
const t = tslib_1.__importStar(require("io-ts"));
const JsonUtils = tslib_1.__importStar(require("../utils/JsonUtils"));
const PromiseUtils = tslib_1.__importStar(require("../utils/PromiseUtils"));
const IotsUtils = tslib_1.__importStar(require("../utils/IotsUtils"));
const PreRelease = tslib_1.__importStar(require("./PreRelease"));
const Version = tslib_1.__importStar(require("./Version"));
exports.versionCodec = new t.Type('versionCodec',
// We don't need a type guard function, so just provide a dummy one that always fails
(input) => false, IotsUtils.validateEither(Version.parseVersionE), Version.versionToString);
const packageJsonCodec = () => {
const mandatory = t.type({
name: t.string
});
const partial = t.partial({
version: t.string.pipe(exports.versionCodec),
workspaces: t.array(t.string),
beehiveFlow: t.partial({
primaryWorkspace: t.string
}),
dependencies: t.record(t.string, t.string),
devDependencies: t.record(t.string, t.string)
});
return t.intersection([mandatory, partial]);
};
exports.packageJsonCodec = packageJsonCodec;
const pjInFolder = (folder) => path.join(folder, 'package.json');
exports.pjInFolder = pjInFolder;
const decodeE = (j) => (0, exports.packageJsonCodec)().decode(j);
exports.decodeE = decodeE;
const decode = async (j) => PromiseUtils.eitherToPromise((0, exports.decodeE)(j));
exports.decode = decode;
const parsePackageJsonFile = (file) => JsonUtils.parseJsonFile(file).then(exports.decode);
exports.parsePackageJsonFile = parsePackageJsonFile;
const parsePackageJsonFileInFolder = (folder) => (0, exports.parsePackageJsonFile)((0, exports.pjInFolder)(folder));
exports.parsePackageJsonFileInFolder = parsePackageJsonFileInFolder;
const toJson = (pj) => (0, exports.packageJsonCodec)().encode(pj);
exports.toJson = toJson;
const writePackageJsonFile = (file, pj) => JsonUtils.writeJsonFile(file, (0, exports.toJson)(pj));
exports.writePackageJsonFile = writePackageJsonFile;
const setVersion = (pj, version) => ({
...pj,
version: O.toUndefined(version)
});
exports.setVersion = setVersion;
const writePackageJsonFileWithNewVersion = async (pj, newVersion, pjFile) => {
console.log(`Setting version in ${pjFile} to: ${Version.versionToString(newVersion)}`);
const newPj = (0, exports.setVersion)(pj, O.some(newVersion));
await (0, exports.writePackageJsonFile)(pjFile, newPj);
return newPj;
};
exports.writePackageJsonFileWithNewVersion = writePackageJsonFileWithNewVersion;
const hasPreReleaseDependency = (version) => version.includes('-' + PreRelease.releaseCandidate) ||
version.includes('-' + PreRelease.featureBranch) ||
version.includes('-' + PreRelease.hotfixBranch) ||
version.includes('-' + PreRelease.spikeBranch) ||
version.includes('-spike'); // Legacy spike branch prefix
const lookupDeps = (pj, name, filter) => (0, function_1.pipe)(O.fromNullable(pj[name]), O.getOrElse(() => ({})), R.filterWithIndex(filter));
const shouldNotHavePreReleasePackages = async (pj) => {
const getInvalidDeps = (dependencies) => (0, function_1.pipe)(dependencies, R.filter(hasPreReleaseDependency), R.keys);
const invalidDeps = getInvalidDeps({
...lookupDeps(pj, 'dependencies', () => true),
...lookupDeps(pj, 'devDependencies', (key) => key === '@tinymce/beehive-flow')
});
if (invalidDeps.length > 0) {
const names = invalidDeps.join(', ');
return PromiseUtils.fail(`Pre-release versions were found for: ${names}`);
}
};
exports.shouldNotHavePreReleasePackages = shouldNotHavePreReleasePackages;
//# sourceMappingURL=PackageJson.js.map