@ideasonpurpose/build-tools-wordpress 2.3.2 → 2.5.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.
@@ -4,6 +4,10 @@ on:
4
4
  push:
5
5
  tags: ["v*"]
6
6
 
7
+ permissions:
8
+ id-token: write # Required for OIDC
9
+ contents: read
10
+
7
11
  jobs:
8
12
  publish:
9
13
  name: Build and publish to npm
@@ -16,10 +20,9 @@ jobs:
16
20
  # https://github.com/actions/setup-node
17
21
  - uses: actions/setup-node@v4
18
22
  with:
19
- node-version: 22
20
- registry-url: https://registry.npmjs.org/
23
+ node-version: '24'
24
+ registry-url: 'https://registry.npmjs.org'
21
25
 
22
26
  # - run: npm ci
23
- - run: npm publish
24
- env:
25
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
27
+ - run: npm publish --provenance --access public
28
+
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ #### v2.4.2
8
+
9
+ > 22 December 2025
10
+
11
+ - Update npm publish command with options
12
+
13
+ #### v2.4.1
14
+
15
+ > 22 December 2025
16
+
17
+ - update workflow for trusted publishing
18
+
19
+ #### v2.4.0
20
+
21
+ > 21 December 2025
22
+
23
+ - bump deps
24
+ - Enable loading Sass files from node_modules
25
+
26
+ #### v2.3.2
27
+
28
+ > 3 November 2025
29
+
30
+ - bump deps
31
+ - watch tweaks, debugging, formatting and cleanup
32
+
7
33
  #### v2.3.1
8
34
 
9
35
  > 21 October 2025
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @ideasonpurpose/build-tools-wordpress
2
2
 
3
- #### Version 2.3.2
3
+ #### Version 2.5.0
4
4
 
5
5
  [![NPM Version](https://img.shields.io/npm/v/%40ideasonpurpose%2Fbuild-tools-wordpress?logo=npm)](https://www.npmjs.com/package/@ideasonpurpose/build-tools-wordpress)
6
6
  [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/ideasonpurpose/build-tools-wordpress/npm-publish.yml?logo=github&logoColor=white)](https://github.com/ideasonpurpose/build-tools-wordpress#readme)
@@ -50,6 +50,14 @@ npm chokidar-cli "../../build-tools-wordpress/**/*" -c "npm install"
50
50
 
51
51
  This project expects an entirely ES Module based environment and specifies all dependencies using standard ESM import syntax. Projects importing this file should set `"type": "module"` in their package.json files.
52
52
 
53
+ #### Sass imports
54
+
55
+ Sass can import stylesheet files directly from npm packages. Use the full path from node_modules like this:
56
+
57
+ ```scss
58
+ @use "@ideasonpurpose/build-tools-wordpress/example/package-style";
59
+ ```
60
+
53
61
  #### Publishing to [npm](https://www.npmjs.com/package/@ideasonpurpose/build-tools-wordpress)
54
62
 
55
63
  A GitHub action will auto-publish version-tagged releases to npm. In order to publish, the repository must have an `NPM_TOKEN` secret set with the token from npm. [Log into npmjs.org](https://www.npmjs.com/login) with a publish-authorized account, then find the token page linked from the Profile page sidebar. Generate a new token and update the repository secret.
@@ -63,4 +71,3 @@ A GitHub action will auto-publish version-tagged releases to npm. In order to pu
63
71
  <a href="https://www.ideasonpurpose.com"><img src="https://raw.githubusercontent.com/ideasonpurpose/ideasonpurpose/master/iop-logo-white-on-black-88px.png" height="44" align="top" alt="IOP Logo"></a><img src="https://raw.githubusercontent.com/ideasonpurpose/ideasonpurpose/master/spacer.png" align="middle" width="4" height="54"> This project is actively developed and used in production at <a href="https://www.ideasonpurpose.com">Ideas On Purpose</a>.
64
72
 
65
73
  <!-- END IOP CREDIT BLURB -->
66
- ```
@@ -79,6 +79,9 @@ const stats = {
79
79
  loggingDebug: ["sass-loader"],
80
80
  };
81
81
 
82
+ /**
83
+ * @param {Record<string, any>} env - Environment variables from Webpack CLI
84
+ */
82
85
  export default async (env) => {
83
86
  // const siteDir = new URL(import.meta.url).pathname;
84
87
  const siteDir = process.cwd();
@@ -89,6 +92,15 @@ export default async (env) => {
89
92
 
90
93
  const proxy = isProduction ? {} : await devserverProxy(config);
91
94
 
95
+
96
+ /**
97
+ * Simple helper for encoding SVGs as data urls with proper encoding for special characters
98
+ * @param {Buffer} content
99
+ * @returns {string} - Encoded SVG data URL
100
+ */
101
+ const svgDataUrlHelper = (content) =>
102
+ `data:image/svg+xml,${encodeURIComponent(content.toString())}`;
103
+
92
104
  // console.log({config});
93
105
  // console.log({entry: config.entry});
94
106
  /**
@@ -101,11 +113,11 @@ export default async (env) => {
101
113
  *
102
114
  * TODO: Why so much dancing around defaults when this could just inherit from default.config?
103
115
  */
104
- const usePolling = Boolean(config.usePolling); // likely undefined, coerced to false
105
- const pollInterval = Math.max(
106
- parseInt(config.pollInterval, 10) || parseInt(config.usePolling, 10) || 400,
107
- 400,
108
- );
116
+ // const usePolling = Boolean(config.usePolling); // likely undefined, coerced to false
117
+ // const pollInterval = Math.max(
118
+ // parseInt(config.pollInterval, 10) || parseInt(config.usePolling, 10) || 400,
119
+ // 400,
120
+ // );
109
121
 
110
122
  const devtool = config.devtool || false;
111
123
 
@@ -172,7 +184,10 @@ export default async (env) => {
172
184
  sassOptions: {
173
185
  api: "modern-compiler",
174
186
 
175
- loadPaths: [path.resolve(config.src, "sass")],
187
+ loadPaths: [
188
+ path.resolve(config.src, "sass"),
189
+ path.resolve(siteDir, "node_modules"),
190
+ ],
176
191
  },
177
192
  },
178
193
  },
@@ -197,17 +212,35 @@ export default async (env) => {
197
212
  /**
198
213
  * SVGs can be imported as asset urls or React components
199
214
  *
215
+ * In SCSS files, SVGs will be treated as assets and inlined as data urls
216
+ * unless they are larger than 4kb
217
+ *
200
218
  * To import an SVG file as a src url, append ?url to the filename:
201
219
  * import svg from './assets/file.svg?url'
202
220
  *
203
- * To import an SVG file as a React component
204
-
205
221
  * @link https://react-svgr.com/docs/webpack/#use-svgr-and-asset-svg-in-the-same-project
206
222
  */
223
+ {
224
+ test: /\.svg$/i,
225
+ issuer: /\.scss$/,
226
+ type: "asset",
227
+ parser: {
228
+ dataUrlCondition: { maxSize: 4096 },
229
+ },
230
+ generator: {
231
+ dataUrl: svgDataUrlHelper,
232
+ },
233
+ },
207
234
  {
208
235
  test: /\.svg$/i,
209
236
  type: "asset",
210
237
  resourceQuery: /url/, // *.svg?url
238
+ parser: {
239
+ dataUrlCondition: { maxSize: 4096 },
240
+ },
241
+ generator: {
242
+ dataUrl: svgDataUrlHelper,
243
+ },
211
244
  },
212
245
  {
213
246
  test: /\.svg$/i,
@@ -356,6 +389,9 @@ export default async (env) => {
356
389
  // return true;
357
390
  // },
358
391
 
392
+ /**
393
+ * @param {Object} devServer - The devServer instance
394
+ */
359
395
  onListening: (devServer) => {
360
396
  const port = devServer.server.address().port;
361
397
  devServer.compiler.options.devServer.port =
@@ -365,6 +401,10 @@ export default async (env) => {
365
401
  console.log("Listening on port:", port);
366
402
  },
367
403
 
404
+ /**
405
+ * @param {Array<Function>} middlewares - Array of middleware functions
406
+ * @param {Object} devServer - The devServer instance
407
+ */
368
408
  setupMiddlewares: (middlewares, devServer) => {
369
409
  /**
370
410
  * The `/inform` route is an annoying bit of code. Here's why:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ideasonpurpose/build-tools-wordpress",
3
- "version": "2.3.2",
3
+ "version": "2.5.0",
4
4
  "description": "Build scripts and dependencies for IOP's WordPress development environments.",
5
5
  "homepage": "https://github.com/ideasonpurpose/build-tools-wordpress#readme",
6
6
  "bugs": {
@@ -36,69 +36,69 @@
36
36
  "@ideasonpurpose/prettier-config": "^1.0.1",
37
37
  "@ideasonpurpose/stylelint-config": "^1.1.4",
38
38
  "@prettier/plugin-php": "^0.24.0",
39
- "@rollup/plugin-commonjs": "^29.0.0",
39
+ "@rollup/plugin-commonjs": "^29.0.2",
40
40
  "@rollup/plugin-json": "^6.1.0",
41
41
  "@rollup/plugin-node-resolve": "^16.0.3",
42
42
  "@svgr/webpack": "^8.1.0",
43
- "@wordpress/dependency-extraction-webpack-plugin": "^6.34.0",
43
+ "@wordpress/dependency-extraction-webpack-plugin": "^6.41.0",
44
44
  "ansi-html": "^0.0.9",
45
45
  "archiver": "^7.0.1",
46
46
  "auto-changelog": "^2.5.0",
47
- "autoprefixer": "^10.4.21",
48
- "babel-loader": "^10.0.0",
49
- "caniuse-lite": "^1.0.30001753",
47
+ "autoprefixer": "^10.4.27",
48
+ "babel-loader": "^10.1.0",
49
+ "caniuse-lite": "^1.0.30001777",
50
50
  "chalk": "^5.6.2",
51
51
  "chalk-cli": "^6.0.0",
52
52
  "classnames": "^2.5.1",
53
- "cli-truncate": "^5.1.1",
54
- "copy-webpack-plugin": "^13.0.1",
55
- "cosmiconfig": "^9.0.0",
53
+ "cli-truncate": "^5.2.0",
54
+ "copy-webpack-plugin": "^14.0.0",
55
+ "cosmiconfig": "^9.0.1",
56
56
  "cross-env": "^10.1.0",
57
- "css-loader": "^7.1.2",
58
- "cssnano": "^7.1.2",
59
- "dotenv": "^17.2.3",
60
- "esbuild-loader": "^4.4.0",
61
- "eslint": "^9.39.0",
57
+ "css-loader": "^7.1.4",
58
+ "cssnano": "^7.1.3",
59
+ "dotenv": "^17.3.1",
60
+ "esbuild-loader": "^4.4.2",
61
+ "eslint": "^10.0.3",
62
62
  "filesize": "^11.0.13",
63
- "fs-extra": "^11.3.2",
64
- "globby": "^15.0.0",
65
- "html-webpack-plugin": "^5.6.4",
63
+ "fs-extra": "^11.3.4",
64
+ "globby": "^16.1.1",
65
+ "html-webpack-plugin": "^5.6.6",
66
66
  "http-proxy": "^1.18.1",
67
- "humanize-duration": "^3.33.1",
68
- "image-minimizer-webpack-plugin": "^4.1.4",
67
+ "humanize-duration": "^3.33.2",
68
+ "image-minimizer-webpack-plugin": "^5.0.0",
69
69
  "is-text-path": "^3.0.0",
70
- "lodash": "^4.17.21",
71
- "mini-css-extract-plugin": "^2.9.4",
72
- "ora": "^9.0.0",
73
- "postcss": "^8.5.6",
74
- "postcss-loader": "^8.2.0",
70
+ "lodash": "^4.17.23",
71
+ "mini-css-extract-plugin": "^2.10.0",
72
+ "ora": "^9.3.0",
73
+ "postcss": "^8.5.8",
74
+ "postcss-loader": "^8.2.1",
75
75
  "postcss-scss": "^4.0.9",
76
- "prettier": "^3.6.2",
76
+ "prettier": "^3.8.1",
77
77
  "pretty-hrtime": "^1.0.3",
78
- "read-package-up": "^11.0.0",
78
+ "read-package-up": "^12.0.0",
79
79
  "replacestream": "^4.0.3",
80
- "sass-embedded": "^1.93.3",
81
- "sass-loader": "^16.0.6",
82
- "semver": "^7.7.3",
83
- "sharp": "^0.34.4",
84
- "sort-package-json": "^3.4.0",
85
- "string-length": "^6.0.0",
80
+ "sass-embedded": "^1.97.3",
81
+ "sass-loader": "^16.0.7",
82
+ "semver": "^7.7.4",
83
+ "sharp": "^0.34.5",
84
+ "sort-package-json": "^3.6.1",
85
+ "string-length": "^7.0.1",
86
86
  "style-loader": "^4.0.0",
87
- "svgo": "^4.0.0",
87
+ "svgo": "^4.0.1",
88
88
  "svgo-loader": "^4.0.0",
89
89
  "version-everything": "^0.11.4",
90
- "webpack": "^5.102.1",
91
- "webpack-bundle-analyzer": "^4.10.2",
90
+ "webpack": "^5.105.4",
91
+ "webpack-bundle-analyzer": "^5.2.0",
92
92
  "webpack-dev-middleware": "^7.4.5",
93
- "webpack-dev-server": "^5.2.2",
93
+ "webpack-dev-server": "^5.2.3",
94
94
  "webpack-manifest-plugin": "^6.0.1"
95
95
  },
96
96
  "peerDependencies": {
97
97
  "webpack-cli": "^6.0.1"
98
98
  },
99
99
  "devDependencies": {
100
- "@vitest/coverage-v8": "^4.0.6",
101
- "vitest": "^4.0.6"
100
+ "@vitest/coverage-v8": "^4.0.18",
101
+ "vitest": "^4.0.18"
102
102
  },
103
103
  "version-everything": {
104
104
  "files": [