mirror of
https://github.com/strapi/strapi.git
synced 2025-07-20 23:47:46 +00:00
70 lines
1.4 KiB
JavaScript
70 lines
1.4 KiB
JavaScript
![]() |
'use strict';
|
||
|
|
||
|
/**
|
||
|
* Module dependencies
|
||
|
*/
|
||
|
|
||
|
// Node.js core.
|
||
|
const path = require('path');
|
||
|
|
||
|
// Public node modules.
|
||
|
const _ = require('lodash');
|
||
|
const fs = require('fs-extra');
|
||
|
const reportback = require('reportback')();
|
||
|
|
||
|
/**
|
||
|
* Generate a JSON file
|
||
|
*/
|
||
|
|
||
|
module.exports = function (options, handlers) {
|
||
|
|
||
|
// Provide default values for handlers.
|
||
|
handlers = reportback.extend(handlers, {
|
||
|
alreadyExists: 'error'
|
||
|
});
|
||
|
|
||
|
// Provide defaults and validate required options.
|
||
|
_.defaults(options, {
|
||
|
force: false
|
||
|
});
|
||
|
|
||
|
const missingOpts = _.difference([
|
||
|
'rootPath',
|
||
|
'data'
|
||
|
], Object.keys(options));
|
||
|
|
||
|
if (missingOpts.length) {
|
||
|
return handlers.invalid(missingOpts);
|
||
|
}
|
||
|
|
||
|
const rootPath = path.resolve(process.cwd(), options.rootPath);
|
||
|
|
||
|
// Only override an existing file if `options.force` is true.
|
||
|
fs.exists(rootPath, function (exists) {
|
||
|
if (exists && !options.force) {
|
||
|
return handlers.alreadyExists('Something else already exists at `' + rootPath + '`.');
|
||
|
}
|
||
|
|
||
|
if (exists) {
|
||
|
fs.remove(rootPath, function deletedOldINode(err) {
|
||
|
if (err) {
|
||
|
return handlers.error(err);
|
||
|
}
|
||
|
_afterwards_();
|
||
|
});
|
||
|
} else {
|
||
|
_afterwards_();
|
||
|
}
|
||
|
|
||
|
function _afterwards_() {
|
||
|
fs.outputJSON(rootPath, options.data, {spaces: 2}, function (err) {
|
||
|
if (err) {
|
||
|
return handlers.error(err);
|
||
|
} else {
|
||
|
handlers.success();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
};
|