Skip to content

Commit fd8b284

Browse files
committed
add script to process rfcs
1 parent f24a6e3 commit fd8b284

File tree

4 files changed

+107
-1
lines changed

4 files changed

+107
-1
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,7 @@
2727
/package.json.ember-try
2828
/package-lock.json.ember-try
2929
/yarn.lock.ember-try
30+
31+
# rfcs text
32+
/rfcs/
33+
/processed-rfcs/

ember-cli-build.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ const EmberApp = require('ember-cli/lib/broccoli/ember-app');
44

55
module.exports = function (defaults) {
66
let app = new EmberApp(defaults, {
7-
// Add options here
7+
rfcProcess: {
8+
textLocation: 'processed-rfcs',
9+
},
810
});
911

1012
// Use `app.import` to add additional libraries to the generated

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
},
1313
"scripts": {
1414
"build": "ember build --environment=production",
15+
"clone": "rm -rf rfcs processed-rfcs && git clone https://github.com/emberjs/rfcs.git && node process-rfcs",
1516
"lint": "npm-run-all --aggregate-output --continue-on-error --parallel \"lint:!(fix)\"",
1617
"lint:fix": "npm-run-all --aggregate-output --continue-on-error --parallel lint:*:fix",
1718
"lint:hbs": "ember-template-lint .",
@@ -55,12 +56,15 @@
5556
"eslint-plugin-node": "^11.1.0",
5657
"eslint-plugin-prettier": "^3.4.1",
5758
"eslint-plugin-qunit": "^6.2.0",
59+
"fs-extra": "^10.1.0",
5860
"loader.js": "^4.7.0",
61+
"lodash": "^4.17.21",
5962
"npm-run-all": "^4.1.5",
6063
"prettier": "^2.5.1",
6164
"qunit": "^2.17.2",
6265
"qunit-dom": "^1.6.0",
6366
"rfc-process": "^0.1.1"
67+
"yaml-front-matter": "^4.1.1"
6468
},
6569
"engines": {
6670
"node": "12.* || 14.* || >= 16"

process-rfcs.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
const { mkdirSync, readdirSync, readFileSync, writeFileSync } = require('fs');
2+
const { join } = require('path');
3+
const yamlFront = require('yaml-front-matter');
4+
const { kebabCase } = require('lodash');
5+
const { copySync } = require('fs-extra');
6+
7+
mkdirSync('processed-rfcs/text', { recursive: true});
8+
9+
function releaseVersions(versions) {
10+
let processedVersions = '';
11+
12+
for (let v in versions) {
13+
if (versions[v] && versions[v] !== 'vX.Y.Z') {
14+
processedVersions += ` ${v}: ${versions[v]}\n`;
15+
}
16+
}
17+
18+
return processedVersions;
19+
}
20+
21+
const teamMap = {
22+
'Ember.js': 'framework',
23+
'Ember CLI': 'cli',
24+
'Ember Data': 'data',
25+
'Ember-CLI': 'cli',
26+
'ember-cli': 'cli',
27+
'ember-data': 'data',
28+
'Ember Learn': 'learning',
29+
framework: 'framework',
30+
learning: 'learning',
31+
Steering: 'steering',
32+
Learning: 'learning',
33+
data: 'data',
34+
EmberData: 'data',
35+
Ember: 'framework',
36+
CLI: 'cli',
37+
TypeScript: 'typescript',
38+
};
39+
40+
function teams(teams) {
41+
if (!teams) {
42+
return '';
43+
}
44+
45+
const processedTeams = teams
46+
.replace(
47+
/^(All teams|All)$/,
48+
'Ember.js, Ember Data, Ember CLI, Learning, TypeScript, Steering'
49+
)
50+
.split(',')
51+
.map((t) => t.trim())
52+
.map((t) => {
53+
let newTeam = teamMap[t];
54+
if (!newTeam) {
55+
throw new Error(`what is ${t}`);
56+
}
57+
return newTeam;
58+
});
59+
60+
let outputString = '';
61+
processedTeams.forEach((t) => {
62+
outputString += ` - ${t}\n`;
63+
});
64+
return outputString;
65+
}
66+
67+
const files = readdirSync('rfcs/text');
68+
69+
copySync('stages', 'processed-rfcs/stages');
70+
copySync('teams', 'processed-rfcs/teams');
71+
copySync('rfcs/README.md', 'processed-rfcs/README.md');
72+
73+
for (let file of files) {
74+
let fileContents = readFileSync(join('rfcs', 'text', file), 'utf8');
75+
let frontMatter = yamlFront.loadFront(fileContents);
76+
77+
writeFileSync(join('processed-rfcs', 'text', file), `---
78+
start-date: ${frontMatter['Start Date']}
79+
release-date:
80+
release-versions:
81+
${releaseVersions(frontMatter['Release Versions'])}
82+
teams:
83+
${teams(frontMatter['Relevant Team(s)'])}
84+
proposal-pr: ${frontMatter['RFC PR']}
85+
tracking-link: ${frontMatter['tracking-link'] ?? ''}
86+
stage: ${kebabCase(frontMatter.Stage ?? 'accepted')}
87+
---
88+
${frontMatter.__content}`);
89+
90+
// Stage: 'Accepted',
91+
// 'Start Date': 2022-02-25T00:00:00.000Z,
92+
// 'Release Date': 'Unreleased',
93+
// 'Release Versions': { 'ember-source': 'vX.Y.Z', 'ember-data': 'vX.Y.Z' },
94+
// 'Relevant Team(s)': 'Ember CLI',
95+
// 'RFC PR': 'https://github.com/emberjs/rfcs/pull/801',
96+
}

0 commit comments

Comments
 (0)