@compiled/webpack-loader 0.8.7 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export declare const styles: import("@compiled/react").CSSProps;
1
+ export declare const styles: import("@compiled/react").CSSProps<unknown>;
@@ -1 +1 @@
1
- export declare const styles: import("@compiled/react").CSSProps;
1
+ export declare const styles: import("@compiled/react").CSSProps<unknown>;
@@ -30,7 +30,7 @@ let hasErrored = false;
30
30
  * @returns
31
31
  */
32
32
  function getLoaderOptions(context) {
33
- const { bake = true, extract = false, importReact = undefined, nonce = undefined, resolve = {}, extensions = undefined, babelPlugins = [], [extract_plugin_1.pluginName]: isPluginEnabled = false, } = typeof context.getOptions === 'undefined'
33
+ const { bake = true, extract = false, importReact = undefined, nonce = undefined, resolve = {}, extensions = undefined, parserBabelPlugins = [], transformerBabelPlugins = [], [extract_plugin_1.pluginName]: isPluginEnabled = false, ssr = false, optimizeCss = true, } = typeof context.getOptions === 'undefined'
34
34
  ? // Webpack v4 flow
35
35
  (0, loader_utils_1.getOptions)(context)
36
36
  : // Webpack v5 flow
@@ -55,12 +55,21 @@ function getLoaderOptions(context) {
55
55
  extensions: {
56
56
  type: 'array',
57
57
  },
58
- babelPlugins: {
58
+ parserBabelPlugins: {
59
+ type: 'array',
60
+ },
61
+ transformerBabelPlugins: {
59
62
  type: 'array',
60
63
  },
61
64
  [extract_plugin_1.pluginName]: {
62
65
  type: 'boolean',
63
66
  },
67
+ ssr: {
68
+ type: 'boolean',
69
+ },
70
+ optimizeCss: {
71
+ type: 'boolean',
72
+ },
64
73
  },
65
74
  });
66
75
  return {
@@ -70,8 +79,11 @@ function getLoaderOptions(context) {
70
79
  nonce,
71
80
  resolve,
72
81
  extensions,
73
- babelPlugins,
82
+ parserBabelPlugins,
83
+ transformerBabelPlugins,
74
84
  [extract_plugin_1.pluginName]: isPluginEnabled,
85
+ ssr,
86
+ optimizeCss,
75
87
  };
76
88
  }
77
89
  /**
@@ -81,7 +93,7 @@ function getLoaderOptions(context) {
81
93
  * @param code
82
94
  */
83
95
  async function compiledLoader(code) {
84
- var _a, _b, _c;
96
+ var _a, _b, _c, _d, _e;
85
97
  const callback = this.async();
86
98
  // Bail early if Compiled isn't in the module or we're looking at compiled runtime code
87
99
  if (code.indexOf('@compiled/react') === -1 ||
@@ -90,19 +102,20 @@ async function compiledLoader(code) {
90
102
  }
91
103
  try {
92
104
  const includedFiles = [];
93
- const _d = getLoaderOptions(this), { resolve } = _d, options = __rest(_d, ["resolve"]);
105
+ const _f = getLoaderOptions(this), { resolve } = _f, options = __rest(_f, ["resolve"]);
94
106
  // Transform to an AST using the local babel config.
95
107
  const ast = await (0, core_1.parseAsync)(code, {
96
108
  filename: this.resourcePath,
97
109
  caller: { name: 'compiled' },
98
110
  rootMode: 'upward-optional',
111
+ plugins: (_a = options.transformerBabelPlugins) !== null && _a !== void 0 ? _a : undefined,
99
112
  });
100
113
  // Setup the default resolver, where webpack will merge any passed in options with the default
101
114
  // resolve configuration. Ideally, we use this.getResolve({ ...resolve, useSyncFileSystemCalls: true, })
102
115
  // However, it does not work correctly when in development mode :/
103
116
  const resolver = enhanced_resolve_1.ResolverFactory.createResolver(Object.assign(Object.assign(Object.assign({
104
117
  // @ts-expect-error
105
- fileSystem: new enhanced_resolve_1.CachedInputFileSystem(fs_1.default, 4000) }, ((_b = (_a = this._compilation) === null || _a === void 0 ? void 0 : _a.options.resolve) !== null && _b !== void 0 ? _b : {})), resolve), {
118
+ fileSystem: new enhanced_resolve_1.CachedInputFileSystem(fs_1.default, 4000) }, ((_c = (_b = this._compilation) === null || _b === void 0 ? void 0 : _b.options.resolve) !== null && _c !== void 0 ? _c : {})), resolve), {
106
119
  // This makes the resolver invoke the callback synchronously
107
120
  useSyncFileSystemCalls: true }));
108
121
  // Transform using the Compiled Babel Plugin - we deliberately turn off using the local config.
@@ -112,10 +125,12 @@ async function compiledLoader(code) {
112
125
  sourceMaps: true,
113
126
  filename: this.resourcePath,
114
127
  plugins: [
128
+ ...((_d = options.transformerBabelPlugins) !== null && _d !== void 0 ? _d : []),
115
129
  options.extract && [
116
130
  '@compiled/babel-plugin-strip-runtime',
117
131
  {
118
132
  styleSheetPath: `@compiled/webpack-loader/css-loader!@compiled/webpack-loader/css-loader/${extract_plugin_1.styleSheetName}.css`,
133
+ compiledRequireExclude: options.ssr,
119
134
  },
120
135
  ],
121
136
  options.bake && [
@@ -132,7 +147,7 @@ async function compiledLoader(code) {
132
147
  includedFiles.forEach((file) => {
133
148
  this.addDependency((0, path_1.normalize)(file));
134
149
  });
135
- callback(null, (result === null || result === void 0 ? void 0 : result.code) || '', (_c = result === null || result === void 0 ? void 0 : result.map) !== null && _c !== void 0 ? _c : undefined);
150
+ callback(null, (result === null || result === void 0 ? void 0 : result.code) || '', (_e = result === null || result === void 0 ? void 0 : result.map) !== null && _e !== void 0 ? _e : undefined);
136
151
  }
137
152
  catch (e) {
138
153
  // @ts-expect-error Not checking for error type
@@ -1 +1 @@
1
- {"version":3,"file":"compiled-loader.js","sourceRoot":"","sources":["../src/compiled-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compiled-loader.js","sourceRoot":"","sources":["../src/compiled-loader.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ exports.styleSheetName = 'compiled-css';
28
28
  const getCSSAssets = (assets) => {
29
29
  return Object.keys(assets)
30
30
  .filter((assetName) => {
31
- return assetName.endsWith(`${exports.styleSheetName}.css`);
31
+ return assetName.includes(exports.styleSheetName) && assetName.endsWith('.css');
32
32
  })
33
33
  .map((assetName) => ({ name: assetName, source: assets[assetName], info: {} }));
34
34
  };
@@ -39,7 +39,7 @@ const getCSSAssets = (assets) => {
39
39
  *
40
40
  * @param compiler
41
41
  */
42
- const forceCSSIntoOneStyleSheet = (compiler) => {
42
+ const forceCSSIntoOneStyleSheet = (compiler, options) => {
43
43
  const cacheGroup = {
44
44
  compiledCSS: {
45
45
  name: exports.styleSheetName,
@@ -48,6 +48,7 @@ const forceCSSIntoOneStyleSheet = (compiler) => {
48
48
  // We merge only CSS from Compiled.
49
49
  test: /css-loader\/compiled-css\.css$/,
50
50
  enforce: true,
51
+ priority: Infinity,
51
52
  },
52
53
  };
53
54
  if (!compiler.options.optimization) {
@@ -61,7 +62,7 @@ const forceCSSIntoOneStyleSheet = (compiler) => {
61
62
  if (!compiler.options.optimization.splitChunks.cacheGroups) {
62
63
  compiler.options.optimization.splitChunks.cacheGroups = {};
63
64
  }
64
- Object.assign(compiler.options.optimization.splitChunks.cacheGroups, cacheGroup);
65
+ Object.assign(compiler.options.optimization.splitChunks.cacheGroups, options.cacheGroupExclude ? {} : cacheGroup);
65
66
  };
66
67
  /**
67
68
  * Pushes a new loader onto the compiler.
@@ -101,7 +102,7 @@ class CompiledExtractPlugin {
101
102
  apply(compiler) {
102
103
  const { RawSource } = (0, utils_2.getSources)(compiler);
103
104
  pushNodeModulesExtractLoader(compiler, __classPrivateFieldGet(this, _CompiledExtractPlugin_options, "f"));
104
- forceCSSIntoOneStyleSheet(compiler);
105
+ forceCSSIntoOneStyleSheet(compiler, __classPrivateFieldGet(this, _CompiledExtractPlugin_options, "f"));
105
106
  compiler.hooks.compilation.tap(exports.pluginName, (compilation) => {
106
107
  (0, utils_2.setPluginConfiguredOption)(compilation.options.module.rules, exports.pluginName);
107
108
  (0, utils_2.getOptimizeAssetsHook)(compiler, compilation).tap(exports.pluginName, (assets) => {
@@ -1 +1 @@
1
- {"version":3,"file":"extract-plugin.js","sourceRoot":"","sources":["../src/extract-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract-plugin.js","sourceRoot":"","sources":["../src/extract-plugin.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { PluginItem } from '@babel/core';
1
2
  import type { ParserPlugin } from '@babel/parser';
2
3
  import type { ResolveOptions, RuleSetCondition } from 'webpack';
3
4
  import type { pluginName } from './extract-plugin';
@@ -18,6 +19,11 @@ export interface CompiledLoaderOptions {
18
19
  * When using @babel/preset-react with the automatic runtime this is not needed and can be set to false.
19
20
  */
20
21
  importReact?: boolean;
22
+ /**
23
+ * Will run additional cssnano plugin to normalize CSS during build.
24
+ * Default to `true`.
25
+ */
26
+ optimizeCss?: boolean;
21
27
  /**
22
28
  * Enables CSP support,
23
29
  * read [Security](https://compiledcssinjs.com/docs/security) for more information.
@@ -32,13 +38,26 @@ export interface CompiledLoaderOptions {
32
38
  */
33
39
  extensions?: string[];
34
40
  /**
35
- * List of babel plugins to be applied to evaluated files
41
+ * List of transformer babel plugins to be applied to evaluated files
42
+ *
43
+ * See the [babel docs](https://babeljs.io/docs/en/plugins/#transform-plugins)
36
44
  */
37
- babelPlugins?: ParserPlugin[];
45
+ transformerBabelPlugins?: PluginItem[];
46
+ /**
47
+ * List of parse babel plugins to be applied to evaluated files
48
+ *
49
+ * See the [babel docs](https://babeljs.io/docs/en/plugins/#syntax-plugins)
50
+ */
51
+ parserBabelPlugins?: ParserPlugin[];
38
52
  /**
39
53
  * Set to true if CompiledExtractPlugin has been set up correctly
40
54
  */
41
55
  [pluginName]?: boolean;
56
+ /**
57
+ * Build in a node environment.
58
+ * Defaults to `false`.
59
+ */
60
+ ssr?: boolean;
42
61
  }
43
62
  export interface CompiledExtractPluginOptions {
44
63
  /**
@@ -56,4 +75,9 @@ export interface CompiledExtractPluginOptions {
56
75
  * See: https://webpack.js.org/configuration/module/#condition
57
76
  */
58
77
  nodeModulesExclude?: RuleSetCondition;
78
+ /**
79
+ * When set will prevent additional cacheGroup chunk to be created.
80
+ * Eg. This may be required in SSR to prevent side-effects
81
+ */
82
+ cacheGroupExclude?: boolean;
59
83
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compiled/webpack-loader",
3
- "version": "0.8.7",
3
+ "version": "0.9.2",
4
4
  "description": "A familiar and performant compile time CSS-in-JS library for React.",
5
5
  "homepage": "https://compiledcssinjs.com/docs/pkg-webpack-loader",
6
6
  "bugs": "https://github.com/atlassian-labs/compiled/issues/new?assignees=&labels=bug&template=bug_report.md",
@@ -20,25 +20,25 @@
20
20
  "src"
21
21
  ],
22
22
  "dependencies": {
23
- "@babel/core": "^7.17.8",
24
- "@compiled/babel-plugin": "^0.15.0",
25
- "@compiled/babel-plugin-strip-runtime": "^0.14.1",
26
- "@compiled/css": "^0.8.2",
27
- "@compiled/react": "0.10.4",
23
+ "@babel/core": "^7.17.10",
24
+ "@compiled/babel-plugin": "^0.16.3",
25
+ "@compiled/babel-plugin-strip-runtime": "^0.16.0",
26
+ "@compiled/css": "^0.8.4",
27
+ "@compiled/react": "0.11.0",
28
28
  "@compiled/utils": "^0.6.16",
29
- "enhanced-resolve": "^5.8.3",
29
+ "enhanced-resolve": "^5.10.0",
30
30
  "loader-utils": "^2.0.2",
31
31
  "webpack-sources": "^3.2.3"
32
32
  },
33
33
  "devDependencies": {
34
34
  "babel-loader": "^8.2.4",
35
35
  "css-loader": "^6.7.1",
36
- "memfs": "^3.4.1",
36
+ "memfs": "^3.4.7",
37
37
  "mini-css-extract-plugin": "^1.6.2",
38
38
  "react": "^17.0.2",
39
- "ts-node": "^10.7.0",
40
- "tsconfig-paths": "^3.13.0",
41
- "webpack": "^5.70.0"
39
+ "ts-node": "^10.8.2",
40
+ "tsconfig-paths": "^3.14.1",
41
+ "webpack": "^5.71.0"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "webpack": ">= 4.46.0"
@@ -4,7 +4,6 @@ import { bundle as bundleEntry } from './test-utils';
4
4
  import type { BundleOptions } from './test-utils';
5
5
 
6
6
  describe('CompiledExtractPlugin', () => {
7
- const assetName = 'static/compiled-css.css';
8
7
  const fixturesPath = join(__dirname, '..', '__fixtures__');
9
8
 
10
9
  const bundle = (entry: string, options: Omit<BundleOptions, 'mode'> = {}) =>
@@ -12,6 +11,13 @@ describe('CompiledExtractPlugin', () => {
12
11
  ...options,
13
12
  extract: true,
14
13
  mode: 'production',
14
+ }).then((assets) => {
15
+ for (const assetName in assets) {
16
+ if (assetName.includes('compiled-css') && assetName.endsWith('.css')) {
17
+ return assets[assetName];
18
+ }
19
+ }
20
+ return undefined;
15
21
  });
16
22
 
17
23
  it('throws when the plugin is not configured', async () => {
@@ -26,10 +32,18 @@ describe('CompiledExtractPlugin', () => {
26
32
  ]);
27
33
  }, 10000);
28
34
 
35
+ it('should not generate a single style sheet if cacheGroup is disabled', async () => {
36
+ const actual = await bundle(join(fixturesPath, 'local-styles.tsx'), {
37
+ disableCacheGroup: true,
38
+ });
39
+
40
+ expect(actual).toBe(undefined);
41
+ }, 10000);
42
+
29
43
  it('extracts local styles', async () => {
30
44
  const actual = await bundle(join(fixturesPath, 'local-styles.tsx'));
31
45
 
32
- expect(actual[assetName]).toMatchInlineSnapshot(`
46
+ expect(actual).toMatchInlineSnapshot(`
33
47
  "._1wybdlk8{font-size:14px}
34
48
  ._syaz13q2{color:blue}
35
49
  "
@@ -41,7 +55,7 @@ describe('CompiledExtractPlugin', () => {
41
55
 
42
56
  // This should not contain any styles from the unused relative import ./common/css-prop, which includes
43
57
  // {color:coral} or {border:2px solid coral}
44
- expect(actual[assetName]).toMatchInlineSnapshot(`
58
+ expect(actual).toMatchInlineSnapshot(`
45
59
  "
46
60
  ._syaz5scu{color:red}
47
61
  ._syazmu8g{color:blueviolet}
@@ -55,7 +69,7 @@ describe('CompiledExtractPlugin', () => {
55
69
  it('extracts styles imported through a webpack alias', async () => {
56
70
  const assets = await bundle(join(fixturesPath, 'webpack-alias.tsx'));
57
71
 
58
- expect(assets[assetName]).toMatchInlineSnapshot(`
72
+ expect(assets).toMatchInlineSnapshot(`
59
73
  "._syaz13q2{color:blue}
60
74
  "
61
75
  `);
@@ -71,21 +85,24 @@ describe('CompiledExtractPlugin', () => {
71
85
  },
72
86
  });
73
87
 
74
- expect(assets[assetName]).toMatchInlineSnapshot(`
88
+ expect(assets).toMatchInlineSnapshot(`
75
89
  "._syaz1if8{color:indigo}
76
90
  "
77
91
  `);
78
92
  }, 10000);
79
93
 
80
94
  it('extracts styles from an async chunk', async () => {
81
- const actual = await bundle(join(fixturesPath, 'async-styles.ts'));
95
+ const assets = await bundleEntry(join(fixturesPath, 'async-styles.ts'), {
96
+ extract: true,
97
+ mode: 'production',
98
+ });
82
99
 
83
100
  // Only generate one CSS bundle
84
- const cssFiles = Object.keys(actual).filter((key) => key.endsWith('.css'));
101
+ const cssFiles = Object.keys(assets).filter((key) => key.endsWith('.css'));
85
102
  expect(cssFiles).toHaveLength(1);
86
103
 
87
104
  // Extract the styles into said bundle
88
- expect(actual[assetName]).toMatchInlineSnapshot(`
105
+ expect(assets[cssFiles[0]]).toMatchInlineSnapshot(`
89
106
  "._19it1e35{border:2px solid coral}
90
107
  ._syaz1vyr{color:coral}
91
108
  "
@@ -95,7 +112,7 @@ describe('CompiledExtractPlugin', () => {
95
112
  it('extracts styles from a pre-built babel files', async () => {
96
113
  const actual = await bundle(join(fixturesPath, 'babel.tsx'));
97
114
 
98
- expect(actual[assetName]).toMatchInlineSnapshot(`
115
+ expect(actual).toMatchInlineSnapshot(`
99
116
  "._19pk1ul9{margin-top:30px}
100
117
  ._19bvftgi{padding-left:8px}
101
118
  ._n3tdftgi{padding-bottom:8px}
@@ -111,7 +128,7 @@ describe('CompiledExtractPlugin', () => {
111
128
  it('extracts important styles', async () => {
112
129
  const actual = await bundle(join(fixturesPath, 'important-styles.tsx'));
113
130
 
114
- expect(actual[assetName]).toMatchInlineSnapshot(`
131
+ expect(actual).toMatchInlineSnapshot(`
115
132
  "._syaz13q2{color:blue}
116
133
  ._1wybc038{font-size:12!important}
117
134
  "
@@ -121,7 +138,7 @@ describe('CompiledExtractPlugin', () => {
121
138
  it('should find bindings', async () => {
122
139
  const actual = await bundle(join(fixturesPath, 'binding-not-found.tsx'));
123
140
 
124
- expect(actual[assetName]).toMatchInlineSnapshot(`
141
+ expect(actual).toMatchInlineSnapshot(`
125
142
  "._syaz1r31{color:currentColor}
126
143
  ._ajmmnqa1{-webkit-text-decoration-style:solid;text-decoration-style:solid}
127
144
  ._1hmsglyw{-webkit-text-decoration-line:none;text-decoration-line:none}
@@ -10,13 +10,20 @@ import type { ResolveOptions } from '../index';
10
10
  export interface BundleOptions {
11
11
  extract?: boolean;
12
12
  disableExtractPlugin?: boolean;
13
+ disableCacheGroup?: boolean;
13
14
  mode: 'development' | 'production';
14
15
  resolve?: ResolveOptions;
15
16
  }
16
17
 
17
18
  export function bundle(
18
19
  entry: string,
19
- { extract = false, disableExtractPlugin = false, mode, resolve = {} }: BundleOptions
20
+ {
21
+ extract = false,
22
+ disableExtractPlugin = false,
23
+ disableCacheGroup = false,
24
+ mode,
25
+ resolve = {},
26
+ }: BundleOptions
20
27
  ): Promise<Record<string, string>> {
21
28
  const outputPath = join(__dirname, 'dist');
22
29
  const compiler = webpack({
@@ -41,6 +48,7 @@ export function bundle(
41
48
  options: {
42
49
  extract,
43
50
  importReact: false,
51
+ optimizeCss: false,
44
52
  resolve,
45
53
  },
46
54
  },
@@ -61,8 +69,10 @@ export function bundle(
61
69
  path: outputPath,
62
70
  },
63
71
  plugins: [
64
- new MiniCssExtractPlugin({ filename: 'static/[name].css' }),
65
- ...(disableExtractPlugin ? [] : [new CompiledExtractPlugin()]),
72
+ new MiniCssExtractPlugin({ filename: 'static/[name].[contenthash].css' }),
73
+ ...(disableExtractPlugin
74
+ ? []
75
+ : [new CompiledExtractPlugin(disableCacheGroup ? { cacheGroupExclude: true } : {})]),
66
76
  ],
67
77
  resolve: {
68
78
  alias: {
@@ -26,8 +26,11 @@ function getLoaderOptions(context: LoaderContext<CompiledLoaderOptions>) {
26
26
  nonce = undefined,
27
27
  resolve = {},
28
28
  extensions = undefined,
29
- babelPlugins = [],
29
+ parserBabelPlugins = [],
30
+ transformerBabelPlugins = [],
30
31
  [pluginName]: isPluginEnabled = false,
32
+ ssr = false,
33
+ optimizeCss = true,
31
34
  }: CompiledLoaderOptions = typeof context.getOptions === 'undefined'
32
35
  ? // Webpack v4 flow
33
36
  getOptions(context)
@@ -53,12 +56,21 @@ function getLoaderOptions(context: LoaderContext<CompiledLoaderOptions>) {
53
56
  extensions: {
54
57
  type: 'array',
55
58
  },
56
- babelPlugins: {
59
+ parserBabelPlugins: {
60
+ type: 'array',
61
+ },
62
+ transformerBabelPlugins: {
57
63
  type: 'array',
58
64
  },
59
65
  [pluginName]: {
60
66
  type: 'boolean',
61
67
  },
68
+ ssr: {
69
+ type: 'boolean',
70
+ },
71
+ optimizeCss: {
72
+ type: 'boolean',
73
+ },
62
74
  },
63
75
  });
64
76
 
@@ -69,8 +81,11 @@ function getLoaderOptions(context: LoaderContext<CompiledLoaderOptions>) {
69
81
  nonce,
70
82
  resolve,
71
83
  extensions,
72
- babelPlugins,
84
+ parserBabelPlugins,
85
+ transformerBabelPlugins,
73
86
  [pluginName]: isPluginEnabled,
87
+ ssr,
88
+ optimizeCss,
74
89
  };
75
90
  }
76
91
 
@@ -103,6 +118,7 @@ export default async function compiledLoader(
103
118
  filename: this.resourcePath,
104
119
  caller: { name: 'compiled' },
105
120
  rootMode: 'upward-optional',
121
+ plugins: options.transformerBabelPlugins ?? undefined,
106
122
  });
107
123
 
108
124
  // Setup the default resolver, where webpack will merge any passed in options with the default
@@ -124,10 +140,12 @@ export default async function compiledLoader(
124
140
  sourceMaps: true,
125
141
  filename: this.resourcePath,
126
142
  plugins: [
143
+ ...(options.transformerBabelPlugins ?? []),
127
144
  options.extract && [
128
145
  '@compiled/babel-plugin-strip-runtime',
129
146
  {
130
147
  styleSheetPath: `@compiled/webpack-loader/css-loader!@compiled/webpack-loader/css-loader/${styleSheetName}.css`,
148
+ compiledRequireExclude: options.ssr,
131
149
  },
132
150
  ],
133
151
  options.bake && [
@@ -23,7 +23,7 @@ export const styleSheetName = 'compiled-css';
23
23
  const getCSSAssets = (assets: Compilation['assets']) => {
24
24
  return Object.keys(assets)
25
25
  .filter((assetName) => {
26
- return assetName.endsWith(`${styleSheetName}.css`);
26
+ return assetName.includes(styleSheetName) && assetName.endsWith('.css');
27
27
  })
28
28
  .map((assetName) => ({ name: assetName, source: assets[assetName], info: {} }));
29
29
  };
@@ -35,7 +35,7 @@ const getCSSAssets = (assets: Compilation['assets']) => {
35
35
  *
36
36
  * @param compiler
37
37
  */
38
- const forceCSSIntoOneStyleSheet = (compiler: Compiler) => {
38
+ const forceCSSIntoOneStyleSheet = (compiler: Compiler, options: CompiledExtractPluginOptions) => {
39
39
  const cacheGroup = {
40
40
  compiledCSS: {
41
41
  name: styleSheetName,
@@ -44,6 +44,7 @@ const forceCSSIntoOneStyleSheet = (compiler: Compiler) => {
44
44
  // We merge only CSS from Compiled.
45
45
  test: /css-loader\/compiled-css\.css$/,
46
46
  enforce: true,
47
+ priority: Infinity,
47
48
  },
48
49
  };
49
50
 
@@ -61,7 +62,10 @@ const forceCSSIntoOneStyleSheet = (compiler: Compiler) => {
61
62
  compiler.options.optimization.splitChunks.cacheGroups = {};
62
63
  }
63
64
 
64
- Object.assign(compiler.options.optimization.splitChunks.cacheGroups, cacheGroup);
65
+ Object.assign(
66
+ compiler.options.optimization.splitChunks.cacheGroups,
67
+ options.cacheGroupExclude ? {} : cacheGroup
68
+ );
65
69
  };
66
70
 
67
71
  /**
@@ -110,7 +114,7 @@ export class CompiledExtractPlugin {
110
114
  const { RawSource } = getSources(compiler);
111
115
 
112
116
  pushNodeModulesExtractLoader(compiler, this.#options);
113
- forceCSSIntoOneStyleSheet(compiler);
117
+ forceCSSIntoOneStyleSheet(compiler, this.#options);
114
118
 
115
119
  compiler.hooks.compilation.tap(pluginName, (compilation) => {
116
120
  setPluginConfiguredOption(compilation.options.module.rules, pluginName);
package/src/types.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { PluginItem } from '@babel/core';
1
2
  import type { ParserPlugin } from '@babel/parser';
2
3
  import type { ResolveOptions, RuleSetCondition } from 'webpack';
3
4
 
@@ -24,6 +25,12 @@ export interface CompiledLoaderOptions {
24
25
  */
25
26
  importReact?: boolean;
26
27
 
28
+ /**
29
+ * Will run additional cssnano plugin to normalize CSS during build.
30
+ * Default to `true`.
31
+ */
32
+ optimizeCss?: boolean;
33
+
27
34
  /**
28
35
  * Enables CSP support,
29
36
  * read [Security](https://compiledcssinjs.com/docs/security) for more information.
@@ -41,14 +48,29 @@ export interface CompiledLoaderOptions {
41
48
  extensions?: string[];
42
49
 
43
50
  /**
44
- * List of babel plugins to be applied to evaluated files
51
+ * List of transformer babel plugins to be applied to evaluated files
52
+ *
53
+ * See the [babel docs](https://babeljs.io/docs/en/plugins/#transform-plugins)
45
54
  */
46
- babelPlugins?: ParserPlugin[];
55
+ transformerBabelPlugins?: PluginItem[];
56
+
57
+ /**
58
+ * List of parse babel plugins to be applied to evaluated files
59
+ *
60
+ * See the [babel docs](https://babeljs.io/docs/en/plugins/#syntax-plugins)
61
+ */
62
+ parserBabelPlugins?: ParserPlugin[];
47
63
 
48
64
  /**
49
65
  * Set to true if CompiledExtractPlugin has been set up correctly
50
66
  */
51
67
  [pluginName]?: boolean;
68
+
69
+ /**
70
+ * Build in a node environment.
71
+ * Defaults to `false`.
72
+ */
73
+ ssr?: boolean;
52
74
  }
53
75
 
54
76
  export interface CompiledExtractPluginOptions {
@@ -69,4 +91,10 @@ export interface CompiledExtractPluginOptions {
69
91
  * See: https://webpack.js.org/configuration/module/#condition
70
92
  */
71
93
  nodeModulesExclude?: RuleSetCondition;
94
+
95
+ /**
96
+ * When set will prevent additional cacheGroup chunk to be created.
97
+ * Eg. This may be required in SSR to prevent side-effects
98
+ */
99
+ cacheGroupExclude?: boolean;
72
100
  }