@angular-devkit/build-angular
Version:
Angular Webpack Build Facade
100 lines • 13 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _JavaScriptTransformer_workerPool, _JavaScriptTransformer_commonOptions;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JavaScriptTransformer = void 0;
const piscina_1 = __importDefault(require("piscina"));
/**
* A class that performs transformation of JavaScript files and raw data.
* A worker pool is used to distribute the transformation actions and allow
* parallel processing. Transformation behavior is based on the filename and
* data. Transformations may include: async downleveling, Angular linking,
* and advanced optimizations.
*/
class JavaScriptTransformer {
constructor(options, maxThreads) {
_JavaScriptTransformer_workerPool.set(this, void 0);
_JavaScriptTransformer_commonOptions.set(this, void 0);
__classPrivateFieldSet(this, _JavaScriptTransformer_workerPool, new piscina_1.default({
filename: require.resolve('./javascript-transformer-worker'),
maxThreads,
}), "f");
// Extract options to ensure only the named options are serialized and sent to the worker
const { sourcemap, thirdPartySourcemaps = false, advancedOptimizations = false, jit = false, } = options;
__classPrivateFieldSet(this, _JavaScriptTransformer_commonOptions, {
sourcemap,
thirdPartySourcemaps,
advancedOptimizations,
jit,
}, "f");
}
/**
* Performs JavaScript transformations on a file from the filesystem.
* If no transformations are required, the data for the original file will be returned.
* @param filename The full path to the file.
* @param skipLinker If true, bypass all Angular linker processing; if false, attempt linking.
* @returns A promise that resolves to a UTF-8 encoded Uint8Array containing the result.
*/
transformFile(filename, skipLinker) {
// Always send the request to a worker. Files are almost always from node modules which means
// they may need linking. The data is also not yet available to perform most transformation checks.
return __classPrivateFieldGet(this, _JavaScriptTransformer_workerPool, "f").run({
filename,
skipLinker,
...__classPrivateFieldGet(this, _JavaScriptTransformer_commonOptions, "f"),
});
}
/**
* Performs JavaScript transformations on the provided data of a file. The file does not need
* to exist on the filesystem.
* @param filename The full path of the file represented by the data.
* @param data The data of the file that should be transformed.
* @param skipLinker If true, bypass all Angular linker processing; if false, attempt linking.
* @returns A promise that resolves to a UTF-8 encoded Uint8Array containing the result.
*/
async transformData(filename, data, skipLinker) {
// Perform a quick test to determine if the data needs any transformations.
// This allows directly returning the data without the worker communication overhead.
if (skipLinker && !__classPrivateFieldGet(this, _JavaScriptTransformer_commonOptions, "f").advancedOptimizations) {
const keepSourcemap = __classPrivateFieldGet(this, _JavaScriptTransformer_commonOptions, "f").sourcemap &&
(!!__classPrivateFieldGet(this, _JavaScriptTransformer_commonOptions, "f").thirdPartySourcemaps || !/[\\/]node_modules[\\/]/.test(filename));
return Buffer.from(keepSourcemap ? data : data.replace(/^\/\/# sourceMappingURL=[^\r\n]*/gm, ''), 'utf-8');
}
return __classPrivateFieldGet(this, _JavaScriptTransformer_workerPool, "f").run({
filename,
data,
skipLinker,
...__classPrivateFieldGet(this, _JavaScriptTransformer_commonOptions, "f"),
});
}
/**
* Stops all active transformation tasks and shuts down all workers.
* @returns A void promise that resolves when closing is complete.
*/
close() {
return __classPrivateFieldGet(this, _JavaScriptTransformer_workerPool, "f").destroy();
}
}
exports.JavaScriptTransformer = JavaScriptTransformer;
_JavaScriptTransformer_workerPool = new WeakMap(), _JavaScriptTransformer_commonOptions = new WeakMap();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC10cmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3Rvb2xzL2VzYnVpbGQvamF2YXNjcmlwdC10cmFuc2Zvcm1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxzREFBOEI7QUFZOUI7Ozs7OztHQU1HO0FBQ0gsTUFBYSxxQkFBcUI7SUFJaEMsWUFBWSxPQUFxQyxFQUFFLFVBQW1CO1FBSHRFLG9EQUFxQjtRQUNyQix1REFBdUQ7UUFHckQsdUJBQUEsSUFBSSxxQ0FBZSxJQUFJLGlCQUFPLENBQUM7WUFDN0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUM7WUFDNUQsVUFBVTtTQUNYLENBQUMsTUFBQSxDQUFDO1FBRUgseUZBQXlGO1FBQ3pGLE1BQU0sRUFDSixTQUFTLEVBQ1Qsb0JBQW9CLEdBQUcsS0FBSyxFQUM1QixxQkFBcUIsR0FBRyxLQUFLLEVBQzdCLEdBQUcsR0FBRyxLQUFLLEdBQ1osR0FBRyxPQUFPLENBQUM7UUFDWix1QkFBQSxJQUFJLHdDQUFrQjtZQUNwQixTQUFTO1lBQ1Qsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQixHQUFHO1NBQ0osTUFBQSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGFBQWEsQ0FBQyxRQUFnQixFQUFFLFVBQW9CO1FBQ2xELDZGQUE2RjtRQUM3RixtR0FBbUc7UUFDbkcsT0FBTyx1QkFBQSxJQUFJLHlDQUFZLENBQUMsR0FBRyxDQUFDO1lBQzFCLFFBQVE7WUFDUixVQUFVO1lBQ1YsR0FBRyx1QkFBQSxJQUFJLDRDQUFlO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBRSxVQUFtQjtRQUNyRSwyRUFBMkU7UUFDM0UscUZBQXFGO1FBQ3JGLElBQUksVUFBVSxJQUFJLENBQUMsdUJBQUEsSUFBSSw0Q0FBZSxDQUFDLHFCQUFxQixFQUFFO1lBQzVELE1BQU0sYUFBYSxHQUNqQix1QkFBQSxJQUFJLDRDQUFlLENBQUMsU0FBUztnQkFDN0IsQ0FBQyxDQUFDLENBQUMsdUJBQUEsSUFBSSw0Q0FBZSxDQUFDLG9CQUFvQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFM0YsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLENBQUMsRUFDN0UsT0FBTyxDQUNSLENBQUM7U0FDSDtRQUVELE9BQU8sdUJBQUEsSUFBSSx5Q0FBWSxDQUFDLEdBQUcsQ0FBQztZQUMxQixRQUFRO1lBQ1IsSUFBSTtZQUNKLFVBQVU7WUFDVixHQUFHLHVCQUFBLElBQUksNENBQWU7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLHVCQUFBLElBQUkseUNBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUEvRUQsc0RBK0VDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCBQaXNjaW5hIGZyb20gJ3Bpc2NpbmEnO1xuXG4vKipcbiAqIFRyYW5zZm9ybWF0aW9uIG9wdGlvbnMgdGhhdCBzaG91bGQgYXBwbHkgdG8gYWxsIHRyYW5zZm9ybWVkIGZpbGVzIGFuZCBkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEphdmFTY3JpcHRUcmFuc2Zvcm1lck9wdGlvbnMge1xuICBzb3VyY2VtYXA6IGJvb2xlYW47XG4gIHRoaXJkUGFydHlTb3VyY2VtYXBzPzogYm9vbGVhbjtcbiAgYWR2YW5jZWRPcHRpbWl6YXRpb25zPzogYm9vbGVhbjtcbiAgaml0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgcGVyZm9ybXMgdHJhbnNmb3JtYXRpb24gb2YgSmF2YVNjcmlwdCBmaWxlcyBhbmQgcmF3IGRhdGEuXG4gKiBBIHdvcmtlciBwb29sIGlzIHVzZWQgdG8gZGlzdHJpYnV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gYWN0aW9ucyBhbmQgYWxsb3dcbiAqIHBhcmFsbGVsIHByb2Nlc3NpbmcuIFRyYW5zZm9ybWF0aW9uIGJlaGF2aW9yIGlzIGJhc2VkIG9uIHRoZSBmaWxlbmFtZSBhbmRcbiAqIGRhdGEuIFRyYW5zZm9ybWF0aW9ucyBtYXkgaW5jbHVkZTogYXN5bmMgZG93bmxldmVsaW5nLCBBbmd1bGFyIGxpbmtpbmcsXG4gKiBhbmQgYWR2YW5jZWQgb3B0aW1pemF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEphdmFTY3JpcHRUcmFuc2Zvcm1lciB7XG4gICN3b3JrZXJQb29sOiBQaXNjaW5hO1xuICAjY29tbW9uT3B0aW9uczogUmVxdWlyZWQ8SmF2YVNjcmlwdFRyYW5zZm9ybWVyT3B0aW9ucz47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSmF2YVNjcmlwdFRyYW5zZm9ybWVyT3B0aW9ucywgbWF4VGhyZWFkcz86IG51bWJlcikge1xuICAgIHRoaXMuI3dvcmtlclBvb2wgPSBuZXcgUGlzY2luYSh7XG4gICAgICBmaWxlbmFtZTogcmVxdWlyZS5yZXNvbHZlKCcuL2phdmFzY3JpcHQtdHJhbnNmb3JtZXItd29ya2VyJyksXG4gICAgICBtYXhUaHJlYWRzLFxuICAgIH0pO1xuXG4gICAgLy8gRXh0cmFjdCBvcHRpb25zIHRvIGVuc3VyZSBvbmx5IHRoZSBuYW1lZCBvcHRpb25zIGFyZSBzZXJpYWxpemVkIGFuZCBzZW50IHRvIHRoZSB3b3JrZXJcbiAgICBjb25zdCB7XG4gICAgICBzb3VyY2VtYXAsXG4gICAgICB0aGlyZFBhcnR5U291cmNlbWFwcyA9IGZhbHNlLFxuICAgICAgYWR2YW5jZWRPcHRpbWl6YXRpb25zID0gZmFsc2UsXG4gICAgICBqaXQgPSBmYWxzZSxcbiAgICB9ID0gb3B0aW9ucztcbiAgICB0aGlzLiNjb21tb25PcHRpb25zID0ge1xuICAgICAgc291cmNlbWFwLFxuICAgICAgdGhpcmRQYXJ0eVNvdXJjZW1hcHMsXG4gICAgICBhZHZhbmNlZE9wdGltaXphdGlvbnMsXG4gICAgICBqaXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBKYXZhU2NyaXB0IHRyYW5zZm9ybWF0aW9ucyBvbiBhIGZpbGUgZnJvbSB0aGUgZmlsZXN5c3RlbS5cbiAgICogSWYgbm8gdHJhbnNmb3JtYXRpb25zIGFyZSByZXF1aXJlZCwgdGhlIGRhdGEgZm9yIHRoZSBvcmlnaW5hbCBmaWxlIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlLlxuICAgKiBAcGFyYW0gc2tpcExpbmtlciBJZiB0cnVlLCBieXBhc3MgYWxsIEFuZ3VsYXIgbGlua2VyIHByb2Nlc3Npbmc7IGlmIGZhbHNlLCBhdHRlbXB0IGxpbmtpbmcuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgVVRGLTggZW5jb2RlZCBVaW50OEFycmF5IGNvbnRhaW5pbmcgdGhlIHJlc3VsdC5cbiAgICovXG4gIHRyYW5zZm9ybUZpbGUoZmlsZW5hbWU6IHN0cmluZywgc2tpcExpbmtlcj86IGJvb2xlYW4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICAvLyBBbHdheXMgc2VuZCB0aGUgcmVxdWVzdCB0byBhIHdvcmtlci4gRmlsZXMgYXJlIGFsbW9zdCBhbHdheXMgZnJvbSBub2RlIG1vZHVsZXMgd2hpY2ggbWVhbnNcbiAgICAvLyB0aGV5IG1heSBuZWVkIGxpbmtpbmcuIFRoZSBkYXRhIGlzIGFsc28gbm90IHlldCBhdmFpbGFibGUgdG8gcGVyZm9ybSBtb3N0IHRyYW5zZm9ybWF0aW9uIGNoZWNrcy5cbiAgICByZXR1cm4gdGhpcy4jd29ya2VyUG9vbC5ydW4oe1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBza2lwTGlua2VyLFxuICAgICAgLi4udGhpcy4jY29tbW9uT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBKYXZhU2NyaXB0IHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgcHJvdmlkZWQgZGF0YSBvZiBhIGZpbGUuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWRcbiAgICogdG8gZXhpc3Qgb24gdGhlIGZpbGVzeXN0ZW0uXG4gICAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgZnVsbCBwYXRoIG9mIHRoZSBmaWxlIHJlcHJlc2VudGVkIGJ5IHRoZSBkYXRhLlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBvZiB0aGUgZmlsZSB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZC5cbiAgICogQHBhcmFtIHNraXBMaW5rZXIgSWYgdHJ1ZSwgYnlwYXNzIGFsbCBBbmd1bGFyIGxpbmtlciBwcm9jZXNzaW5nOyBpZiBmYWxzZSwgYXR0ZW1wdCBsaW5raW5nLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFVURi04IGVuY29kZWQgVWludDhBcnJheSBjb250YWluaW5nIHRoZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyB0cmFuc2Zvcm1EYXRhKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IHN0cmluZywgc2tpcExpbmtlcjogYm9vbGVhbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIC8vIFBlcmZvcm0gYSBxdWljayB0ZXN0IHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBuZWVkcyBhbnkgdHJhbnNmb3JtYXRpb25zLlxuICAgIC8vIFRoaXMgYWxsb3dzIGRpcmVjdGx5IHJldHVybmluZyB0aGUgZGF0YSB3aXRob3V0IHRoZSB3b3JrZXIgY29tbXVuaWNhdGlvbiBvdmVyaGVhZC5cbiAgICBpZiAoc2tpcExpbmtlciAmJiAhdGhpcy4jY29tbW9uT3B0aW9ucy5hZHZhbmNlZE9wdGltaXphdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtlZXBTb3VyY2VtYXAgPVxuICAgICAgICB0aGlzLiNjb21tb25PcHRpb25zLnNvdXJjZW1hcCAmJlxuICAgICAgICAoISF0aGlzLiNjb21tb25PcHRpb25zLnRoaXJkUGFydHlTb3VyY2VtYXBzIHx8ICEvW1xcXFwvXW5vZGVfbW9kdWxlc1tcXFxcL10vLnRlc3QoZmlsZW5hbWUpKTtcblxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgICBrZWVwU291cmNlbWFwID8gZGF0YSA6IGRhdGEucmVwbGFjZSgvXlxcL1xcLyMgc291cmNlTWFwcGluZ1VSTD1bXlxcclxcbl0qL2dtLCAnJyksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiN3b3JrZXJQb29sLnJ1bih7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBza2lwTGlua2VyLFxuICAgICAgLi4udGhpcy4jY29tbW9uT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBhbGwgYWN0aXZlIHRyYW5zZm9ybWF0aW9uIHRhc2tzIGFuZCBzaHV0cyBkb3duIGFsbCB3b3JrZXJzLlxuICAgKiBAcmV0dXJucyBBIHZvaWQgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY2xvc2luZyBpcyBjb21wbGV0ZS5cbiAgICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiN3b3JrZXJQb29sLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19