1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- var jsbeautify = require('js-beautify').js_beautify;
- var deepmerge = require('deepmerge');
- var through = require('through2');
- var PluginError = require('plugin-error');
- var detectIndent = require('detect-indent');
- module.exports = function(editor, jsbeautifyOptions, deepmergeOptions) {
- /*
- * deepmerge options
- */
- deepmergeOptions = deepmergeOptions || {};
- /*
- * create 'editBy' function from 'editor'
- */
- var editBy;
- if (typeof editor === 'function') {
- // edit JSON object by user specific function
- editBy = function(json) { return editor(json); };
- } else if (typeof editor === 'object') {
- // edit JSON object by merging with user specific object
- editBy = function(json) { return deepmerge(json, editor, deepmergeOptions); };
- } else if (typeof editor === 'undefined') {
- throw new PluginError('gulp-json-editor', 'missing "editor" option');
- } else {
- throw new PluginError('gulp-json-editor', '"editor" option must be a function or object');
- }
- /*
- * js-beautify options
- */
- jsbeautifyOptions = jsbeautifyOptions || {};
- /*
- * create through object and return it
- */
- return through.obj(function(file, encoding, callback) {
- // ignore it
- if (file.isNull()) {
- this.push(file);
- return callback();
- }
- // stream is not supported
- if (file.isStream()) {
- this.emit('error',
- new PluginError('gulp-json-editor', 'Streaming is not supported'));
- return callback();
- }
- try {
- // try to get current indentation
- var indent = detectIndent(file.contents.toString('utf8'));
- // beautify options for this particular file
- var beautifyOptions = deepmerge({}, jsbeautifyOptions); // make copy
- beautifyOptions.indent_size = beautifyOptions.indent_size || indent.amount || 2;
- beautifyOptions.indent_char = beautifyOptions.indent_char || (indent.type === 'tab' ? '\t' : ' ');
- beautifyOptions.beautify = !('beautify' in beautifyOptions && !beautifyOptions.beautify);
- // edit JSON object and get it as string notation
- var json = JSON.stringify(editBy(JSON.parse(file.contents.toString('utf8'))));
- // beautify JSON
- if (beautifyOptions.beautify) {
- json = jsbeautify(json, beautifyOptions);
- }
- // write it to file
- file.contents = Buffer.from(json);
- } catch (err) {
- this.emit('error', new PluginError('gulp-json-editor', err));
- }
- this.push(file);
- callback();
- });
- };
|