UNPKG

16.9 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createWorkerFarm = createWorkerFarm;
7Object.defineProperty(exports, "Asset", {
8 enumerable: true,
9 get: function () {
10 return _InternalAsset.default;
11 }
12});
13exports.BuildError = exports.default = exports.INTERNAL_RESOLVE = exports.INTERNAL_TRANSFORM = void 0;
14
15var _assert = _interopRequireDefault(require("assert"));
16
17var _diagnostic = _interopRequireWildcard(require("@parcel/diagnostic"));
18
19var _Dependency = require("./Dependency");
20
21var _Environment = require("./Environment");
22
23var _Asset = require("./public/Asset");
24
25var _BundleGraph = _interopRequireDefault(require("./public/BundleGraph"));
26
27var _BundlerRunner = _interopRequireDefault(require("./BundlerRunner"));
28
29var _workers = _interopRequireDefault(require("@parcel/workers"));
30
31var _nullthrows = _interopRequireDefault(require("nullthrows"));
32
33var _path = _interopRequireDefault(require("path"));
34
35var _AssetGraphBuilder = _interopRequireDefault(require("./AssetGraphBuilder"));
36
37var _utils = require("./utils");
38
39var _PackagerRunner = _interopRequireDefault(require("./PackagerRunner"));
40
41var _loadParcelConfig = _interopRequireDefault(require("./loadParcelConfig"));
42
43var _ReporterRunner = _interopRequireWildcard(require("./ReporterRunner"));
44
45var _dumpGraphToGraphViz = _interopRequireDefault(require("./dumpGraphToGraphViz"));
46
47var _resolveOptions = _interopRequireDefault(require("./resolveOptions"));
48
49var _events2 = require("@parcel/events");
50
51var _cache = require("@parcel/cache");
52
53var _cjsPonyfill = require("abortcontroller-polyfill/dist/cjs-ponyfill");
54
55var _utils2 = require("@parcel/utils");
56
57var _InternalAsset = _interopRequireDefault(require("./InternalAsset"));
58
59function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
60
61function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
62
63function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
64
65function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
66
67function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
68
69function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
70
71function _classPrivateFieldGet(receiver, privateMap) { var descriptor = privateMap.get(receiver); if (!descriptor) { throw new TypeError("attempted to get private field on non-instance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
72
73function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = privateMap.get(receiver); if (!descriptor) { throw new TypeError("attempted to set private field on non-instance"); } if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } return value; }
74
75(0, _utils.registerCoreWithSerializer)();
76const INTERNAL_TRANSFORM = Symbol('internal_transform');
77exports.INTERNAL_TRANSFORM = INTERNAL_TRANSFORM;
78const INTERNAL_RESOLVE = Symbol('internal_resolve');
79exports.INTERNAL_RESOLVE = INTERNAL_RESOLVE;
80
81class Parcel {
82 // AssetGraphBuilder
83 // AssetGraphBuilder
84 // BundlerRunner
85 // PackagerRunner
86 // WorkerFarm
87 // boolean
88 // InitialParcelOptions;
89 // ReporterRunner
90 // ?ParcelOptions
91 // (bundle: IBundle, bundleGraph: InternalBundleGraph) => Promise<Stats>;
92 // AbortController
93 // PromiseQueue<?BuildEvent>
94 // AsyncSubscription
95 // number
96 constructor(options) {
97 _assetGraphBuilder.set(this, {
98 writable: true,
99 value: void 0
100 });
101
102 _runtimesAssetGraphBuilder.set(this, {
103 writable: true,
104 value: void 0
105 });
106
107 _bundlerRunner.set(this, {
108 writable: true,
109 value: void 0
110 });
111
112 _packagerRunner.set(this, {
113 writable: true,
114 value: void 0
115 });
116
117 _config.set(this, {
118 writable: true,
119 value: void 0
120 });
121
122 _farm.set(this, {
123 writable: true,
124 value: void 0
125 });
126
127 _initialized.set(this, {
128 writable: true,
129 value: false
130 });
131
132 _initialOptions.set(this, {
133 writable: true,
134 value: void 0
135 });
136
137 _reporterRunner.set(this, {
138 writable: true,
139 value: void 0
140 });
141
142 _resolvedOptions.set(this, {
143 writable: true,
144 value: null
145 });
146
147 _runPackage.set(this, {
148 writable: true,
149 value: void 0
150 });
151
152 _watchAbortController.set(this, {
153 writable: true,
154 value: void 0
155 });
156
157 _watchQueue.set(this, {
158 writable: true,
159 value: new _utils2.PromiseQueue({
160 maxConcurrent: 1
161 })
162 });
163
164 _watchEvents.set(this, {
165 writable: true,
166 value: new _events2.ValueEmitter()
167 });
168
169 _watcherSubscription.set(this, {
170 writable: true,
171 value: void 0
172 });
173
174 _watcherCount.set(this, {
175 writable: true,
176 value: 0
177 });
178
179 _classPrivateFieldSet(this, _initialOptions, options);
180 }
181
182 async init() {
183 var _classPrivateFieldGet2;
184
185 if (_classPrivateFieldGet(this, _initialized)) {
186 return;
187 }
188
189 let resolvedOptions = await (0, _resolveOptions.default)(_classPrivateFieldGet(this, _initialOptions));
190
191 _classPrivateFieldSet(this, _resolvedOptions, resolvedOptions);
192
193 await (0, _cache.createCacheDir)(resolvedOptions.outputFS, resolvedOptions.cacheDir);
194 let {
195 config
196 } = await (0, _loadParcelConfig.default)(_path.default.join(resolvedOptions.inputFS.cwd(), 'index'), resolvedOptions);
197
198 _classPrivateFieldSet(this, _config, config);
199
200 _classPrivateFieldSet(this, _farm, (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _initialOptions).workerFarm) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : createWorkerFarm({
201 patchConsole: resolvedOptions.patchConsole
202 }));
203
204 _classPrivateFieldSet(this, _assetGraphBuilder, new _AssetGraphBuilder.default());
205
206 _classPrivateFieldSet(this, _runtimesAssetGraphBuilder, new _AssetGraphBuilder.default());
207
208 await Promise.all([_classPrivateFieldGet(this, _assetGraphBuilder).init({
209 name: 'MainAssetGraph',
210 options: resolvedOptions,
211 config,
212 entries: resolvedOptions.entries,
213 workerFarm: _classPrivateFieldGet(this, _farm)
214 }), _classPrivateFieldGet(this, _runtimesAssetGraphBuilder).init({
215 name: 'RuntimesAssetGraph',
216 options: resolvedOptions,
217 config,
218 workerFarm: _classPrivateFieldGet(this, _farm)
219 })]);
220
221 _classPrivateFieldSet(this, _bundlerRunner, new _BundlerRunner.default({
222 options: resolvedOptions,
223 runtimesBuilder: _classPrivateFieldGet(this, _runtimesAssetGraphBuilder),
224 config,
225 workerFarm: _classPrivateFieldGet(this, _farm)
226 }));
227
228 _classPrivateFieldSet(this, _reporterRunner, new _ReporterRunner.default({
229 config,
230 options: resolvedOptions,
231 workerFarm: _classPrivateFieldGet(this, _farm)
232 }));
233
234 _classPrivateFieldSet(this, _packagerRunner, new _PackagerRunner.default({
235 config,
236 farm: _classPrivateFieldGet(this, _farm),
237 options: resolvedOptions,
238 report: _ReporterRunner.report
239 }));
240
241 _classPrivateFieldSet(this, _runPackage, _classPrivateFieldGet(this, _farm).createHandle('runPackage'));
242
243 _classPrivateFieldSet(this, _initialized, true);
244 }
245
246 async run() {
247 let startTime = Date.now();
248
249 if (!_classPrivateFieldGet(this, _initialized)) {
250 await this.init();
251 }
252
253 let result = await this.build({
254 startTime
255 });
256 await Promise.all([_classPrivateFieldGet(this, _assetGraphBuilder).writeToCache(), _classPrivateFieldGet(this, _runtimesAssetGraphBuilder).writeToCache()]);
257
258 if (!_classPrivateFieldGet(this, _initialOptions).workerFarm) {
259 // If there wasn't a workerFarm passed in, we created it. End the farm.
260 await _classPrivateFieldGet(this, _farm).end();
261 }
262
263 if (result.type === 'buildFailure') {
264 throw new BuildError(result.diagnostics);
265 }
266
267 return result.bundleGraph;
268 }
269
270 async startNextBuild() {
271 _classPrivateFieldSet(this, _watchAbortController, new _cjsPonyfill.AbortController());
272
273 try {
274 _classPrivateFieldGet(this, _watchEvents).emit({
275 buildEvent: await this.build({
276 signal: _classPrivateFieldGet(this, _watchAbortController).signal
277 })
278 });
279 } catch (err) {
280 // Ignore BuildAbortErrors and only emit critical errors.
281 if (!(err instanceof _utils.BuildAbortError)) {
282 throw err;
283 }
284 }
285 }
286
287 async watch(cb) {
288 var _this$watcherCount;
289
290 let watchEventsDisposable;
291
292 if (cb) {
293 watchEventsDisposable = _classPrivateFieldGet(this, _watchEvents).addListener(({
294 error,
295 buildEvent
296 }) => cb(error, buildEvent));
297 }
298
299 if (_classPrivateFieldGet(this, _watcherCount) === 0) {
300 if (!_classPrivateFieldGet(this, _initialized)) {
301 await this.init();
302 }
303
304 _classPrivateFieldSet(this, _watcherSubscription, (await this._getWatcherSubscription()));
305
306 await _classPrivateFieldGet(this, _reporterRunner).report({
307 type: 'watchStart'
308 }); // Kick off a first build, but don't await its results. Its results will
309 // be provided to the callback.
310
311 _classPrivateFieldGet(this, _watchQueue).add(() => this.startNextBuild());
312
313 _classPrivateFieldGet(this, _watchQueue).run();
314 }
315
316 _classPrivateFieldSet(this, _watcherCount, (_this$watcherCount = +_classPrivateFieldGet(this, _watcherCount)) + 1), _this$watcherCount;
317 let unsubscribePromise;
318
319 const unsubscribe = async () => {
320 var _this$watcherCount2;
321
322 if (watchEventsDisposable) {
323 watchEventsDisposable.dispose();
324 }
325
326 _classPrivateFieldSet(this, _watcherCount, (_this$watcherCount2 = +_classPrivateFieldGet(this, _watcherCount)) - 1), _this$watcherCount2;
327
328 if (_classPrivateFieldGet(this, _watcherCount) === 0) {
329 await (0, _nullthrows.default)(_classPrivateFieldGet(this, _watcherSubscription)).unsubscribe();
330
331 _classPrivateFieldSet(this, _watcherSubscription, null);
332
333 await _classPrivateFieldGet(this, _reporterRunner).report({
334 type: 'watchEnd'
335 });
336 await Promise.all([_classPrivateFieldGet(this, _assetGraphBuilder).writeToCache(), _classPrivateFieldGet(this, _runtimesAssetGraphBuilder).writeToCache()]);
337 }
338 };
339
340 return {
341 unsubscribe() {
342 if (unsubscribePromise == null) {
343 unsubscribePromise = unsubscribe();
344 }
345
346 return unsubscribePromise;
347 }
348
349 };
350 }
351
352 async build({
353 signal,
354 startTime = Date.now()
355 }) {
356 let options = (0, _nullthrows.default)(_classPrivateFieldGet(this, _resolvedOptions));
357
358 try {
359 if (options.profile) {
360 await _classPrivateFieldGet(this, _farm).startProfile();
361 }
362
363 _classPrivateFieldGet(this, _reporterRunner).report({
364 type: 'buildStart'
365 });
366
367 let {
368 assetGraph,
369 changedAssets
370 } = await _classPrivateFieldGet(this, _assetGraphBuilder).build(signal);
371 (0, _dumpGraphToGraphViz.default)(assetGraph, 'MainAssetGraph');
372 let bundleGraph = await _classPrivateFieldGet(this, _bundlerRunner).bundle(assetGraph, {
373 signal
374 });
375 (0, _dumpGraphToGraphViz.default)(bundleGraph._graph, 'BundleGraph');
376 await _classPrivateFieldGet(this, _packagerRunner).writeBundles(bundleGraph);
377 (0, _utils.assertSignalNotAborted)(signal);
378 let event = {
379 type: 'buildSuccess',
380 changedAssets: new Map(Array.from(changedAssets).map(([id, asset]) => [id, (0, _Asset.assetFromValue)(asset, options)])),
381 bundleGraph: new _BundleGraph.default(bundleGraph, options),
382 buildTime: Date.now() - startTime
383 };
384
385 _classPrivateFieldGet(this, _reporterRunner).report(event);
386
387 await _classPrivateFieldGet(this, _assetGraphBuilder).validate();
388 return event;
389 } catch (e) {
390 if (e instanceof _utils.BuildAbortError) {
391 throw e;
392 }
393
394 let diagnostic = (0, _diagnostic.anyToDiagnostic)(e);
395 let event = {
396 type: 'buildFailure',
397 diagnostics: Array.isArray(diagnostic) ? diagnostic : [diagnostic]
398 };
399 await _classPrivateFieldGet(this, _reporterRunner).report(event);
400 return event;
401 } finally {
402 if (options.profile) {
403 await _classPrivateFieldGet(this, _farm).endProfile();
404 }
405 }
406 } // $FlowFixMe
407
408
409 async [INTERNAL_TRANSFORM]({
410 filePath,
411 env,
412 code
413 }) {
414 let [result] = await Promise.all([_classPrivateFieldGet(this, _assetGraphBuilder).runTransform({
415 filePath,
416 code,
417 env: (0, _Environment.createEnvironment)(env)
418 }), _classPrivateFieldGet(this, _reporterRunner).config.getReporters()]);
419 return result;
420 } // $FlowFixMe
421
422
423 async [INTERNAL_RESOLVE]({
424 moduleSpecifier,
425 sourcePath,
426 env
427 }) {
428 let resolved = await _classPrivateFieldGet(this, _assetGraphBuilder).resolverRunner.resolve((0, _Dependency.createDependency)({
429 moduleSpecifier,
430 sourcePath,
431 env: (0, _Environment.createEnvironment)(env)
432 }));
433 return resolved.filePath;
434 }
435
436 _getWatcherSubscription() {
437 (0, _assert.default)(_classPrivateFieldGet(this, _watcherSubscription) == null);
438 let resolvedOptions = (0, _nullthrows.default)(_classPrivateFieldGet(this, _resolvedOptions));
439
440 let opts = _classPrivateFieldGet(this, _assetGraphBuilder).getWatcherOptions();
441
442 return resolvedOptions.inputFS.watch(resolvedOptions.projectRoot, (err, _events) => {
443 let events = _events.filter(e => !e.path.includes('.cache'));
444
445 if (err) {
446 _classPrivateFieldGet(this, _watchEvents).emit({
447 error: err
448 });
449
450 return;
451 }
452
453 let isInvalid = _classPrivateFieldGet(this, _assetGraphBuilder).respondToFSEvents(events);
454
455 if (isInvalid && _classPrivateFieldGet(this, _watchQueue).getNumWaiting() === 0) {
456 if (_classPrivateFieldGet(this, _watchAbortController)) {
457 _classPrivateFieldGet(this, _watchAbortController).abort();
458 }
459
460 _classPrivateFieldGet(this, _watchQueue).add(() => this.startNextBuild());
461
462 _classPrivateFieldGet(this, _watchQueue).run();
463 }
464 }, opts);
465 }
466
467}
468
469exports.default = Parcel;
470
471var _assetGraphBuilder = new WeakMap();
472
473var _runtimesAssetGraphBuilder = new WeakMap();
474
475var _bundlerRunner = new WeakMap();
476
477var _packagerRunner = new WeakMap();
478
479var _config = new WeakMap();
480
481var _farm = new WeakMap();
482
483var _initialized = new WeakMap();
484
485var _initialOptions = new WeakMap();
486
487var _reporterRunner = new WeakMap();
488
489var _resolvedOptions = new WeakMap();
490
491var _runPackage = new WeakMap();
492
493var _watchAbortController = new WeakMap();
494
495var _watchQueue = new WeakMap();
496
497var _watchEvents = new WeakMap();
498
499var _watcherSubscription = new WeakMap();
500
501var _watcherCount = new WeakMap();
502
503class BuildError extends _diagnostic.default {
504 constructor(diagnostics) {
505 super({
506 diagnostic: diagnostics
507 });
508 this.name = 'BuildError';
509 }
510
511}
512
513exports.BuildError = BuildError;
514
515function createWorkerFarm(options = {}) {
516 return new _workers.default(_objectSpread({}, options, {
517 workerPath: require.resolve('./worker')
518 }));
519}
\No newline at end of file