UNPKG

7.03 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.getPundleInstance = exports.TICK = exports.X = undefined;
7
8var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
9
10var getPundleInstance = exports.getPundleInstance = function () {
11 var _ref = _asyncToGenerator(function* (cli, terminal, projectPath, development, givenConfig, errorCallback) {
12 var config = normalizeConfig(projectPath, givenConfig);
13 var pundleEntry = config.includePolyfills && Array.isArray(givenConfig.babel.presets) && givenConfig.babel.presets.indexOf('babel-preset-motion') !== -1 ? [require.resolve('babel-regenerator-runtime'), 'index.js'] : ['index.js'];
14 var pundleConfig = {
15 entry: pundleEntry,
16 pathType: development ? 'filePath' : 'number',
17 rootDirectory: config.bundleDirectory,
18 replaceVariables: {
19 'process.env.NODE_ENV': development ? 'development' : 'production'
20 }
21 };
22
23 var plugins = [[require.resolve('pundle-npm-installer'), {
24 save: config.saveNpmModules,
25 rootDirectory: config.bundleDirectory,
26 beforeInstall: function beforeInstall(name) {
27 if (terminal) {
28 var message = 'Installing ' + name;
29 cli.addSpinner(message);
30 }
31 },
32 afterInstall: function afterInstall(name, error) {
33 if (terminal) {
34 var message = 'Installing ' + name;
35 cli.removeSpinner(message);
36 if (error) {
37 cli.log('Install ' + name + ' ' + X);
38 cli.log(error);
39 } else {
40 cli.log('Install ' + name + ' ' + TICK);
41 }
42 } else if (error) {
43 errorCallback(error);
44 }
45 }
46 }], [require.resolve('babel-pundle'), { config: config.babel }]];
47
48 if (!development) {
49 var _pundle = new _pundle3.default(pundleConfig);
50 yield _pundle.loadPlugins(plugins);
51 return _pundle;
52 }
53 var pundle = new _pundleDev2.default({
54 server: {
55 hmr: true,
56 port: config.webServerPort,
57 hmrPath: '/_/bundle_hmr',
58 bundlePath: '/_/bundle.js',
59 sourceRoot: config.publicDirectory,
60 sourceMapPath: '/_/bundle.js.map',
61 error: function error(_error) {
62 errorCallback(_error);
63 }
64 },
65 pundle: pundleConfig,
66 watcher: {},
67 generator: {
68 wrapper: 'hmr',
69 sourceMap: true
70 }
71 });
72 yield pundle.pundle.loadPlugins(plugins);
73 pundle.server.use('*', function serveRequest(req, res, next) {
74 var error = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];
75
76 if (['/_/bundle.js', '/_/bundle.js.map', '/_/bundle_hmr'].indexOf(req.baseUrl) !== -1) {
77 next();
78 return;
79 }
80 (0, _send2.default)(req, req.baseUrl, { root: config.publicDirectory, index: 'index.html' }).on('error', function () {
81 if (error) {
82 next();
83 return;
84 }
85 req.baseUrl = '/index.html';
86 serveRequest(req, res, next, true);
87 }).on('directory', function () {
88 return next();
89 }).pipe(res);
90 });
91 pundle.pundle.onDidProcess(function (_ref2) {
92 var filePath = _ref2.filePath;
93
94 if (filePath.indexOf('$root') === 0 && filePath.indexOf('node_modules') === -1 && filePath.indexOf('../') === -1) {
95 cli.log(_chalk2.default.dim(filePath) + ' ' + _chalk2.default.green(TICK));
96 }
97 });
98 return pundle;
99 });
100
101 return function getPundleInstance(_x, _x2, _x3, _x4, _x5, _x6) {
102 return _ref.apply(this, arguments);
103 };
104}();
105
106exports.getRandomNumber = getRandomNumber;
107exports.normalizeConfig = normalizeConfig;
108
109var _path = require('path');
110
111var _path2 = _interopRequireDefault(_path);
112
113var _send = require('send');
114
115var _send2 = _interopRequireDefault(_send);
116
117var _chalk = require('chalk');
118
119var _chalk2 = _interopRequireDefault(_chalk);
120
121var _pundle2 = require('pundle');
122
123var _pundle3 = _interopRequireDefault(_pundle2);
124
125var _pundleDev = require('pundle-dev');
126
127var _pundleDev2 = _interopRequireDefault(_pundleDev);
128
129function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
130
131function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { return step("next", value); }, function (err) { return step("throw", err); }); } } return step("next"); }); }; }
132
133var X = exports.X = '✗';
134var TICK = exports.TICK = '✓';
135
136// From: goo.gl/fZA6BF
137function getRandomNumber(min, max) {
138 return Math.floor(Math.random() * (max - min)) + min;
139}
140
141// NOTE: The reason we are not replacing these in config is because when we then save the config
142// We'd end up with absolute paths in it, using this function in every config user function
143// will let us avoid that.
144function normalizeConfig(projectPath, givenConfig) {
145 var config = Object.assign({}, givenConfig, {
146 babel: Object.assign({}, givenConfig.babel)
147 });
148 if (config.bundleDirectory.substr(0, 1) === '.') {
149 config.bundleDirectory = _path2.default.resolve(projectPath, config.bundleDirectory);
150 }
151 if (config.publicDirectory.substr(0, 1) === '.') {
152 config.publicDirectory = _path2.default.resolve(projectPath, config.publicDirectory);
153 }
154 if (!config.babel || _typeof(config.babel) !== 'object') {
155 config.babel = { plugins: [], presets: [] };
156 }
157 if (!Array.isArray(config.babel.plugins)) {
158 config.babel.plugins = [];
159 } else {
160 config.babel.plugins = config.babel.plugins.slice();
161 }
162 if (!Array.isArray(config.babel.presets)) {
163 config.babel.presets = [];
164 } else {
165 config.babel.presets = config.babel.presets.slice();
166 }
167 if (config.babel.presets.indexOf('babel-preset-motion') !== -1) {
168 config.babel.presets.splice(config.babel.presets.indexOf('babel-preset-motion'), 1, require.resolve(config.includePolyfills ? 'babel-preset-es2015' : 'babel-preset-es2015-sane'), require.resolve('babel-preset-motion'));
169 }
170 config.babel.plugins = config.babel.plugins.map(function (givenEntry) {
171 if (!givenEntry) {
172 return givenEntry;
173 }
174 var entry = Array.isArray(givenEntry) ? givenEntry : [givenEntry, {}];
175 if (entry[0] === 'motion-style/transform') {
176 entry[0] = require.resolve('motion-style/transform');
177 }
178 if (!_path2.default.isAbsolute(entry[0])) {
179 if (entry[0].substr(0, 1) === '.') {
180 entry[0] = _path2.default.resolve(projectPath, entry[0]);
181 } else {
182 entry[0] = _path2.default.join(projectPath, 'node_modules', entry[0]);
183 }
184 }
185 return entry;
186 });
187 return config;
188}
189//# sourceMappingURL=helpers.js.map
\No newline at end of file