Skip to content

Commit 845b72d

Browse files
Robert Jacksonrondale-sc
andcommitted
Add update-docs command to generate dynamic README content.
Co-authored-by: Jonathan Jackson <[email protected]>
1 parent a47c0f0 commit 845b72d

3 files changed

Lines changed: 53 additions & 0 deletions

File tree

commands/global/new.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ module.exports.handler = function handler(options) {
3636
${projectName} <TRANSFORM NAME> path/of/files/ or/some**/*glob.js
3737
\`\`\`
3838
39+
## Transforms
40+
41+
<!--TRANSFORMS_TABLE_START-->
42+
<!--TRANSFORMS_TABLE_END-->
43+
3944
## Contributing
4045
4146
### Installation

commands/local/update-docs.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module.exports.command = 'update-docs';
2+
module.exports.desc = 'Update the project README with current list of transforms';
3+
4+
module.exports.handler = function handler() {
5+
const fs = require('fs-extra');
6+
7+
let TRANSFORMS_PLACE_HOLDER = /<!--TRANSFORMS_TABLE_START-->[\s\S]*<!--TRANSFORMS_TABLE_END-->/;
8+
9+
let transforms = fs
10+
.readdirSync('transforms')
11+
.filter(file => fs.lstatSync(`transforms/${file}`).isDirectory());
12+
13+
let readmeContent = transforms
14+
.map(name => `* [${name}](transforms/${name}/README.md)`)
15+
.join('\n');
16+
17+
fs.writeFileSync(
18+
'README.md',
19+
fs
20+
.readFileSync('README.md', 'utf8')
21+
.replace(
22+
TRANSFORMS_PLACE_HOLDER,
23+
`<!--TRANSFORMS_TABLE_START-->\n${readmeContent}\n<!--TRANSFORMS_TABLE_END-->`
24+
)
25+
);
26+
};

tests/cli-test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,28 @@ QUnit.module('codemod-cli', function(hooks) {
7474
);
7575
});
7676

77+
QUnit.module('update-docs', function(hooks) {
78+
setupProject(hooks);
79+
80+
QUnit.test(
81+
'updates top-level README with links to transform READMEs',
82+
wrap(function*(assert) {
83+
codemodProject.write({
84+
transforms: {
85+
foo: { 'README.md': 'some content' },
86+
bar: { 'README.md': 'some content' },
87+
},
88+
});
89+
90+
yield execa(EXECUTABLE_PATH, ['update-docs']);
91+
92+
let README = fs.readFileSync(codemodProject.path('README.md'), 'utf8');
93+
assert.ok(README.includes('* [foo](transforms/foo/README.md'), 'foo link');
94+
assert.ok(README.includes('* [bar](transforms/bar/README.md'), 'bar link');
95+
})
96+
);
97+
});
98+
7799
QUnit.module('generate', function(hooks) {
78100
setupProject(hooks);
79101

0 commit comments

Comments
 (0)