UNPKG

12.7 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.verbosity_levels = undefined;
7
8var _keys = require('babel-runtime/core-js/object/keys');
9
10var _keys2 = _interopRequireDefault(_keys);
11
12var _getIterator2 = require('babel-runtime/core-js/get-iterator');
13
14var _getIterator3 = _interopRequireDefault(_getIterator2);
15
16exports.default_webpack_assets = default_webpack_assets;
17exports.normalize_options = normalize_options;
18exports.alias_hook = alias_hook;
19exports.normalize_asset_path = normalize_asset_path;
20exports.uniform_path = uniform_path;
21
22var _path = require('path');
23
24var _path2 = _interopRequireDefault(_path);
25
26var _fs = require('fs');
27
28var _fs2 = _interopRequireDefault(_fs);
29
30var _requireHacker = require('require-hacker');
31
32var _requireHacker2 = _interopRequireDefault(_requireHacker);
33
34var _helpers = require('./helpers');
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38// returns a stub for webpack-assets.json if it doesn't exist yet
39// (because node.js and webpack are being run in parallel in development mode)
40function default_webpack_assets() {
41 var webpack_assets = {
42 javascript: {},
43 styles: {},
44 assets: {}
45 };
46
47 return webpack_assets;
48}
49
50// adds missing fields, etc
51function normalize_options(options) {
52 // parameters check
53 var _iteratorNormalCompletion = true;
54 var _didIteratorError = false;
55 var _iteratorError = undefined;
56
57 try {
58 for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(options)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
59 var _key = _step.value;
60
61 switch (_key) {
62 case 'assets':
63 if (!(0, _helpers.is_object)(options[_key])) {
64 throw new Error('"' + _key + '" configuration parameter must be ' + 'an object');
65 }
66 break;
67
68 case 'debug':
69 if (typeof options[_key] !== 'boolean') {
70 throw new Error('"' + _key + '" configuration parameter must be ' + 'a boolean');
71 }
72 break;
73
74 case 'verbose':
75 if (typeof options[_key] !== 'boolean') {
76 throw new Error('"' + _key + '" configuration parameter must be ' + 'a boolean');
77 }
78 // Legacy `verbose` option is converted to `verbosity`
79 console.log('[webpack-isomorphic-tools] WARNING: `verbose` option is now called `verbosity`');
80 if (options.verbose) {
81 options.verbosity = verbosity_levels.webpack_stats_for_each_build;
82 }
83 delete options.verbose;
84 break;
85
86 case 'verbosity':
87 if (typeof options[_key] !== 'string') {
88 throw new Error('"' + _key + '" configuration parameter must be ' + 'a string');
89 }
90 if ((0, _keys2.default)(verbosity_levels).map(function (key) {
91 return verbosity_levels[key];
92 }).indexOf(options[_key]) < 0) {
93 throw new Error('Unknown "verbosity" passed: ' + options[_key]);
94 }
95 break;
96
97 case 'port':
98 if (typeof options[_key] !== 'number') {
99 throw new Error('"' + _key + '" configuration parameter must be ' + 'a number');
100 }
101 break;
102
103 case 'webpack_assets_file_path':
104 case 'webpack_stats_file_path':
105 if (typeof options[_key] !== 'string') {
106 throw new Error('"' + _key + '" configuration parameter must be ' + 'a string');
107 }
108 break;
109
110 case 'alias':
111 if (!(0, _helpers.is_object)(options[_key])) {
112 throw new Error('"' + _key + '" configuration parameter must be ' + 'an object');
113 }
114 break;
115
116 case 'modules_directories':
117 if (!Array.isArray(options[_key])) {
118 throw new Error('"' + _key + '" configuration parameter must be ' + 'an array');
119 }
120 break;
121
122 case 'require_context':
123 if (typeof options[_key] !== 'boolean') {
124 throw new Error('"' + _key + '" configuration parameter must be ' + 'a boolean');
125 }
126 // Legacy `require_context` option is converted to `patch_require`
127 console.log('[webpack-isomorphic-tools] WARNING: `require_context` option is now called `patch_require`');
128 delete options.require_context;
129 options.patch_require = true;
130 break;
131
132 case 'patch_require':
133 if (typeof options[_key] !== 'boolean') {
134 throw new Error('"' + _key + '" configuration parameter must be ' + 'a boolean');
135 }
136 break;
137
138 default:
139 throw new Error('Unknown configuration parameter "' + _key + '"');
140 }
141 }
142
143 // if no assets specified (for whatever reason), make it an empty array
144 } catch (err) {
145 _didIteratorError = true;
146 _iteratorError = err;
147 } finally {
148 try {
149 if (!_iteratorNormalCompletion && _iterator.return) {
150 _iterator.return();
151 }
152 } finally {
153 if (_didIteratorError) {
154 throw _iteratorError;
155 }
156 }
157 }
158
159 if (!options.assets) {
160 // options.assets = {}
161 throw new Error('You must specify "assets" parameter in webpack-isomorphic-tools configuration');
162 }
163
164 // webpack-assets.json path, relative to the project base path
165 options.webpack_assets_file_path = options.webpack_assets_file_path || 'webpack-assets.json';
166
167 // webpack-stats.json path, relative to the project base path
168 options.webpack_stats_file_path = options.webpack_stats_file_path || 'webpack-stats.json';
169
170 // if Webpack aliases are supplied, validate them
171 if (options.alias) {
172 var _iteratorNormalCompletion2 = true;
173 var _didIteratorError2 = false;
174 var _iteratorError2 = undefined;
175
176 try {
177 for (var _iterator2 = (0, _getIterator3.default)((0, _keys2.default)(options.alias)), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
178 var key = _step2.value;
179
180 if (typeof options.alias[key] !== 'string') {
181 throw new Error('Invalid alias for "' + key + '": "' + options.alias[key] + '"');
182 }
183 }
184 } catch (err) {
185 _didIteratorError2 = true;
186 _iteratorError2 = err;
187 } finally {
188 try {
189 if (!_iteratorNormalCompletion2 && _iterator2.return) {
190 _iterator2.return();
191 }
192 } finally {
193 if (_didIteratorError2) {
194 throw _iteratorError2;
195 }
196 }
197 }
198 }
199
200 // generate names (if required) for each user defined asset type, normalize extensions
201 var _iteratorNormalCompletion3 = true;
202 var _didIteratorError3 = false;
203 var _iteratorError3 = undefined;
204
205 try {
206 for (var _iterator3 = (0, _getIterator3.default)((0, _keys2.default)(options.assets)), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
207 var asset_type = _step3.value;
208
209 var description = options.assets[asset_type];
210
211 // normalize extensions
212 if (description.extension) {
213 // sanity check
214 if (Array.isArray(description.extension)) {
215 throw new Error('Use "extensions" key instead of "extension" for specifying an array of file extensions for assets of type "' + asset_type + '"');
216 }
217
218 // sanity check
219 if (typeof description.extension !== 'string') {
220 throw new Error('"extension" value must be a string for assets of type "' + asset_type + '"');
221 }
222
223 // normalize
224 description.extensions = [description.extension];
225 delete description.extension;
226 }
227
228 // sanity check
229 if (!description.extensions) {
230 throw new Error('You must specify file extensions for assets of type "' + asset_type + '"');
231 }
232
233 // parameters check
234 var _iteratorNormalCompletion4 = true;
235 var _didIteratorError4 = false;
236 var _iteratorError4 = undefined;
237
238 try {
239 for (var _iterator4 = (0, _getIterator3.default)((0, _keys2.default)(description)), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
240 var _key2 = _step4.value;
241
242 switch (_key2) {
243 case 'extensions':
244 break;
245
246 case 'exclude':
247 case 'include':
248 if (!Array.isArray(description[_key2])) {
249 throw new Error('"' + _key2 + '" must be an array for asset type "' + asset_type + '"');
250 }
251 var _iteratorNormalCompletion5 = true;
252 var _didIteratorError5 = false;
253 var _iteratorError5 = undefined;
254
255 try {
256 for (var _iterator5 = (0, _getIterator3.default)(description[_key2]), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
257 var clusion = _step5.value;
258
259 if (typeof clusion !== 'string' && !(clusion instanceof RegExp) && typeof clusion !== 'function') {
260 throw new Error('Unsupported object type for exclusion/inclusion "' + clusion + '" for asset type "' + asset_type + '"');
261 }
262 }
263 } catch (err) {
264 _didIteratorError5 = true;
265 _iteratorError5 = err;
266 } finally {
267 try {
268 if (!_iteratorNormalCompletion5 && _iterator5.return) {
269 _iterator5.return();
270 }
271 } finally {
272 if (_didIteratorError5) {
273 throw _iteratorError5;
274 }
275 }
276 }
277
278 break;
279
280 case 'filter':
281 case 'parser':
282 case 'path':
283 if (typeof description[_key2] !== 'function') {
284 throw new Error('"' + _key2 + '" must be a function for asset type "' + asset_type + '"');
285 }
286 break;
287
288 case 'regular_expression':
289 if (!(description[_key2] instanceof RegExp)) {
290 throw new Error('"' + _key2 + '" must be a regular expression for asset type "' + asset_type + '"');
291 }
292 break;
293
294 default:
295 throw new Error('Unknown property "' + _key2 + '" for asset type "' + asset_type + '"');
296 }
297 }
298 } catch (err) {
299 _didIteratorError4 = true;
300 _iteratorError4 = err;
301 } finally {
302 try {
303 if (!_iteratorNormalCompletion4 && _iterator4.return) {
304 _iterator4.return();
305 }
306 } finally {
307 if (_didIteratorError4) {
308 throw _iteratorError4;
309 }
310 }
311 }
312 }
313 } catch (err) {
314 _didIteratorError3 = true;
315 _iteratorError3 = err;
316 } finally {
317 try {
318 if (!_iteratorNormalCompletion3 && _iterator3.return) {
319 _iterator3.return();
320 }
321 } finally {
322 if (_didIteratorError3) {
323 throw _iteratorError3;
324 }
325 }
326 }
327}
328
329// alias the path if an alias is found,
330// and resolve it to a global filesystem path
331function alias_hook(path, module, project_path, aliases, log) {
332 // possibly alias the path
333 var aliased_path = alias(path, aliases);
334
335 // return if an alias not found
336 if (!aliased_path) {
337 return;
338 }
339
340 // if an alias is found, require() the correct path
341 log.debug('require("' + path + '") was called and an alias was found, so aliasing to module path "' + aliased_path + '"');
342
343 // resolve the path to a real filesystem path (resolves `npm link`, etc)
344 var global_path = _requireHacker2.default.resolve(aliased_path, module);
345 log.debug(' resolved the path for the aliased module to ' + global_path);
346
347 return global_path;
348
349 // const result = require(global_path)
350 // // log.debug(` the path was found`)
351
352 // return require_hacker.to_javascript_module_source(result)
353}
354
355// alias the path provided the aliases map
356function alias(path, aliases) {
357 // if it's a path to a file - don't interfere
358 if ((0, _helpers.starts_with)(path, '.') || (0, _helpers.starts_with)(path, '/')) {
359 return;
360 }
361
362 // extract module name from the path
363 var slash_index = path.indexOf('/');
364 var module_name = slash_index >= 0 ? path.substring(0, slash_index) : path;
365 var rest = slash_index >= 0 ? path.substring(slash_index) : '';
366
367 // find an alias
368 var alias = aliases[module_name];
369
370 // if an alias is found, require() the correct path
371 if (alias) {
372 return alias + rest;
373 }
374}
375
376// converts global asset path to local-to-the-project asset path
377function normalize_asset_path(global_asset_path, project_path) {
378 // // if this path is outside project folder,
379 // // return it as a global path
380 // if (!starts_with(global_asset_path, project_path + path.sep))
381 // {
382 // return global_asset_path
383 // }
384
385 // this path is inside project folder,
386 // convert it to a relative path
387
388 // asset path relative to the project folder
389 var asset_path = _path2.default.relative(project_path, global_asset_path);
390
391 // for Windows:
392 //
393 // convert Node.js path to a correct Webpack path
394 asset_path = uniform_path(asset_path);
395
396 return asset_path;
397}
398
399// for Windows:
400//
401// converts Node.js path to a correct Webpack path
402function uniform_path(asset_path) {
403 // correct slashes
404 asset_path = asset_path.replace(/\\/g, '/');
405
406 // add './' in the beginning if it's missing (for example, in case of Windows)
407 if (asset_path.indexOf('.') !== 0) {
408 asset_path = './' + asset_path;
409 }
410
411 return asset_path;
412}
413
414var verbosity_levels = exports.verbosity_levels = {
415 no_webpack_stats: 'no webpack stats',
416 webpack_stats_for_each_build: 'webpack stats for each build'
417};
418//# sourceMappingURL=common.js.map
\No newline at end of file