unbag
Version:
一个专门用来开发npm工具的包
191 lines (190 loc) • 5.62 kB
JavaScript
;
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;