mirror of
https://github.com/zulip/zulip.git
synced 2025-10-31 20:13:46 +00:00
Before we used to defined our own type Loader which was partly incorrect because the use property can only be string which is incorrect. We use the RuleSetRule type provided by webpack instead.
74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import { basename } from 'path';
|
|
import { RuleSetRule } from 'webpack';
|
|
|
|
/* Return imports-loader format to the config
|
|
For example:
|
|
[
|
|
// Adds 'imports-loader?this=>widndow'
|
|
{path: './foler/my_module.js', args: '?this=>window'},
|
|
]
|
|
*/
|
|
interface ImportLoaderOptions {
|
|
path: string;
|
|
args: string;
|
|
}
|
|
function getImportLoaders(optionsArr: ImportLoaderOptions[]): RuleSetRule[] {
|
|
const importsLoaders = [];
|
|
for (var loaderEntry of optionsArr) {
|
|
importsLoaders.push({
|
|
test: require.resolve(loaderEntry.path),
|
|
use: "imports-loader?" + loaderEntry.args,
|
|
});
|
|
}
|
|
return importsLoaders;
|
|
}
|
|
/* 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 = [];
|
|
// 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,
|
|
getImportLoaders,
|
|
};
|