Coverage

100%
61
61
0

spire-of-babel.js

100%
48
48
0
LineHitsSource
11'use strict';
2
31var atob = require('atob');
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 sourceMapPattern = /\/\/# sourceMappingURL=data:application\/json;charset=utf-8;base64,(.*)/;
131var sourceMapPatternMatchIndex = 1;
14
151var OPTION_DEFAULTS = {
16 'bundle': false,
17 'output': null,
18 'sourcemap': false
19};
20
21/**
22 * Transforms a file with babel.
23 *
24 * @example spire.transformFileWithBabel(file).then(function (result) { console.log(result); });
25 * @param {String} file File path.
26 * @param {Object} [options] Options object.
27 * @param {Boolean} [options.sourcemap] Generate sourcemap.
28 * @return {Object} Promise
29 * @public
30 */
31
321var transformFileWithBabel = function transformFileWithBabel(file, options) {
3313 return new Promise(function (resolve, reject) {
34
3513 var settings = Object.assign({}, OPTION_DEFAULTS, options);
36
3713 var sourceMaps = true;
38
3913 if (settings.sourcemap && !settings.output) {
40
411 sourceMaps = 'inline';
42 }
43
4413 babel.transformFile(file, {
45 'presets': [es2015, react],
46 sourceMaps: sourceMaps
47 }, function (err, result) {
48
4913 if (err) {
50
511 return reject(new Error(err));
52 }
53
5412 var code = result.code.trim() + '\n';
5512 var map = null;
56
5712 if (settings.sourcemap) {
58
593 map = JSON.stringify(result.map) + '\n';
60
613 if (settings.output) {
62
632 code = code + '//# sourceMappingURL=' + settings.output + '.map\n';
64 }
65 }
66
6712 return resolve({
68 code: code,
69 map: map
70 });
71 });
72 });
73};
74
75/**
76 * Transforms a file with browserify.
77 *
78 * @example spire.transformFileWithBrowserify(file).then(function (result) { console.log(result); });
79 * @param {String} file File path.
80 * @param {Object} [options] Options object.
81 * @param {Boolean} [options.sourcemap] Generate sourcemap.
82 * @return {Object} Promise
83 * @public
84 */
85
861var transformFileWithBrowserify = function transformFileWithBrowserify(file, options) {
875 return new Promise(function (resolve, reject) {
88
895 var settings = Object.assign({}, OPTION_DEFAULTS, options);
90
915 var debug = false;
92
935 if (settings.sourcemap) {
94
953 debug = true;
96 }
97
98 browserify(file, { debug: debug }).transform(babelify, {
99 'presets': [es2015, react]
1005 }).bundle(function (err, buffer) {
101
1025 if (err) {
103
1041 return reject(new Error(err));
105 }
106
1074 var code = buffer.toString().trim() + '\n';
1084 var map = null;
109
1104 if (settings.sourcemap) {
111
1123 map = atob(sourceMapPattern.exec(code)[sourceMapPatternMatchIndex]);
113
1143 if (settings.output) {
115
1162 code = code.replace(sourceMapPattern, '//# sourceMappingURL=' + settings.output + '.map\n');
117 }
118 }
119
1204 return resolve({
121 code: code,
122 map: map
123 });
124 });
125 });
126};
127
128/**
129 * Transforms a file.
130 *
131 * @example spire.transformFile(file, options).then(function (result) { console.log(result); });
132 * @param {String} file File path.
133 * @param {Object} [options] Options object.
134 * @param {Boolean} [options.bundle] Use browserify bundler.
135 * @param {Boolean} [options.sourcemap] Generate sourcemap.
136 * @return {Object} Promise
137 * @public
138 */
139
1401var transformFile = function transformFile(file, options) {
141
14218 var settings = Object.assign({}, OPTION_DEFAULTS, options);
143
14418 if (settings.bundle) {
145
1465 return transformFileWithBrowserify(file, options);
147 }
148
14913 return transformFileWithBabel(file, options);
150};
151
1521module.exports = {
153 transformFileWithBabel: transformFileWithBabel,
154 transformFileWithBrowserify: transformFileWithBrowserify,
155 transformFile: transformFile
156};

utils.js

100%
13
13
0
LineHitsSource
11'use strict';
2
31var path = require('path');
4
5/**
6 * Parses a path into directory and filename or file regular expression pattern.
7 *
8 * @example console.log(spire.parseWatchPath(input));
9 * @param {String} input Path to parse.
10 * @return {Object} Object with directory, filename (pattern) and boolean flag.
11 * @public
12 */
13
141var parseWatchPath = function parseWatchPath(input) {
15
163 var directory = null;
173 var filename = null;
18
193 var recursive = false;
203 var recursivePattern = /\/\*\*\/\/*/;
21
223 if (input.match(recursivePattern)) {
23
241 recursive = true;
25 }
26
273 directory = path.dirname(input.replace(recursivePattern, '/'));
283 filename = path.basename(input).replace(/^\*/, '');
29
303 return {
31 directory: directory,
32 filename: filename,
33 recursive: recursive
34 };
35};
36
371module.exports = {
38 parseWatchPath: parseWatchPath
39};