Skip to content

Commit 6c674f9

Browse files
authored
Mjs 18 add skip existing files to code generator (#17)
Mjs 18 add skip existing files to code generator
2 parents 37231cf + 101db75 commit 6c674f9

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

cli.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ program
3434
.option('-t, --templates <templateDir>', 'directory where templates are located (defaults to internal nodejs templates)')
3535
.option('-b, --basedir <baseDir>', 'directory to use as the base when resolving local file references (defaults to OpenAPI file directory)')
3636
.option('-c, --curl', 'generate a curl scripts', false)
37+
.option('-s, --skipExistingFiles', 'skip existing files')
38+
.option('-d, --deleteFolders <folderName>', 'directory names to be deleted, e.g. "auto"')
3739
.parse(process.argv);
3840

3941
if (!openapiFile) {
@@ -48,6 +50,8 @@ generator.generate({
4850
templates: program.templates ? path.resolve(process.cwd(), program.templates) : undefined,
4951
curl: program.curl,
5052
template,
53+
skipExistingFiles: program.skipExistingFiles,
54+
deleteFolders: program.deleteFolders
5155
}).then(() => {
5256
console.log(green('Done! ✨'));
5357
console.log(yellow('Check out your shiny new API at ') + magenta(program.output) + yellow('.'));

lib/generator.js

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,32 @@ const xfs = require('fs.extra');
1313
const randomName = require('project-name-generator');
1414
const registerPartial = require('./register-partial');
1515
const bundler = require('./bundler');
16+
const yellow = text => `\x1b[33m${text}\x1b[0m`;
17+
const findRemoveSync = require('find-remove');
1618

1719
const codegen = module.exports;
1820

1921
const HELPERS_DIRNAME = '.helpers';
2022
const PARTIALS_DIRNAME = '.partials';
2123

24+
/**
25+
* Deletes all matching subfolders in target directory
26+
*
27+
* @param {Object} config Configuration options
28+
* @returns {Promise}
29+
*/
30+
const deleteFolders = config => new Promise((resolve, reject) => {
31+
try {
32+
if (config.deleteFolders) {
33+
console.warn(yellow(`Deleting all subfolders named '${config.deleteFolders}' in ouput directory '${config.target_dir}'`));
34+
findRemoveSync(config.target_dir, {dir: config.deleteFolders});
35+
}
36+
resolve();
37+
} catch (e) {
38+
reject(e);
39+
}
40+
});
41+
2242
/**
2343
* Generates a file.
2444
*
@@ -46,10 +66,19 @@ const generateFile = options => new Promise((resolve, reject) => {
4666
const parsed_content = template(data);
4767
const template_path = path.relative(templates_dir, path.resolve(root, file_name));
4868
const generated_path = path.resolve(target_dir, template_path).replace(/.hbs$/, '');
49-
fs.writeFile(generated_path, parsed_content, 'utf8', (err) => {
50-
if (err) return reject(err);
69+
// WIP check here for existing?
70+
const skipFile = data.skipExistingFiles && fs.existsSync(generated_path);
71+
if (!skipFile) {
72+
fs.writeFile(generated_path, parsed_content, 'utf8', (err) => {
73+
if (err) return reject(err);
74+
resolve();
75+
});
76+
}
77+
else {
78+
console.warn(yellow(`Skipping file: ${generated_path}`));
5179
resolve();
52-
});
80+
}
81+
5382
} catch (e) {
5483
reject(e);
5584
}
@@ -306,6 +335,7 @@ codegen.generate = config => new Promise((resolve, reject) => {
306335
config.templates = `${config.templates}/${config.template}`;
307336

308337
async function start () {
338+
await deleteFolders(config);
309339
await registerHelpers(config);
310340
await registerPartials(config);
311341
await generateDirectoryStructure(config);

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"homepage": "https://github.com/fmvilas/openapi3-generator",
4848
"dependencies": {
4949
"commander": "^2.12.2",
50+
"find-remove": "^1.2.2",
5051
"fs.extra": "1.3.2",
5152
"handlebars": "^4.1.2",
5253
"js-yaml": "^3.13.1",

0 commit comments

Comments
 (0)