UNPKG

@ng-builders/semrel

Version:
74 lines 3.17 kB
"use strict"; 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