Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a bug that broke builds when using @storybook/testing-library #27

Merged
merged 1 commit into from Mar 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/late-avocados-join.md
@@ -0,0 +1,5 @@
---
"storybook-addon-swc": patch
---

Fix a bug that broke builds when using @storybook/testing-library
13 changes: 7 additions & 6 deletions src/index.ts
@@ -1,6 +1,6 @@
import { Configuration } from 'webpack';
import { Config, JsMinifyOptions } from '@swc/core';
import { Options } from '@storybook/core-common';
import { Options as SWCLoaderOptions, JsMinifyOptions } from '@swc/core';
import { Options as StorybookOptions } from '@storybook/core-common';
import merge from 'deepmerge';

import { replaceLoader, replaceMinimizer, disableSourceMap } from './transformers';
Expand All @@ -9,7 +9,7 @@ export interface StoryBookAddonSwcOptions {
enable: boolean;
enableSwcLoader: boolean;
enableSwcMinify: boolean;
swcLoaderOptions: Config;
swcLoaderOptions: SWCLoaderOptions;
swcMinifyOptions: JsMinifyOptions;
}

Expand All @@ -19,6 +19,7 @@ const defaultOptions: StoryBookAddonSwcOptions = {
enableSwcLoader: true,
enableSwcMinify: true,
swcLoaderOptions: {
isModule: 'unknown',
sourceMaps: !isProduction,
jsc: {
parser: {
Expand Down Expand Up @@ -53,15 +54,15 @@ const includeSwcConfig = (config: Configuration, options: StoryBookAddonSwcOptio
};

const addonFilePattern = /storybook-addon-swc(.(cjs|esm))?.js/;
const getAddonOptions = (options: Options): StoryBookAddonSwcOptions => {
const getAddonOptions = (options: StorybookOptions): StoryBookAddonSwcOptions => {
const addonOptions = options.presetsList?.find(preset => addonFilePattern.test(preset.name)).options ?? {};
return merge(defaultOptions, addonOptions);
};

export const webpack = (config: Configuration, options: Options): Configuration => {
export const webpack = (config: Configuration, options: StorybookOptions): Configuration => {
return includeSwcConfig(config, getAddonOptions(options));
};

export const managerWebpack = (config: Configuration, options: Options): Configuration => {
export const managerWebpack = (config: Configuration, options: StorybookOptions): Configuration => {
return includeSwcConfig(config, getAddonOptions(options));
};
8 changes: 4 additions & 4 deletions src/transformers.ts
@@ -1,11 +1,11 @@
import { Configuration, ModuleOptions, RuleSetRule } from 'webpack';
import { Config, JsMinifyOptions } from '@swc/core';
import { Options as SWCLoaderOptions, JsMinifyOptions } from '@swc/core';
import TerserPlugin from 'terser-webpack-plugin';

const babelLoaderPattern = /babel-loader/;

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const createSwcLoader = (options: Config): Record<string, any> => {
export const createSwcLoader = (options: SWCLoaderOptions): Record<string, any> => {
return {
loader: require.resolve('swc-loader'),
options: {
Expand All @@ -15,7 +15,7 @@ export const createSwcLoader = (options: Config): Record<string, any> => {
};
};

export const replaceRuleSetRule = (rule: ModuleOptions['rules'][0], options: Config): RuleSetRule => {
export const replaceRuleSetRule = (rule: ModuleOptions['rules'][0], options: SWCLoaderOptions): RuleSetRule => {
if (!('test' in rule && rule.test instanceof RegExp)) return rule;
if (!rule.test.test('dummy.js') && !rule.test.test('dummy.ts')) return rule;

Expand Down Expand Up @@ -54,7 +54,7 @@ export const replaceRuleSetRule = (rule: ModuleOptions['rules'][0], options: Con
return rule;
};

export const replaceLoader = (options: Config): (config: Configuration) => Configuration => {
export const replaceLoader = (options: SWCLoaderOptions): (config: Configuration) => Configuration => {
return (config: Configuration) => ({
...config,
module: {
Expand Down