add term
This commit is contained in:
78
static/term/pkg/axios/bin/injectContributorsList.js
Normal file
78
static/term/pkg/axios/bin/injectContributorsList.js
Normal file
@ -0,0 +1,78 @@
|
||||
import fs from 'fs/promises';
|
||||
import path from 'path';
|
||||
import {renderContributorsList, getTagRef, renderPRsList} from './contributors.js';
|
||||
import asyncReplace from 'string-replace-async';
|
||||
import {fileURLToPath} from "url";
|
||||
import {colorize} from "./helpers/colorize.js";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const CONTRIBUTORS_TEMPLATE = path.resolve(__dirname, '../templates/contributors.hbs');
|
||||
const PRS_TEMPLATE = path.resolve(__dirname, '../templates/prs.hbs');
|
||||
|
||||
const injectSection = async (name, contributorsRE, injector, infile = '../CHANGELOG.md') => {
|
||||
console.log(colorize()`Checking ${name} sections in ${infile}`);
|
||||
|
||||
infile = path.resolve(__dirname, infile);
|
||||
|
||||
const content = String(await fs.readFile(infile));
|
||||
const headerRE = /^#+\s+\[([-_\d.\w]+)].+?$/mig;
|
||||
|
||||
let tag;
|
||||
let index = 0;
|
||||
let isFirstTag = true;
|
||||
|
||||
const newContent = await asyncReplace(content, headerRE, async (match, nextTag, offset) => {
|
||||
const releaseContent = content.slice(index, offset);
|
||||
|
||||
const hasSection = contributorsRE.test(releaseContent);
|
||||
|
||||
const currentTag = tag;
|
||||
|
||||
tag = nextTag;
|
||||
index = offset + match.length;
|
||||
|
||||
if(currentTag) {
|
||||
if (hasSection) {
|
||||
console.log(colorize()`[${currentTag}]: ✓ OK`);
|
||||
} else {
|
||||
const target = isFirstTag && (!await getTagRef(currentTag)) ? '' : currentTag;
|
||||
|
||||
console.log(colorize()`[${currentTag}]: ❌ MISSED` + (!target ? ' (UNRELEASED)' : ''));
|
||||
|
||||
isFirstTag = false;
|
||||
|
||||
console.log(`Generating section...`);
|
||||
|
||||
const section = await injector(target);
|
||||
|
||||
if (!section) {
|
||||
return match;
|
||||
}
|
||||
|
||||
console.log(colorize()`\nRENDERED SECTION [${name}] for [${currentTag}]:`);
|
||||
console.log('-------------BEGIN--------------\n');
|
||||
console.log(section);
|
||||
console.log('--------------END---------------\n');
|
||||
|
||||
return section + '\n' + match;
|
||||
}
|
||||
}
|
||||
|
||||
return match;
|
||||
});
|
||||
|
||||
await fs.writeFile(infile, newContent);
|
||||
}
|
||||
|
||||
await injectSection(
|
||||
'PRs',
|
||||
/^\s*### PRs/mi,
|
||||
(tag) => tag ? '' : renderPRsList(tag, PRS_TEMPLATE, {awesome_threshold: 5, comments_threshold: 7}),
|
||||
);
|
||||
|
||||
await injectSection(
|
||||
'contributors',
|
||||
/^\s*### Contributors/mi,
|
||||
(tag) => renderContributorsList(tag, CONTRIBUTORS_TEMPLATE)
|
||||
);
|
Reference in New Issue
Block a user