UNPKG

unbag

Version:

一个专门用来开发npm工具的包

191 lines (190 loc) 5.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.changelogContentStringify = exports.changelogContentParser = exports.changelog = exports.ReleaseChangelogConfigDefault = void 0; var _fs = require("../../utils/fs.cjs"); var _log = require("./../../utils/log.cjs"); var _index = require("../../utils/message/index.cjs"); var _path = require("../../utils/path.cjs"); var _utils = require("./utils.cjs"); var _conventionalChangelog = _interopRequireDefault(require("conventional-changelog")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const ReleaseChangelogConfigDefault = exports.ReleaseChangelogConfigDefault = { filePath: "CHANGELOG.md", filePathResolve: async ({ finalUserConfig }) => { const { root, release: { changelog: { filePath } } } = finalUserConfig; const path = (0, _path.usePath)(); const absolutePath = path.resolve(root, filePath); return absolutePath; }, fileRead: async ({ finalUserConfig }) => { const { release: { changelog: { filePathResolve } } } = finalUserConfig; const changelogFileAbsolutePath = await filePathResolve({ finalUserConfig }); const fs = (0, _fs.useFs)(); const fileExist = await fs.pathExists(changelogFileAbsolutePath); const content = fileExist ? await fs.readFile(changelogFileAbsolutePath, "utf-8") : ""; return changelogContentParser(content); }, fileWrite: async ({ finalUserConfig, changelogRes }) => { const { release: { changelog: { filePathResolve } } } = finalUserConfig; const changelogFileAbsolutePath = await filePathResolve({ finalUserConfig }); const fs = (0, _fs.useFs)(); const changelogContent = changelogContentStringify(changelogRes); await fs.outputFile(changelogFileAbsolutePath, changelogContent); } }; const streamToString = stream => { const chunks = []; return new Promise((resolve, reject) => { stream.on("data", chunk => chunks.push(Buffer.from(chunk))); stream.on("error", err => reject(err)); stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8"))); }); }; const ChangelogHeaderDividerTag = "\n\n[comment]: # (!!!ChangelogHeaderDividerTag!!!)\n\n"; const ChangelogFooterDividerTag = "\n\n[comment]: # (!!!ChangelogFooterDividerTag!!!)\n\n"; const changelogContentParser = content => { const result = {}; const headerIndex = content.indexOf(ChangelogHeaderDividerTag); const footerIndex = content.indexOf(ChangelogFooterDividerTag); if (headerIndex > -1) { result.header = content.substring(0, headerIndex); } result.body = content.substring(headerIndex > -1 ? ChangelogHeaderDividerTag.length + headerIndex : 0, footerIndex > -1 ? footerIndex : void 0); if (footerIndex > -1) { result.footer = content.substring(footerIndex + ChangelogHeaderDividerTag.length); } return result; }; exports.changelogContentParser = changelogContentParser; const changelogContentStringify = content => { const { body, header, footer } = content; return "" + (header || "") + ChangelogHeaderDividerTag + (body || "") + ChangelogFooterDividerTag + (footer || ""); }; exports.changelogContentStringify = changelogContentStringify; const changelog = async params => { const { finalUserConfig, bumpRes } = params; const log = (0, _log.useLog)({ finalUserConfig }); const message = (0, _index.useMessage)({ locale: finalUserConfig.locale }); log.info(message.release.changelog.generating()); const { release: { dry, scope, preset, changelog: { fileRead, header, footer, fileWrite, fileWriteDisable, logAddChangesetDisable, scopeNoWriteDisable, genParserOpts, genWriterOpts } } } = finalUserConfig; const tagPrefix = await (0, _utils.useTagPrefix)({ finalUserConfig }); const parserOpts = await genParserOpts?.(); const writerOpts = await genWriterOpts?.(); const conventionalChangelogStream = (0, _conventionalChangelog.default)({ //@ts-ignore preset: { name: preset.path, ...preset.params }, tagPrefix, transform: (commit, cb) => { if (scope?.name) { if (commit.scope === scope.name) { if (!scopeNoWriteDisable) { commit.scope = void 0; } cb(null, commit); } else { cb(null, void 0); } } else { cb(null, commit); } } }, { version: bumpRes.version }, void 0, parserOpts, writerOpts); const newChangeset = await streamToString(conventionalChangelogStream); const oldContent = await fileRead({ finalUserConfig }); const newContent = { header, footer, body: "" + newChangeset + "\n" + (oldContent?.body || "") }; let _fileWriteDisable = fileWriteDisable; if (dry) { _fileWriteDisable = true; log.warn(message.release.dry.changelog.fileWriteDisable()); } if (!logAddChangesetDisable) { log.warn(message.release.changelog.newChangeset({ newChangeset })); } if (!_fileWriteDisable) { log.info(message.releaseChangelogFileWriting()); await fileWrite({ finalUserConfig, changelogRes: newContent }); log.info(message.releaseChangelogFileWriteSuccess()); } else { log.warn(message.releaseChangelogFileWriteDisable()); } return newContent; }; exports.changelog = changelog;