Skip to content

Commit

Permalink
feat(core): export config subtypes (#2380)
Browse files Browse the repository at this point in the history
  • Loading branch information
chenjiahan committed May 18, 2024
1 parent 8aa7d5f commit fa57fcc
Show file tree
Hide file tree
Showing 29 changed files with 132 additions and 114 deletions.
2 changes: 1 addition & 1 deletion e2e/cases/css/css-modules-dom/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { fse } from '@rsbuild/shared';

const fixtures = resolve(__dirname);

test('enableCssModuleTSDeclaration', async () => {
test('plugin-typed-css-modules', async () => {
fse.removeSync(join(fixtures, 'src/App.module.less.d.ts'));
fse.removeSync(join(fixtures, 'src/App.module.scss.d.ts'));

Expand Down
2 changes: 1 addition & 1 deletion packages/compat/plugin-swc/src/plugin.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import path from 'node:path';
import type { RsbuildPlugin } from '@rsbuild/core';
import {
DEFAULT_BROWSERSLIST,
type RsbuildPlugin,
SCRIPT_REGEX,
applyScriptCondition,
} from '@rsbuild/shared';
Expand Down
3 changes: 1 addition & 2 deletions packages/compat/plugin-swc/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import fs from 'node:fs';
import path from 'node:path';
import { __internalHelper } from '@rsbuild/core';
import type { ModifyChainUtils, NormalizedConfig } from '@rsbuild/core';
import {
type ModifyChainUtils,
type NormalizedConfig,
getBrowserslistWithDefault,
getCoreJsVersion,
isUsingHMR,
Expand Down
5 changes: 2 additions & 3 deletions packages/compat/plugin-swc/tests/plugin.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { NormalizedConfig } from '@rsbuild/core';
import type { ModifyWebpackChainUtils } from '@rsbuild/shared';
import type { ModifyChainUtils, NormalizedConfig } from '@rsbuild/core';
import { webpackProvider } from '@rsbuild/webpack';
import { createStubRsbuild } from '@scripts/test-helper';
import { pluginSwc } from '../src';
Expand All @@ -15,7 +14,7 @@ const TEST_BUILDER_CONFIG = {
},
} as unknown as NormalizedConfig;

const UTILS = { target: 'web', isProd: true } as ModifyWebpackChainUtils;
const UTILS = { target: 'web', isProd: true } as ModifyChainUtils;

describe('plugin-swc', () => {
it('should set swc-loader', async () => {
Expand Down
32 changes: 32 additions & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,38 @@ export type {
RsbuildInstance,
CreateRsbuildOptions,
InspectConfigOptions,
// Subtypes of Config
Minify,
Polyfill,
PrintUrls,
PublicDir,
Decorators,
RspackRule,
WatchFiles,
CSSModules,
CrossOrigin,
ConsoleType,
SplitChunks,
BundlerChain,
ClientConfig,
ScriptInject,
ChainedConfig,
PostCSSPlugin,
ScriptLoading,
LegalComments,
AliasStrategy,
FilenameConfig,
DistPathConfig,
OutputStructure,
ChainIdentifier,
PreconnectOption,
CSSLoaderOptions,
ModifyChainUtils,
StyleLoaderOptions,
PostCSSLoaderOptions,
ChainedConfigWithUtils,
ModifyRspackConfigUtils,
CSSModulesLocalsConvention,
// Hook Callback Types
OnExitFn,
OnAfterBuildFn,
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/plugins/css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const isUseCssExtract = (
) =>
!config.output.injectStyles && target !== 'node' && target !== 'web-worker';

const getCssModuleLocalIdentName = (
const getCSSModulesLocalIdentName = (
config: NormalizedConfig,
isProd: boolean,
) =>
Expand Down Expand Up @@ -200,7 +200,7 @@ const getPostcssLoaderOptions = async ({
return mergedConfig;
};

const getCssLoaderOptions = ({
const getCSSLoaderOptions = ({
config,
importLoaders,
target,
Expand Down Expand Up @@ -261,9 +261,9 @@ export async function applyCSSRule({
const enableExtractCSS = isUseCssExtract(config, target);

// 2. Prepare loader options
const localIdentName = getCssModuleLocalIdentName(config, isProd);
const localIdentName = getCSSModulesLocalIdentName(config, isProd);

const cssLoaderOptions = getCssLoaderOptions({
const cssLoaderOptions = getCSSLoaderOptions({
config,
importLoaders,
target,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// rsbuild/runtime/initial-chunk-retry
import type { CrossOrigin } from '@rsbuild/shared';
import type { CrossOrigin } from '@rsbuild/core';
import type { AssetsRetryHookContext, RuntimeRetryOptions } from '../types';

interface ScriptElementAttributes {
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-assets-retry/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { CrossOrigin } from '@rsbuild/shared';
import type { CrossOrigin } from '@rsbuild/core';

export type PluginAssetsRetryOptions = {
/**
Expand Down
13 changes: 6 additions & 7 deletions packages/plugin-babel/src/helper.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { isAbsolute, normalize, sep } from 'node:path';
import type { PluginOptions as BabelPluginOptions } from '@babel/core';
import {
type BundlerChain,
type ChainIdentifier,
type NormalizedConfig,
castArray,
mergeChainedOptions,
} from '@rsbuild/shared';
import type {
BundlerChain,
ChainIdentifier,
NormalizedConfig,
} from '@rsbuild/core';
import { castArray, mergeChainedOptions } from '@rsbuild/shared';
import upath from 'upath';
import type {
BabelConfigUtils,
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-babel/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type {
PluginItem as BabelPlugin,
TransformOptions as BabelTransformOptions,
} from '@babel/core';
import type { ChainedConfigWithUtils } from '@rsbuild/shared';
import type { ChainedConfigWithUtils } from '@rsbuild/core';

export type { BabelPlugin, BabelTransformOptions };

Expand Down
12 changes: 6 additions & 6 deletions packages/plugin-check-syntax/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { RsbuildPlugin } from '@rsbuild/core';
import {
type NormalizedConfig,
type RsbuildTarget,
getBrowserslistWithDefault,
} from '@rsbuild/shared';
import type {
NormalizedConfig,
RsbuildPlugin,
RsbuildTarget,
} from '@rsbuild/core';
import { getBrowserslistWithDefault } from '@rsbuild/shared';
import type { CheckSyntaxOptions } from './types';

export type PluginCheckSyntaxOptions = CheckSyntaxOptions;
Expand Down
14 changes: 7 additions & 7 deletions packages/plugin-css-minimizer/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type { RsbuildPlugin } from '@rsbuild/core';
import {
type BundlerChain,
type ChainIdentifier,
type ChainedConfig,
mergeChainedOptions,
} from '@rsbuild/shared';
import type {
BundlerChain,
ChainIdentifier,
ChainedConfig,
RsbuildPlugin,
} from '@rsbuild/core';
import { mergeChainedOptions } from '@rsbuild/shared';
import CssMinimizerWebpackPlugin from 'css-minimizer-webpack-plugin';
import type CssMinimizerPlugin from 'css-minimizer-webpack-plugin';

Expand Down
8 changes: 4 additions & 4 deletions packages/plugin-lightningcss/tests/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { createStubRsbuild } from '@scripts/test-helper';
import { describe, expect, it } from 'vitest';
import { lightningcss, pluginLightningcss } from '../src';

const getCssRules = (rspackConfig: Rspack.Configuration) => {
const getCSSRules = (rspackConfig: Rspack.Configuration) => {
const CSS_RULES = ['css', 'scss', 'sass', 'less', 'stylus'];

return (
Expand All @@ -28,7 +28,7 @@ describe('plugins/lightningcss', () => {
});

const bundlerConfigs = await rsbuild.initConfigs();
const cssRules = getCssRules(bundlerConfigs[0]);
const cssRules = getCSSRules(bundlerConfigs[0]);
expect(cssRules).toMatchSnapshot();
expect(cssRules).not.contain('postcss-loader');
});
Expand Down Expand Up @@ -134,7 +134,7 @@ describe('plugins/lightningcss', () => {
});

const bundlerConfigs = await rsbuild.initConfigs();
const cssRules = getCssRules(bundlerConfigs[0]);
const cssRules = getCSSRules(bundlerConfigs[0]);
expect(cssRules).toMatchSnapshot();
expect(cssRules).not.contain('postcss-loader');

Expand All @@ -157,7 +157,7 @@ describe('plugins/lightningcss', () => {
});

const bundlerConfigs = await rsbuild.initConfigs();
const cssRules = getCssRules(bundlerConfigs[0]);
const cssRules = getCSSRules(bundlerConfigs[0]);
expect(cssRules).toMatchSnapshot();
expect(cssRules).not.contain('postcss-loader');

Expand Down
16 changes: 8 additions & 8 deletions packages/plugin-react/src/react.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import path from 'node:path';
import type { RsbuildConfig, RsbuildPluginAPI, Rspack } from '@rsbuild/core';
import {
type BundlerChain,
type ChainIdentifier,
SCRIPT_REGEX,
deepmerge,
isUsingHMR,
} from '@rsbuild/shared';
import type {
BundlerChain,
ChainIdentifier,
RsbuildConfig,
RsbuildPluginAPI,
Rspack,
} from '@rsbuild/core';
import { SCRIPT_REGEX, deepmerge, isUsingHMR } from '@rsbuild/shared';
import type { PluginReactOptions } from '.';

const modifySwcLoaderOptions = ({
Expand Down
9 changes: 2 additions & 7 deletions packages/plugin-react/src/splitChunks.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import type { RsbuildPluginAPI } from '@rsbuild/core';
import {
type SplitChunks,
createCacheGroups,
isPlainObject,
isProd,
} from '@rsbuild/shared';
import type { RsbuildPluginAPI, SplitChunks } from '@rsbuild/core';
import { createCacheGroups, isPlainObject, isProd } from '@rsbuild/shared';
import type { SplitReactChunkOptions } from '.';

export const applySplitChunksRule = (
Expand Down
1 change: 0 additions & 1 deletion packages/plugin-react/tests/features.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { SCRIPT_REGEX } from '@rsbuild/shared';
import { createStubRsbuild } from '@scripts/test-helper';
import { describe, expect, it, vi } from 'vitest';
import { pluginReact } from '../src';
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-rem/src/AutoSetRootFontSizePlugin.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import path from 'node:path';
import { type Rspack, logger } from '@rsbuild/core';
import { type Rspack, type ScriptLoading, logger } from '@rsbuild/core';
import {
type ScriptLoading,
generateScriptTag,
getPublicPathFromCompiler,
isProd,
Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-rem/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { RsbuildPlugin } from '@rsbuild/core';
import { type PostCSSPlugin, getDistPath } from '@rsbuild/shared';
import type { PostCSSPlugin, RsbuildPlugin } from '@rsbuild/core';
import { getDistPath } from '@rsbuild/shared';
import { cloneDeep } from '@rsbuild/shared';
import type { PluginRemOptions, PxToRemOptions } from './types';

Expand Down
7 changes: 5 additions & 2 deletions packages/plugin-styled-components/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import type { RsbuildConfig, RsbuildPlugin } from '@rsbuild/core';
import type {
ChainedConfig,
RsbuildConfig,
RsbuildPlugin,
} from '@rsbuild/core';
import {
type ChainedConfig,
getNodeEnv,
isServerTarget,
mergeChainedOptions,
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-type-check/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { type RsbuildPlugin, logger } from '@rsbuild/core';
import { type ChainedConfig, type RsbuildPlugin, logger } from '@rsbuild/core';
import {
CHAIN_ID,
type ChainedConfig,
NODE_MODULES_REGEX,
deepmerge,
fse,
Expand Down
3 changes: 1 addition & 2 deletions packages/plugin-typed-css-modules/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import path from 'node:path';
import type { RsbuildPlugin } from '@rsbuild/core';
import type { CSSLoaderOptions } from '@rsbuild/shared';
import type { CSSLoaderOptions, RsbuildPlugin } from '@rsbuild/core';

const PLUGIN_NAME = 'rsbuild:typed-css-modules';

Expand Down
24 changes: 12 additions & 12 deletions packages/plugin-typed-css-modules/src/loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const getNoDeclarationFileError = ({ filename }: { filename: string }) =>
`Generated type declaration does not exist. Run webpack and commit the type declaration for '${filename}'`,
);

export const isCssModules = (filename: string, modules: CssLoaderModules) => {
export const isCSSModules = (filename: string, modules: CssLoaderModules) => {
if (typeof modules === 'boolean') {
return modules;
}
Expand Down Expand Up @@ -93,8 +93,8 @@ export function wrapQuotes(key: string) {
return `'${key}'`;
}

const cssModuleToInterface = (cssModuleKeys: string[]) => {
const interfaceFields = cssModuleKeys
const cssModuleToInterface = (cssModulesKeys: string[]) => {
const interfaceFields = cssModulesKeys
.sort()
.map((key) => ` ${wrapQuotes(key)}: string;`)
.join('\n');
Expand Down Expand Up @@ -146,30 +146,30 @@ const extractLocalExports = (content: string) => {
return localExports;
};

const getCssModuleKeys = (content: string) => {
const getCSSModulesKeys = (content: string) => {
const keyRegex = /"([^\\"]+)":/g;
const cssModuleKeys = [];
const cssModulesKeys = [];

const localExports = extractLocalExports(content);

let match = keyRegex.exec(localExports);

while (match !== null) {
if (cssModuleKeys.indexOf(match[1]) < 0) {
cssModuleKeys.push(match[1]);
if (cssModulesKeys.indexOf(match[1]) < 0) {
cssModulesKeys.push(match[1]);
}
match = keyRegex.exec(localExports);
}

return cssModuleKeys;
return cssModulesKeys;
};

export default function (
this: Rspack.LoaderContext<{
mode: string;
modules: CssLoaderModules;
}> & {
cssModuleKeys?: string[];
cssModulesKeys?: string[];
},
content: string,
...rest: any[]
Expand All @@ -183,16 +183,16 @@ export default function (
return failed(new Error(`Invalid mode option: ${mode}`));
}

if (!isCssModules(filename, modules) || isInNodeModules(filename)) {
if (!isCSSModules(filename, modules) || isInNodeModules(filename)) {
return success();
}

const cssModuleInterfaceFilename = filenameToTypingsFilename(filename);
const { read, write } = makeFileHandlers(cssModuleInterfaceFilename);

const cssModuleKeys = this.cssModuleKeys || getCssModuleKeys(content);
const cssModulesKeys = this.cssModulesKeys || getCSSModulesKeys(content);
const cssModuleDefinition = `${bannerMessage}\n${cssModuleToInterface(
cssModuleKeys,
cssModulesKeys,
)}\n${cssModuleExport}`;

if (mode === 'verify') {
Expand Down
Loading

0 comments on commit fa57fcc

Please sign in to comment.