UNPKG

4.34 kBJavaScriptView Raw
1'use strict';
2var __importDefault =
3 (this && this.__importDefault) ||
4 function (mod) {
5 return mod && mod.__esModule ? mod : { default: mod };
6 };
7Object.defineProperty(exports, '__esModule', { value: true });
8exports.getBundleName = exports.getBundles = exports.explore = void 0;
9const glob_1 = __importDefault(require('glob'));
10const lodash_1 = require('lodash');
11const explore_1 = require('./explore');
12const app_error_1 = require('./app-error');
13const output_1 = require('./output');
14const coverage_1 = require('./coverage');
15function adjustOptions(options) {
16 if (options.gzip) {
17 options.onlyMapped = true;
18 }
19 return options;
20}
21async function explore(bundlesAndFileTokens, options = {}) {
22 bundlesAndFileTokens = Array.isArray(bundlesAndFileTokens)
23 ? bundlesAndFileTokens
24 : [bundlesAndFileTokens];
25 if (bundlesAndFileTokens.length === 0) {
26 throw new app_error_1.AppError({ code: 'NoBundles' });
27 }
28 adjustOptions(options);
29 const [fileTokens, bundles] = lodash_1.partition(bundlesAndFileTokens, lodash_1.isString);
30 bundles.push(...getBundles(fileTokens));
31 coverage_1.addCoverageRanges(bundles, options.coverage);
32 const results = await Promise.all(
33 bundles.map((bundle) =>
34 explore_1.exploreBundle(bundle, options).catch((error) => onExploreError(bundle, error))
35 )
36 );
37 const exploreResult = getExploreResult(results, options);
38 if (exploreResult.bundles.length === 0) {
39 return Promise.reject(exploreResult);
40 }
41 output_1.saveOutputToFile(exploreResult, options);
42 return exploreResult;
43}
44exports.explore = explore;
45function getBundles(fileTokens) {
46 const filenames = lodash_1.flatMap(fileTokens, (filePath) =>
47 glob_1.default.hasMagic(filePath) ? expandGlob(filePath) : filePath
48 );
49 const [mapFilenames, codeFilenames] = lodash_1.partition(filenames, (filename) =>
50 filename.endsWith('.map')
51 );
52 return codeFilenames.map((code) => ({
53 code,
54 map: mapFilenames.find((filename) => filename === `${code}.map`),
55 }));
56}
57exports.getBundles = getBundles;
58function expandGlob(pattern) {
59 if (pattern.endsWith('.js')) {
60 pattern = `${pattern}?(.map)`;
61 }
62 return glob_1.default.sync(pattern);
63}
64function getBundleName(bundle) {
65 return Buffer.isBuffer(bundle.code) ? 'Buffer' : bundle.code;
66}
67exports.getBundleName = getBundleName;
68function onExploreError(bundle, error) {
69 return {
70 bundleName: getBundleName(bundle),
71 code: error.code || 'Unknown',
72 message: error.message,
73 error,
74 };
75}
76function sortFilenames(bundles) {
77 return bundles.map((bundle) => ({
78 ...bundle,
79 files: lodash_1.fromPairs(lodash_1.sortBy(lodash_1.toPairs(bundle.files), 0)),
80 }));
81}
82function getExploreResult(results, options) {
83 const [bundles, errors] = lodash_1.partition(results, (result) => 'files' in result);
84 let sortedBundles = lodash_1.sortBy(bundles, (bundle) => bundle.bundleName);
85 if (options.sort) {
86 sortedBundles = sortFilenames(sortedBundles);
87 }
88 errors.push(...getPostExploreErrors(bundles));
89 return {
90 bundles: sortedBundles,
91 errors,
92 ...(bundles.length > 0 && { output: output_1.formatOutput(sortedBundles, options) }),
93 };
94}
95function getPostExploreErrors(exploreBundleResults) {
96 const errors = [];
97 const isSingleBundle = exploreBundleResults.length === 1;
98 for (const result of exploreBundleResults) {
99 const { bundleName, files, totalBytes } = result;
100 if (isSingleBundle) {
101 const filenames = Object.keys(files).filter(
102 (filename) => !explore_1.SPECIAL_FILENAMES.includes(filename)
103 );
104 if (filenames.length === 1) {
105 errors.push({
106 bundleName,
107 isWarning: true,
108 code: 'OneSourceSourceMap',
109 message: app_error_1.getErrorMessage({
110 code: 'OneSourceSourceMap',
111 filename: filenames[0],
112 }),
113 });
114 }
115 }
116 if (files[explore_1.UNMAPPED_KEY] !== undefined) {
117 const { size: unmappedBytes } = files[explore_1.UNMAPPED_KEY];
118 if (unmappedBytes) {
119 errors.push({
120 bundleName,
121 isWarning: true,
122 code: 'UnmappedBytes',
123 message: app_error_1.getErrorMessage({
124 code: 'UnmappedBytes',
125 unmappedBytes,
126 totalBytes,
127 }),
128 });
129 }
130 }
131 }
132 return errors;
133}
134//# sourceMappingURL=api.js.map