awesome-gadgets
Version:
Storage, management, compilation, and automatic deployment of MediaWiki gadgets.
68 lines (63 loc) • 2.02 kB
text/typescript
/* eslint-disable @typescript-eslint/no-unsafe-call */
import {type BuildOptions, type Plugin} from 'esbuild';
// @ts-expect-error TS7016
import LessPluginNpmImport from 'less-plugin-npm-import';
// @ts-expect-error TS7016
import LessPluginPresetEnv from 'less-plugin-preset-env';
import {SOURCE_MAP} from '../constant';
import browserslist from 'browserslist';
import {browserslistToTargets} from 'lightningcss';
import esbuildPluginCssModules from 'esbuild-css-modules-plugin';
import {lessLoader as esbuildPluginLess} from 'esbuild-plugin-less';
import esbuildPluginPostcss from 'esbuild-postcss';
import esbuildPluginVue from 'esbuild-plugin-vue3';
import postcssLoadConfig from 'postcss-load-config';
/**
* @summary Do not forget to declare these file extensions in `src/global.d.ts`
* @see {@link https://esbuild.github.io/api/#loader}
*/
const loader = {
'.gif': 'dataurl',
'.ico': 'dataurl',
'.jpg': 'dataurl',
'.jpeg': 'dataurl',
'.png': 'dataurl',
'.svg': 'text',
} as const satisfies BuildOptions['loader'];
const lessOptions: Less.Options = {
plugins: [new LessPluginPresetEnv() as unknown as Less.Plugin, new LessPluginNpmImport() as unknown as Less.Plugin],
};
const postcssConfig = await postcssLoadConfig();
const targets = browserslistToTargets(browserslist());
/**
* @see {@link https://esbuild.github.io/api/#general-options}
*/
const esbuildOptions = {
loader,
bundle: true,
charset: 'utf8',
define: {
'process.env.NODE_ENV': '"production"',
},
format: 'cjs',
legalComments: 'inline',
plugins: [
esbuildPluginVue({
enableDevTools: false,
postcss: postcssConfig,
preprocessorOptions: lessOptions,
}) as unknown as Plugin,
esbuildPluginCssModules({
targets,
filter: /\.module\.(?:css|less)$/i,
forceInlineImages: true,
namedExports: true,
}),
esbuildPluginPostcss(),
esbuildPluginLess(lessOptions),
],
sourcemap: SOURCE_MAP ? 'inline' : false,
treeShaking: true,
write: false,
} as const satisfies BuildOptions;
export {esbuildOptions};