@ng-builders/semrel
Version:
Custom Angular CLI builders
74 lines • 3.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const execa_1 = tslib_1.__importDefault(require("execa"));
const fs_1 = require("fs");
const path_1 = require("path");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const semver_1 = tslib_1.__importDefault(require("semver"));
exports.STABLE_CHANNEL = 'stable';
function parseTag(tag) {
var _a, _b, _c;
const [project, version = project] = tag.split('@');
const channel = (_c = (_b = (_a = semver_1.default.parse(version)) === null || _a === void 0 ? void 0 : _a.prerelease) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : exports.STABLE_CHANNEL;
return {
project,
version,
channel: typeof channel === 'string' ? channel : undefined
};
}
exports.parseTag = parseTag;
function getTags(branch) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { stdout } = yield execa_1.default('git', ['tag', '--merged', branch]);
return stdout
.split('\n')
.map(tag => tag.trim())
.filter(tag => !!tag)
.map(parseTag);
});
}
exports.getTags = getTags;
function getSortedVersions(tags, { project, channel = exports.STABLE_CHANNEL }) {
const versions = tags
.filter(tag => tag.project === project && tag.channel === channel)
.map(tag => tag.version);
if (channel !== exports.STABLE_CHANNEL && !versions.length) {
// try to find some stable versions
return getSortedVersions(tags, { project });
}
return semver_1.default.rsort(versions);
}
exports.getSortedVersions = getSortedVersions;
function prepare({ publishPath }, context) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const pckg = JSON.parse(fs_1.readFileSync(path_1.join(publishPath, 'package.json')).toString());
yield rxjs_1.from(['dependencies', 'peerDependencies', 'devDependencies'])
.pipe(operators_1.filter(type => !!pckg[type]), operators_1.concatMap((type) => rxjs_1.from(Object.entries(pckg[type])).pipe(operators_1.filter(([, version]) => version === '0.0.0-development'), operators_1.concatMap(([name]) => tslib_1.__awaiter(this, void 0, void 0, function* () {
const [, project = name] = name.split('/');
const tags = yield getTags(context.branch.name);
const [latest] = yield getSortedVersions(tags, {
project,
channel: context.branch.channel
});
pckg[type][name] = latest;
})))))
.toPromise();
fs_1.writeFileSync(path_1.join(publishPath, 'package.json'), JSON.stringify(pckg, null, 2));
});
}
exports.prepare = prepare;
function preparePlugin({ publishable, publishPath }) {
let plugin;
try {
require.resolve('@ng-builders/semrel');
plugin = '@ng-builders/semrel';
}
catch (e) {
plugin = './dist/libs/semrel';
}
return publishable ? [plugin, { publishPath }] : null;
}
exports.preparePlugin = preparePlugin;
//# sourceMappingURL=prepare.js.map