Files
zulip/tools/webpack-helpers.ts
Anders Kaseorg 218c60ae86 third: Upgrade spectrum-colorpicker to 1.8.0 from NPM.
We had several patches to spectrum, but the only essential one 
(0ea770fc18) had already been fixed upstream,
and another was just handling jQuery deprecation warnings for not yet removed features.

See #12749 for details.

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-07-10 10:07:34 -07:00

59 lines
1.7 KiB
TypeScript

import { basename, resolve } from 'path';
import { RuleSetRule, RuleSetUseItem } from 'webpack';
export const cacheLoader: RuleSetUseItem = {
loader: 'cache-loader',
options: {
cacheDirectory: resolve(__dirname, '../var/webpack-cache'),
},
};
/* Return expose-loader format to the config
For example
[
// Exposes 'my_module' as the name
{path: './folder/my_module.js'},
// Exposes 'my_custom_name'
{path: './folder/my_module.js', name: 'my_custom_name'},
// Exposes 'name1' and 'name2'
{path: './folder/my_module.js', name: ['name1', 'name2']}
]
*/
interface ExportLoaderOptions {
path: string;
name?: string | string[];
}
function getExposeLoaders(optionsArr: ExportLoaderOptions[]): RuleSetRule[] {
const exposeLoaders = [];
for (var loaderEntry of optionsArr) {
const path = loaderEntry.path;
let name = "";
const useArr = [cacheLoader];
// If no name is provided, infer it
if (!loaderEntry.name) {
name = basename(path, '.js');
useArr.push({loader: 'expose-loader', options: name});
} else {
// If name is an array
if (Array.isArray(loaderEntry.name)) {
for (var exposeName of loaderEntry.name) {
useArr.push({loader: 'expose-loader', options: exposeName});
}
// If name is a string
} else {
useArr.push({loader: 'expose-loader', options: loaderEntry.name});
}
}
exposeLoaders.push({
test: require.resolve(path),
use: useArr,
});
}
return exposeLoaders;
}
export {
getExposeLoaders,
};