Coverage

100%
36
36
0

spire-of-babel.js

100%
36
36
0
LineHitsSource
11'use strict';
2
31var path = require('path');
4
51var babel = require('babel-core');
61var browserify = require('browserify');
7
81var babelify = require('babelify');
91var es2015 = require('babel-preset-es2015');
101var react = require('babel-preset-react');
11
121var TRANSFORM_DEFAULTS = {
13 bundle: false
14};
15
16/**
17 * Transforms a file with babel.
18 *
19 * @example spire.transformFileWithBabel(file).then(function (result) { console.log(result); });
20 * @param {String} file File path.
21 * @return {Object} Promise
22 * @public
23 */
24
251var transformFileWithBabel = function transformFileWithBabel(file) {
26
2710 return new Promise(function (resolve, reject) {
28
2910 babel.transformFile(file, {
30 presets: [es2015, react]
31 }, function (err, result) {
32
3310 if (err) {
341 return reject(new Error(err));
35 }
36
379 resolve(result.code);
38 });
39 });
40};
41
42/**
43 * Transforms a file with browserify.
44 *
45 * @example spire.transformFileWithBrowserify(file).then(function (result) { console.log(result); });
46 * @param {String} file File path.
47 * @return {Object} Promise
48 * @public
49 */
50
511var transformFileWithBrowserify = function transformFileWithBrowserify(file) {
52
532 return new Promise(function (resolve, reject) {
54
55 browserify(file).transform(babelify, {
56 presets: [es2015, react]
572 }).bundle(function (err, buffer) {
58
592 if (err) {
601 return reject(new Error(err));
61 }
62
631 resolve(buffer.toString());
64 });
65 });
66};
67
68/**
69 * Transforms a file.
70 *
71 * @example spire.transformFile(file, options).then(function (result) { console.log(result); });
72 * @param {String} file File path.
73 * @param {Object} [options] Options object.
74 * @param {Boolean} [options.bundle] Use browserify bundler.
75 * @return {Object} Promise
76 * @public
77 */
78
791var transformFile = function transformFile(file, options) {
80
8112 var settings = Object.assign({}, TRANSFORM_DEFAULTS, options);
82
8312 if (settings.bundle) {
84
852 return transformFileWithBrowserify(file, options);
86 } else {
87
8810 return transformFileWithBabel(file, options);
89 }
90};
91
92/**
93 * Parses a path into directory and filename or file regular expression pattern.
94 *
95 * @example console.log(spire.parseWatchPath(input));
96 * @param {String} input Path to parse.
97 * @return {Object} Object with directory, filename (pattern) and boolean flag.
98 * @public
99 */
100
1011var parseWatchPath = function parseWatchPath(input) {
102
1033 var directory = null;
1043 var filename = null;
105
1063 var recursive = false;
1073 var recursivePattern = /\/\*\*\/\/*/;
108
1093 if (input.match(recursivePattern)) {
110
1111 recursive = true;
112 }
113
1143 directory = path.dirname(input.replace(recursivePattern, '/'));
1153 filename = path.basename(input).replace(/^\*/, '');
116
1173 return {
118 directory: directory,
119 filename: filename,
120 recursive: recursive
121 };
122};
123
1241module.exports = {
125 transformFileWithBabel: transformFileWithBabel,
126 transformFileWithBrowserify: transformFileWithBrowserify,
127 transformFile: transformFile,
128 parseWatchPath: parseWatchPath
129};