kibana/packages/kbn-eslint-import-resolver-kibana/lib/is_probably_webpack_shim.js
Tim Roes de3e5b5cb6
Increase prettier line width to 100 (#20535) (#20596)
* Increase prettier line width to 100

* Fix packages JS prettier

* Change style guide to 100 width

* Fix line-width in latest master changes
2018-07-11 00:41:00 +02:00

60 lines
1.9 KiB
JavaScript

/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
const { readdirSync } = require('fs');
const { join, dirname } = require('path');
const LRU = require('lru-cache');
const { isDirectory } = require('./get_path_type');
const cache = process.env.KIBANA_RESOLVER_HARD_CACHE ? new Map() : new LRU({ max: 1000 });
function readShimNames(shimDirectory) {
if (!isDirectory(shimDirectory)) {
return [];
}
return readdirSync(shimDirectory)
.filter(name => !name.startsWith('.') && !name.startsWith('_'))
.map(name => (name.endsWith('.js') ? name.slice(0, -3) : name));
}
function findRelativeWebpackShims(directory) {
const cached = cache.get(directory);
if (cached) {
return cached;
}
const ownShims = readShimNames(join(directory, 'webpackShims'));
const parent = dirname(directory);
const parentShims = parent !== directory ? findRelativeWebpackShims(parent) : [];
const allShims = !ownShims.length ? parentShims : ownShims.concat(parentShims);
cache.set(directory, allShims);
return allShims;
}
exports.isProbablyWebpackShim = function(source, file) {
const shims = findRelativeWebpackShims(dirname(file));
return shims.some(shim => source === shim || source.startsWith(shim + '/'));
};