aboutsummaryrefslogtreecommitdiff
path: root/node_modules/gulp-json-transform/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/gulp-json-transform/index.js')
-rw-r--r--node_modules/gulp-json-transform/index.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/node_modules/gulp-json-transform/index.js b/node_modules/gulp-json-transform/index.js
new file mode 100644
index 000000000..a42f4239c
--- /dev/null
+++ b/node_modules/gulp-json-transform/index.js
@@ -0,0 +1,59 @@
+var Promise = require('promise');
+var through = require('through2');
+var gutil = require('gulp-util');
+var PluginError = gutil.PluginError;
+
+const PLUGIN_NAME = 'gulp-json-transform';
+
+function jsonPromiseParse(rawStr) {
+ return new Promise(function(resolve, reject) {
+ var json;
+ try {
+ json = JSON.parse(rawStr);
+ } catch (e) {
+ return reject(new Error('Invalid JSON: ' + e.message));
+ }
+ resolve(json);
+ });
+}
+
+module.exports = function(transformFn, jsonSpace) {
+ if (!transformFn) {
+ throw new PluginError(PLUGIN_NAME, 'Missing transform function!');
+ }
+
+ return through.obj(function(file, enc, cb) {
+ var self = this;
+
+ if (file.isStream()) {
+ return self.emit('error', new PluginError(PLUGIN_NAME, 'Streaming not supported'));
+ }
+
+ if (file.isBuffer()) {
+ var fileContent = file.contents.toString(enc);
+
+ jsonPromiseParse(fileContent)
+ .then(function(data){
+ return transformFn(data, {
+ path: file.path,
+ relative: file.relative,
+ base: file.base
+ });
+ })
+ .then(function(output) {
+ var isString = (typeof output === 'string');
+ file.contents = new Buffer(isString ? output : JSON.stringify(output, null, jsonSpace));
+ self.push(file);
+ cb();
+ })
+ .catch(function(e) {
+ gutil.log(PLUGIN_NAME + ':', gutil.colors.red(e.message));
+ self.emit('error', new PluginError(PLUGIN_NAME, e));
+ self.emit('end');
+ });
+
+ }
+
+ });
+
+};