Skip to content

Commit

Permalink
More stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
patricklafrance committed Jan 16, 2025
1 parent 0a4279c commit 62aa44c
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 69 deletions.
5 changes: 5 additions & 0 deletions .changeset/strong-onions-hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@workleap/rslib-configs": patch
---

React and SVGR code transformation are not activated by default anymore for the dev and build configs.
10 changes: 5 additions & 5 deletions docs/rslib/configure-build.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,16 +262,16 @@ export default defineBuildConfig({

### `react`

- **Type**: `false` or `(defaultOptions: PluginReactOptions) => PluginReactOptions`
- **Type**: `true` or `(defaultOptions: PluginReactOptions) => PluginReactOptions`
- **Default**: `defaultOptions => defaultOptions`

Whether or not to transform React code. To disable React code transformation, set the option to `false`.
Whether or not to transform React code. To enable React code transformation, set the option to `true`.

```ts !#4 rslib.build.ts
import { defineBuildConfig } from "@workleap/rslib-configs";

export default defineBuildConfig({
react: false
react: true
});
```

Expand All @@ -295,10 +295,10 @@ export default defineBuildConfig({

### `svgr`

- **Type**: `false` or `(defaultOptions: PluginSvgrOptions) => PluginSvgrOptions`
- **Type**: `true` or `(defaultOptions: PluginSvgrOptions) => PluginSvgrOptions`
- **Default**: `defaultOptions => defaultOptions`

Whether or not to handle `.svg` files with [plugin-svgr](https://rsbuild.dev/plugins/list/plugin-svgr). When the option is set to `false`, the `.svg` files will be handled by the `asset/resource` rule.
Whether or not to handle `.svg` files with [plugin-svgr](https://rsbuild.dev/plugins/list/plugin-svgr). To enable SVGR transformation, set the option to `true`. When this option is not activated, the `.svg` files will be handled by the `asset/resource` rule.

```ts !#4 rslib.build.ts
import { defineBuildConfig } from "@workleap/rslib-configs";
Expand Down
10 changes: 5 additions & 5 deletions docs/rslib/configure-dev.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,16 +244,16 @@ export default defineDevConfig({

### `react`

- **Type**: `false` or `(defaultOptions: PluginReactOptions) => PluginReactOptions`
- **Type**: `true` or `(defaultOptions: PluginReactOptions) => PluginReactOptions`
- **Default**: `defaultOptions => defaultOptions`

Whether or not to transform React code. To disable React code transformation, set the option to `false`.
Whether or not to transform React code. To enable React code transformation, set the option to `true`.

```ts !#4 rslib.dev.ts
import { defineDevConfig } from "@workleap/rslib-configs";

export default defineDevConfig({
react: false
react: true
});
```

Expand All @@ -277,10 +277,10 @@ export default defineDevConfig({

### `svgr`

- **Type**: `false` or `(defaultOptions: PluginSvgrOptions) => PluginSvgrOptions`
- **Type**: `true` or `(defaultOptions: PluginSvgrOptions) => PluginSvgrOptions`
- **Default**: `defaultOptions => defaultOptions`

Whether or not to handle `.svg` files with [plugin-svgr](https://rsbuild.dev/plugins/list/plugin-svgr). When the option is set to `false`, the `.svg` files will be handled by the `asset/resource` rule.
Whether or not to handle `.svg` files with [plugin-svgr](https://rsbuild.dev/plugins/list/plugin-svgr). To enable SVGR transformation, set the option to `true`. When this option is not activated, the `.svg` files will be handled by the `asset/resource` rule.

```ts !#4 rslib.dev.ts
import { defineDevConfig } from "@workleap/rslib-configs";
Expand Down
30 changes: 17 additions & 13 deletions knip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,12 @@ const rootConfig = defineWorkspace({
ignoreDependencies: [
// Required for Stylelint (seems like a Knip bug)
"prettier",
// Installed once for all the workspace's projects
"ts-node"
]
});

const packagesConfig: KnipWorkspaceConfig = defineWorkspace({}, [
configurePackage,
configureTsup
configurePackage
]);

const swcConfig: KnipWorkspaceConfig = defineWorkspace({
Expand All @@ -123,8 +121,7 @@ const swcConfig: KnipWorkspaceConfig = defineWorkspace({
"browserslist"
]
}, [
configurePackage,
configureTsup
configurePackage
]);

const webpackConfig: KnipWorkspaceConfig = defineWorkspace({
Expand All @@ -135,8 +132,7 @@ const webpackConfig: KnipWorkspaceConfig = defineWorkspace({
"webpack-dev-server"
]
}, [
configurePackage,
configureTsup
configurePackage
]);

const configureWebpackSample: KnipTransformer = ({ entry, ...config }) => {
Expand All @@ -161,8 +157,7 @@ const webpackSampleAppConfig = defineWorkspace({}, [
]);

const webpackSampleComponentsConfig = defineWorkspace({}, [
configureWebpackSample,
configureTsup
configureWebpackSample
]);

const webpackSampleTsupLibConfig = defineWorkspace({}, [
Expand Down Expand Up @@ -191,11 +186,18 @@ const rsbuildSampleAppConfig = defineWorkspace({}, [
]);

const rsbuildSampleComponentsConfig = defineWorkspace({}, [
configureRsbuildSample,
configureTsup
configureRsbuildSample
]);

const rsbuildSampleRslibLibConfig = defineWorkspace({}, [
configureRsbuildSample
]);

const storybookRsbuildSample = defineWorkspace({}, [
ignoreBrowserslist
]);

const storybookSample = defineWorkspace({}, [
const storybookRslibSample = defineWorkspace({}, [
ignoreBrowserslist
]);

Expand All @@ -210,7 +212,9 @@ const config: KnipConfig = {
"samples/webpack/tsup-lib": webpackSampleTsupLibConfig,
"samples/rsbuild/app": rsbuildSampleAppConfig,
"samples/rsbuild/components": rsbuildSampleComponentsConfig,
"samples/storybook": storybookSample
"samples/rsbuild/rslib-lib": rsbuildSampleRslibLibConfig,
"samples/storybook/rsbuild": storybookRsbuildSample,
"samples/storybook/rslib": storybookRslibSample
},
ignoreWorkspaces: [
// Until it's migrated to ESLint 9.
Expand Down
3 changes: 3 additions & 0 deletions packages/rsbuild-configs/src/assertions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function isBoolean(value: unknown): value is boolean {
return typeof value === "boolean";
}
5 changes: 3 additions & 2 deletions packages/rsbuild-configs/src/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react";
import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr";
import path from "node:path";
import { applyTransformers, type RsbuildConfigTransformer } from "./applyTransformers.ts";
import { isBoolean } from "./assertions.ts";

export type DefineDevHtmlPluginConfigFunction = (defaultOptions: HtmlConfig) => HtmlConfig;
export type DefineDevDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions;
Expand Down Expand Up @@ -81,7 +82,7 @@ export function defineDevConfig(options: DefineDevConfigOptions = {}) {
} : undefined
},
server: {
https: typeof https === "boolean" ? undefined : https,
https: isBoolean(https) ? undefined : https,
host,
port,
historyApiFallback: true
Expand All @@ -108,7 +109,7 @@ export function defineDevConfig(options: DefineDevConfigOptions = {}) {
? html({ template: path.resolve("./public/index.html") })
: undefined,
plugins: [
typeof https === "boolean" && https && pluginBasicSsl(),
isBoolean(https) && https && pluginBasicSsl(),
react && pluginReact(react({
fastRefresh,
reactRefreshOptions: {
Expand Down
6 changes: 6 additions & 0 deletions packages/rslib-configs/src/assertions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Using "unknown" loses the typings.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function isFunction(value: unknown): value is (...args: any[]) => any {
return typeof value === "function";
}

35 changes: 15 additions & 20 deletions packages/rslib-configs/src/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react";
import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr";
import { defineConfig, type Dts, type RsbuildConfigEntry, type RsbuildConfigOutputTarget, type Syntax } from "@rslib/core";
import { applyTransformers, type RslibConfigTransformer } from "./applyTransformers.ts";
import { isFunction } from "./assertions.ts";

export type DefineBuildDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions;
export type DefineBuildSvgrPluginConfigFunction = (defaultOptions: PluginSvgrOptions) => PluginSvgrOptions;
Expand All @@ -17,19 +18,11 @@ export interface DefineBuildConfigOptions {
distPath?: DistPathConfig;
plugins?: RsbuildPlugins;
sourceMap?: boolean | SourceMap;
react?: false | DefineBuildDefineReactPluginConfigFunction;
svgr? : false | DefineBuildSvgrPluginConfigFunction;
react?: true | DefineBuildDefineReactPluginConfigFunction;
svgr? : true | DefineBuildSvgrPluginConfigFunction;
transformers?: RslibConfigTransformer[];
}

function defaultDefineReactPluginConfig(options: PluginReactOptions) {
return options;
}

function defineSvgrPluginConfig(options: PluginSvgrOptions) {
return options;
}

export function defineBuildConfig(options: DefineBuildConfigOptions = {}) {
const {
entry: entryValue,
Expand All @@ -46,8 +39,8 @@ export function defineBuildConfig(options: DefineBuildConfigOptions = {}) {
js: "source-map",
css: true
},
react = defaultDefineReactPluginConfig,
svgr = defineSvgrPluginConfig,
react = false,
svgr = false,
transformers = []
} = options;

Expand All @@ -63,6 +56,12 @@ export function defineBuildConfig(options: DefineBuildConfigOptions = {}) {
};
}

const svgrDefaultOptions: PluginSvgrOptions = {
svgrOptions: {
exportType: "named"
}
};

const config = defineConfig({
mode: "production",
lib: [{
Expand All @@ -82,15 +81,11 @@ export function defineBuildConfig(options: DefineBuildConfigOptions = {}) {
minify: false,
sourceMap
},
plugins: [
react && pluginReact(react({})),
svgr && pluginSvgr(svgr({
svgrOptions: {
exportType: "named"
}
})),
plugins: ([
react && pluginReact(isFunction(react) ? react({}) : {}),
svgr && pluginSvgr(isFunction(svgr) ? svgr(svgrDefaultOptions) : svgrDefaultOptions),
...plugins
].filter(Boolean)
] as RsbuildPlugins).filter(Boolean)
});

const transformedConfig = applyTransformers(config, transformers, {
Expand Down
35 changes: 15 additions & 20 deletions packages/rslib-configs/src/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react";
import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr";
import { defineConfig, type Dts, type RsbuildConfigEntry, type RsbuildConfigOutputTarget, type Syntax } from "@rslib/core";
import { applyTransformers, type RslibConfigTransformer } from "./applyTransformers.ts";
import { isFunction } from "./assertions.ts";

export type DefineDevDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions;
export type DefineDevSvgrPluginConfigFunction = (defaultOptions: PluginSvgrOptions) => PluginSvgrOptions;
Expand All @@ -17,19 +18,11 @@ export interface DefineDevConfigOptions {
distPath?: DistPathConfig;
plugins?: RsbuildPlugins;
sourceMap?: boolean | SourceMap;
react?: false | DefineDevDefineReactPluginConfigFunction;
svgr? : false | DefineDevSvgrPluginConfigFunction;
react?: true | DefineDevDefineReactPluginConfigFunction;
svgr? : true | DefineDevSvgrPluginConfigFunction;
transformers?: RslibConfigTransformer[];
}

function defaultDefineReactPluginConfig(options: PluginReactOptions) {
return options;
}

function defineSvgrPluginConfig(options: PluginSvgrOptions) {
return options;
}

export function defineDevConfig(options: DefineDevConfigOptions = {}) {
const {
entry: entryValue,
Expand All @@ -46,8 +39,8 @@ export function defineDevConfig(options: DefineDevConfigOptions = {}) {
js: "cheap-module-source-map",
css: true
},
react = defaultDefineReactPluginConfig,
svgr = defineSvgrPluginConfig,
react = false,
svgr = false,
transformers = []
} = options;

Expand All @@ -63,6 +56,12 @@ export function defineDevConfig(options: DefineDevConfigOptions = {}) {
};
}

const svgrDefaultOptions: PluginSvgrOptions = {
svgrOptions: {
exportType: "named"
}
};

const config = defineConfig({
mode: "development",
lib: [{
Expand All @@ -82,15 +81,11 @@ export function defineDevConfig(options: DefineDevConfigOptions = {}) {
minify: false,
sourceMap
},
plugins: [
react && pluginReact(react({})),
svgr && pluginSvgr(svgr({
svgrOptions: {
exportType: "named"
}
})),
plugins: ([
react && pluginReact(isFunction(react) ? react({}) : {}),
svgr && pluginSvgr(isFunction(svgr) ? svgr(svgrDefaultOptions) : svgrDefaultOptions),
...plugins
]
] as RsbuildPlugins).filter(Boolean)
});

const transformedConfig = applyTransformers(config, transformers, {
Expand Down
24 changes: 22 additions & 2 deletions packages/rslib-configs/tests/build.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,6 @@ test("when sourceMap is an object, the output.sourceMap option is the object", (

test("when react is false, the react plugin is not included", () => {
const result = defineBuildConfig({
react: false,
tsconfigPath: "./build.json"
});

Expand All @@ -144,6 +143,17 @@ test("when react is false, the react plugin is not included", () => {
expect(plugin).toBeUndefined();
});

test("when react is true, the react plugin is included", () => {
const result = defineBuildConfig({
react: true,
tsconfigPath: "./build.json"
});

const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react");

expect(plugin).toBeDefined();
});

test("when react is a function, the function is executed", () => {
const fct = jest.fn();

Expand All @@ -157,7 +167,6 @@ test("when react is a function, the function is executed", () => {

test("when svgr is false, the svgr plugin is not included", () => {
const result = defineBuildConfig({
svgr: false,
tsconfigPath: "./build.json"
});

Expand All @@ -166,6 +175,17 @@ test("when svgr is false, the svgr plugin is not included", () => {
expect(plugin).toBeUndefined();
});

test("when svgr is true, the svgr plugin is included", () => {
const result = defineBuildConfig({
svgr: true,
tsconfigPath: "./build.json"
});

const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:svgr");

expect(plugin).toBeDefined();
});

test("when svgr is a function, the function is executed", () => {
const fct = jest.fn();

Expand Down
Loading

0 comments on commit 62aa44c

Please sign in to comment.