@plaudit/webpack-extensions 2.22.0 → 2.24.0

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,2 +1,3 @@
1
+ import type { Options as PostcssFunctionsOptions } from "postcss-functions";
1
2
  import type { PostCSSLoaderOptions } from "postcss-loader/dist/config";
2
- export declare function postcssConfigBuilder(verbose: boolean, variables: (name: string) => string | undefined): PostCSSLoaderOptions;
3
+ export declare function postcssConfigBuilder(verbose: boolean, variables: (name: string) => string | undefined, postCSSFunctions: (variables: (name: string) => unknown) => PostcssFunctionsOptions): PostCSSLoaderOptions;
@@ -57,13 +57,22 @@ const nanoConfig = {
57
57
  }
58
58
  ]
59
59
  };
60
- function postcssConfigBuilder(verbose, variables) {
60
+ function makeDefaultPostCSSFunctions(variables) {
61
+ const magnitude = new Intl.NumberFormat("en-US", { maximumFractionDigits: 4 });
62
+ return {
63
+ pxAsRem(value) {
64
+ return value ? `${magnitude.format(parseFloat(value.toString()) / (variables("font_size") || 16))}rem` : "1rem";
65
+ }
66
+ };
67
+ }
68
+ function postcssConfigBuilder(verbose, variables, postCSSFunctions) {
61
69
  return {
62
70
  plugins: [
63
71
  require("postcss-import")(), // Once
64
72
  require("@plaudit/postcss-silent-extend")({ warnOfUnused: verbose }), // Once (marks), OnceExit (apply)
65
73
  require("postcss-mixins")(), // There is a PostCSS 8 version, but we're forced to use the old one because the new one uses AtRule, which is too late in the process
66
74
  require("@plaudit/postcss-variables")({ variables }), // Once
75
+ require("postcss-functions")({ functions: { ...makeDefaultPostCSSFunctions(variables), ...postCSSFunctions(variables) } }),
67
76
  require("postcss-quantity-queries")(), // Legacy
68
77
  require("postcss-short-position")(), // Legacy
69
78
  require("postcss-short-size")(), // Legacy
@@ -1,3 +1,4 @@
1
+ import type { Options as PostcssFunctionsOptions } from "postcss-functions";
1
2
  import type { Configuration } from "webpack";
2
3
  interface AdvancedOutputConfig {
3
4
  destination: string;
@@ -11,6 +12,9 @@ type PlauditWordpressWebpackConfig = {
11
12
  verbose?: boolean;
12
13
  src: string[] | Record<string, string | AdvancedOutputConfig>;
13
14
  stats?: Configuration['stats'];
15
+ postcss?: {
16
+ functions?: (variables: (name: string) => unknown) => PostcssFunctionsOptions;
17
+ };
14
18
  };
15
19
  declare const _default: (config: PlauditWordpressWebpackConfig, webpackConfig?: Configuration[] | Configuration) => Configuration[];
16
20
  export = _default;
@@ -146,9 +146,9 @@ function replaceDefaultURLProcessing(webpackConfig) {
146
146
  }
147
147
  }
148
148
  }
149
- function injectPostcssConfigOverrides(webpackConfig, variables, verbose) {
149
+ function injectPostcssConfigOverrides(webpackConfig, variables, postcssFunctionsConfig, verbose) {
150
150
  if (webpackConfig.module?.rules) {
151
- const postcssConfig = (0, static_configs_1.postcssConfigBuilder)(verbose, name => variables(name) ?? (name === 'ENV' ? '' : undefined));
151
+ const postcssConfig = (0, static_configs_1.postcssConfigBuilder)(verbose, name => variables(name) ?? (name === 'ENV' ? '' : undefined), postcssFunctionsConfig);
152
152
  return webpackConfig.module.rules.map(rule => {
153
153
  if (isTruthy(rule) && typeof rule === 'object') {
154
154
  if (Array.isArray(rule.use)) {
@@ -171,6 +171,10 @@ function injectPostcssConfigOverrides(webpackConfig, variables, verbose) {
171
171
  rule.test = /\.m?[jt]sx?$/; // This hacks in support for mjs and mts files
172
172
  }
173
173
  }
174
+ if (rule.type === "asset/inline" && rule.test instanceof RegExp && rule.issuer instanceof RegExp && rule.test.test("test.svg") && rule.issuer.test("test.pcss")) {
175
+ rule.type = "asset/resource";
176
+ rule.generator = { filename: "images/[name].[hash:8][ext]" };
177
+ }
174
178
  if (typeof rule.generator === 'object') {
175
179
  const ruleGeneratorFilename = rule.generator["filename"];
176
180
  if (typeof ruleGeneratorFilename === 'string' && (ruleGeneratorFilename.startsWith("images/") || ruleGeneratorFilename.startsWith("fonts/"))) {
@@ -223,7 +227,7 @@ function processIndividualWebpackConfig(config, webpackConfig, sources) {
223
227
  const { standaloneBlocks, variablesFilePath, verbose } = config;
224
228
  let currentVariables = config.currentVariables;
225
229
  replaceDefaultURLProcessing(webpackConfig);
226
- const fixedRules = injectPostcssConfigOverrides(webpackConfig, name => currentVariables[name], verbose);
230
+ const fixedRules = injectPostcssConfigOverrides(webpackConfig, name => currentVariables[name], config.postcss.functions ?? (() => ({})), verbose);
227
231
  return sources.map(([src, dest]) => {
228
232
  const srcRoots = (typeof dest !== 'string' && dest.withLegacyBlocksIn
229
233
  ? [...src.split(','), ...resolveLegacyBlockScriptsInFolder(dest.withLegacyBlocksIn)]
@@ -419,13 +423,13 @@ function processIndividualWebpackConfig(config, webpackConfig, sources) {
419
423
  }
420
424
  module.exports = function (config, webpackConfig = require("@wordpress/scripts/config/webpack.config")) {
421
425
  testForDuplicatedEntryPaths(config);
422
- const { standaloneBlocks = false, stats = 'errors-warnings', variables: rawVariables, verbose = process.argv.includes('--verbose') || process.env['VERBOSE'] === 'true' } = config;
426
+ const { standaloneBlocks = false, stats = 'errors-warnings', variables: rawVariables, verbose = process.argv.includes('--verbose') || process.env['VERBOSE'] === 'true', postcss = {} } = config;
423
427
  let variablesFilePath = undefined;
424
428
  const currentVariables = rawVariables ?? {};
425
429
  if (!rawVariables) {
426
430
  variablesFilePath = ["variables.js", "src/site/variables.js"].map(p => node_path_1.default.join(process.cwd(), p)).filter(p => node_fs_1.default.existsSync(p))[0];
427
431
  }
428
- const cfg = { currentVariables, standaloneBlocks, stats, variablesFilePath, verbose };
432
+ const cfg = { currentVariables, postcss, standaloneBlocks, stats, variablesFilePath, verbose };
429
433
  const sources = Array.isArray(config.src) ? config.src.map(s => [s, s]) : Object.entries(config.src);
430
434
  if (Array.isArray(webpackConfig)) {
431
435
  return webpackConfig.flatMap(wpCfg => processIndividualWebpackConfig(cfg, wpCfg, sources));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plaudit/webpack-extensions",
3
- "version": "2.22.0",
3
+ "version": "2.24.0",
4
4
  "scripts": {
5
5
  "prepublishOnly": "rm -rf build && mkdir build && tsc",
6
6
  "build": "tsc",
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/browser-sync-webpack-plugin": "^2.2.5",
24
+ "@types/postcss-functions": "^4.0.3",
24
25
  "@types/node": "^20.12.12",
25
26
  "@types/tapable": "^2.2.7",
26
27
  "@types/webpack": "^5.28.5",