Skip to content

Commit

Permalink
fix(arui-scripts): fix find-loader and apply-overrides
Browse files Browse the repository at this point in the history
  • Loading branch information
sanityFair committed Dec 11, 2023
1 parent a79fbbe commit 96d5ef5
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 28 deletions.
40 changes: 15 additions & 25 deletions packages/arui-scripts/src/configs/util/apply-overrides.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// TODO: remove eslint-disable-next-line
import type { Configuration as WebpackConfiguration, WebpackOptionsNormalized } from 'webpack';
import type { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-server';

Expand Down Expand Up @@ -44,7 +43,7 @@ type BoundCreateSingleClientWebpackConfig = OmitFirstArg<typeof createSingleClie
type ClientWebpackAdditionalArgs = {
createSingleClientWebpackConfig: BoundCreateSingleClientWebpackConfig;
findLoader: typeof findLoader;
findPlugin: ReturnType<typeof findPlugin<'client'>>
findPlugin: ReturnType<typeof findPlugin<'client'>>;
};

type ServerWebpackAdditionalArgs = {
Expand All @@ -67,12 +66,7 @@ type OverridesAdditionalArgs = {
webpackServerProd: ServerWebpackAdditionalArgs;
};

type OverrideFunction<
K extends keyof Overrides,
AdditionalArgs = K extends keyof OverridesAdditionalArgs
? OverridesAdditionalArgs[K]
: undefined,
> = (
type OverrideFunction<K extends keyof Overrides, AdditionalArgs = unknown> = (
config: Overrides[K],
appConfig: AppContextWithConfigs,
additionalArgs: AdditionalArgs,
Expand All @@ -89,8 +83,7 @@ overrides = appConfigs.overridesPath.map((path) => {
// eslint-disable-next-line import/no-dynamic-require, global-require, @typescript-eslint/no-var-requires
const requireResult = require(path);

// eslint-disable-next-line no-underscore-dangle
if (requireResult.__esModule) {
if ('__esModule' in requireResult) {
// ts-node импортирует esModules, из них надо вытягивать default именно так
return requireResult.default;
}
Expand All @@ -111,27 +104,24 @@ overrides = appConfigs.overridesPath.map((path) => {
* @param args Дополнительные аргументы, которые будут переданы в функцию оверрайда
* @returns {*}
*/
function applyOverrides<
T extends Overrides[Key],
Key extends keyof Overrides,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Args = Key extends keyof OverridesAdditionalArgs ? OverridesAdditionalArgs[Key] : undefined,
>(overridesKey: Key | Key[], config: T, args?: any): T {
if (typeof overridesKey === 'string') {
// eslint-disable-next-line no-param-reassign
overridesKey = [overridesKey];
}
overridesKey.forEach((key) => {
function applyOverrides<T extends Overrides[Key], Key extends keyof Overrides>(
overridesKey: Key | Key[],
config: T,
args?: unknown,
): T {
let tempConfig = config;
let overrideKeys = typeof overridesKey === 'string' ? [overridesKey] : overridesKey;

overrideKeys.forEach((key) => {
overrides.forEach((override) => {
// eslint-disable-next-line no-prototype-builtins
if (override.hasOwnProperty(key)) {
if (key in override) {
const overrideFn = override[key];

if (typeof overrideFn !== 'function') {
throw new TypeError(`Override ${key} must be a function`);
}
// eslint-disable-next-line no-param-reassign
config = overrideFn(config, appConfigs, args);

config = overrideFn(tempConfig, appConfigs, args);
}
});
});
Expand Down
12 changes: 9 additions & 3 deletions packages/arui-scripts/src/configs/util/find-loader.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
// TODO: remove eslint-disable and eslint-disable-next-line
/* eslint-disable no-restricted-syntax */
import webpack from 'webpack';

export function findLoader(
config: webpack.Configuration,
testRule: string,
): webpack.RuleSetRule | undefined {
const rules = config.module!.rules as webpack.RuleSetRule[];
for (const rule of config.module!.rules!) {
if (rule === '...' || !rule) {
// Webpack имеет странный тип для rules, который позволяет в него положить строку '...'. Успокаиваем TS
// eslint-disable-next-line no-continue
continue;
}

for (const rule of rules) {
if (rule.test && rule.test.toString() === testRule) {
return rule;
}
Expand All @@ -21,4 +27,4 @@ export function findLoader(
}

return undefined;
}
}

0 comments on commit 96d5ef5

Please sign in to comment.