[7.x] [optimize/bundleContext] do not include absolute urls or… (#45408)

* [optimize/bundleContext] do not include absolute urls or windows slashes

* simplify the stable clone fn, it doesn't need to be generic
This commit is contained in:
Spencer 2019-09-11 11:53:27 -07:00 committed by GitHub
parent 5c3cd1bdd7
commit 3902a463ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -17,7 +17,7 @@
* under the License.
*/
import { resolve } from 'path';
import { resolve, relative, isAbsolute } from 'path';
import { createHash } from 'crypto';
import { promisify } from 'util';
import { existsSync } from 'fs';
@ -27,12 +27,13 @@ import { makeRe } from 'minimatch';
import mkdirp from 'mkdirp';
import jsonStableStringify from 'json-stable-stringify';
import { IS_KIBANA_DISTRIBUTABLE } from '../../utils';
import { IS_KIBANA_DISTRIBUTABLE, fromRoot } from '../../utils';
import { UiBundle } from './ui_bundle';
import { appEntryTemplate } from './app_entry_template';
const mkdirpAsync = promisify(mkdirp);
const REPO_ROOT = fromRoot();
function getWebpackAliases(pluginSpecs) {
return pluginSpecs.reduce((aliases, spec) => {
@ -49,19 +50,21 @@ function getWebpackAliases(pluginSpecs) {
}, {});
}
function sortAllArrays(input) {
if (Array.isArray(input)) {
return input
.map(i => sortAllArrays(i))
.sort((a, b) => typeof a === 'string' && typeof b === 'string' ? a.localeCompare(b) : 0);
}
if (typeof input === 'object') {
return Object.entries(input)
.map(([key, value]) => [key, sortAllArrays(value)]);
}
return input;
// Recursively clone appExtensions, sorting array and normalizing absolute paths
function stableCloneAppExtensions(appExtensions) {
return Object.fromEntries(
Object.entries(appExtensions).map(([extensionType, moduleIds]) => [
extensionType,
moduleIds
.map(moduleId => {
if (isAbsolute(moduleId)) {
moduleId = `absolute:${relative(REPO_ROOT, moduleId)}`;
}
return moduleId.replace(/\\/g, '/');
})
.sort((a, b) => a.localeCompare(b))
])
);
}
export class UiBundlesController {
@ -75,7 +78,7 @@ export class UiBundlesController {
sourceMaps: config.get('optimize.sourceMaps'),
kbnVersion: config.get('pkg.version'),
buildNum: config.get('pkg.buildNum'),
appExtensions: sortAllArrays(uiExports.appExtensions),
appExtensions: stableCloneAppExtensions(uiExports.appExtensions),
};
this._filter = makeRe(config.get('optimize.bundleFilter') || '*', {