@plaudit/webpack-extensions 2.3.0 → 2.4.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,4 +1,6 @@
|
|
|
1
1
|
import { type Compiler, type WebpackPluginInstance } from "webpack";
|
|
2
2
|
export default class AdditionalDependencyInjectorPlugin implements WebpackPluginInstance {
|
|
3
|
+
private readonly entrypointAdditionalDependencies;
|
|
4
|
+
constructor(entrypointAdditionalDependencies: string[]);
|
|
3
5
|
apply(compiler: Compiler): void;
|
|
4
6
|
}
|
|
@@ -5,8 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
7
|
const webpack_1 = require("webpack");
|
|
8
|
-
const webpack_sources_1 = require("webpack-sources");
|
|
9
8
|
class AdditionalDependencyInjectorPlugin {
|
|
9
|
+
entrypointAdditionalDependencies;
|
|
10
|
+
constructor(entrypointAdditionalDependencies) {
|
|
11
|
+
this.entrypointAdditionalDependencies = entrypointAdditionalDependencies;
|
|
12
|
+
}
|
|
10
13
|
apply(compiler) {
|
|
11
14
|
compiler.hooks.thisCompilation.tap("AdditionalDependencyInjectorPlugin", compilation => {
|
|
12
15
|
compilation.hooks.processAssets.tap({
|
|
@@ -32,13 +35,16 @@ class AdditionalDependencyInjectorPlugin {
|
|
|
32
35
|
if (!assetSource) {
|
|
33
36
|
continue;
|
|
34
37
|
}
|
|
38
|
+
const additionalDependencies = [...this.entrypointAdditionalDependencies];
|
|
35
39
|
const firstLine = node_fs_1.default.readFileSync(assetSource, 'utf8').trim().split(/\r?\n/)[0];
|
|
36
40
|
if (firstLine.startsWith("//ADDITIONAL_DEPENDENCIES:")) {
|
|
37
|
-
|
|
41
|
+
additionalDependencies.push(...firstLine.substring(26).trim().split(',').map(dep => dep.trim()));
|
|
42
|
+
}
|
|
43
|
+
if (additionalDependencies.length > 0) {
|
|
38
44
|
const seen = new Set();
|
|
39
45
|
const additionalDeps = additionalDependencies.filter(dep => !seen.has(dep) && seen.add(dep)).sort().map(v => `'${v}'`).join(', ');
|
|
40
|
-
if (additionalDeps) {
|
|
41
|
-
compilation.updateAsset(name, new
|
|
46
|
+
if (additionalDeps.length > 0) {
|
|
47
|
+
compilation.updateAsset(name, new webpack_1.sources.RawSource(asset.source().toString().replace(/('dependencies'\s+=>\s+(?:array\(|\[))(.*)([)\]], 'version')/g, (match, g1, g2, g3) => `${g1}${g2.length > 0 ? `${g2}, ${additionalDeps}` : additionalDeps}${g3}`)));
|
|
42
48
|
}
|
|
43
49
|
}
|
|
44
50
|
}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { Configuration } from "webpack";
|
|
2
|
+
interface AdvancedOutputConfig {
|
|
3
|
+
destination: string;
|
|
4
|
+
withLegacyBlocksIn?: string | undefined;
|
|
5
|
+
additionalDependencies?: string[];
|
|
6
|
+
}
|
|
2
7
|
interface PlauditWordpressWebpackConfig {
|
|
3
8
|
standaloneBlocks?: boolean;
|
|
4
9
|
variables?: Record<string, any>;
|
|
5
10
|
verbose?: boolean;
|
|
6
|
-
src: string[] | Record<string, string>;
|
|
11
|
+
src: string[] | Record<string, string | AdvancedOutputConfig>;
|
|
7
12
|
}
|
|
8
13
|
declare const _default: (config: PlauditWordpressWebpackConfig, webpackConfig?: Configuration) => Configuration[];
|
|
9
14
|
export = _default;
|
|
@@ -39,6 +39,20 @@ function groupEntrypointsByAssetFile(entrypoints, entrypointNameExtractor) {
|
|
|
39
39
|
}
|
|
40
40
|
return seenPaths;
|
|
41
41
|
}
|
|
42
|
+
function resolveLegacyBlockScriptsInFolder(folder) {
|
|
43
|
+
const blockScriptEntrypoints = [];
|
|
44
|
+
for (const blockDir of node_fs_1.default.readdirSync(folder)) {
|
|
45
|
+
const fullBlockDir = node_path_1.default.join(folder, blockDir);
|
|
46
|
+
const packageJSON = node_path_1.default.join(fullBlockDir, 'package.json');
|
|
47
|
+
if (node_fs_1.default.existsSync(packageJSON)) {
|
|
48
|
+
const main = JSON.parse(node_fs_1.default.readFileSync(packageJSON, 'utf-8'))['main'];
|
|
49
|
+
if (main && node_fs_1.default.existsSync(node_path_1.default.join(fullBlockDir, main))) {
|
|
50
|
+
blockScriptEntrypoints.push(node_path_1.default.join(fullBlockDir, main));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return blockScriptEntrypoints;
|
|
55
|
+
}
|
|
42
56
|
const scriptExtension = /\.[jt]sx?$/;
|
|
43
57
|
const styleExtension = /\.(p?c|sa)ss$/;
|
|
44
58
|
function scriptOrStyleTest(entryPath) {
|
|
@@ -83,7 +97,7 @@ function addPotentiallyDuplicatedEntrypointName(entry, entrypoint, typeCounts) {
|
|
|
83
97
|
entry[potentialKey] = entrypoint[1];
|
|
84
98
|
}
|
|
85
99
|
module.exports = function (config, webpackConfig = require("@wordpress/scripts/config/webpack.config")) {
|
|
86
|
-
const seenPaths = groupEntrypointsByAssetFile(Array.isArray(config.src) ? config.src : Object.values(config.src), bn => bn);
|
|
100
|
+
const seenPaths = groupEntrypointsByAssetFile(Array.isArray(config.src) ? config.src : Object.values(config.src).map(bn => typeof bn === 'string' ? bn : bn.destination), bn => bn);
|
|
87
101
|
let projectPrefix = undefined;
|
|
88
102
|
let duplicatedPaths = "";
|
|
89
103
|
for (const sameNamePaths of seenPaths.values()) {
|
|
@@ -154,7 +168,10 @@ module.exports = function (config, webpackConfig = require("@wordpress/scripts/c
|
|
|
154
168
|
const sources = Array.isArray(config.src) ? config.src.map(s => [s, s]) : Object.entries(config.src);
|
|
155
169
|
return sources.map(([src, dest]) => {
|
|
156
170
|
currentEntrypoint = src;
|
|
157
|
-
const srcRoots =
|
|
171
|
+
const srcRoots = typeof dest !== 'string' && dest.withLegacyBlocksIn
|
|
172
|
+
? [...src.split(','), ...resolveLegacyBlockScriptsInFolder(dest.withLegacyBlocksIn)]
|
|
173
|
+
: src.split(',');
|
|
174
|
+
const destPath = typeof dest === 'string' ? dest : dest.destination;
|
|
158
175
|
const srcRoot = srcRoots.length === 1 ? joinPossiblyAbsolutePaths(process.cwd(), src) : srcRoots.map(s => joinPossiblyAbsolutePaths(process.cwd(), s));
|
|
159
176
|
const srcIsDirectory = !Array.isArray(srcRoot) && node_fs_1.default.lstatSync(srcRoot).isDirectory();
|
|
160
177
|
const copyFiles = srcIsDirectory && src !== dest;
|
|
@@ -171,7 +188,7 @@ module.exports = function (config, webpackConfig = require("@wordpress/scripts/c
|
|
|
171
188
|
if (copyFiles) {
|
|
172
189
|
plugins.push(new BlockJSONStyleRemappingPlugin_1.default(standaloneBlocks));
|
|
173
190
|
}
|
|
174
|
-
plugins.push(new AdditionalDependencyInjectorPlugin_1.default());
|
|
191
|
+
plugins.push(new AdditionalDependencyInjectorPlugin_1.default(typeof dest !== 'string' && dest.additionalDependencies ? dest.additionalDependencies : []));
|
|
175
192
|
if (first) {
|
|
176
193
|
first = false;
|
|
177
194
|
if (process.argv.includes('--browser-sync') || process.env['BROWSER_SYNC'] === 'true') {
|
|
@@ -253,7 +270,7 @@ module.exports = function (config, webpackConfig = require("@wordpress/scripts/c
|
|
|
253
270
|
}
|
|
254
271
|
}
|
|
255
272
|
else {
|
|
256
|
-
const baseDest = node_path_1.default.basename(
|
|
273
|
+
const baseDest = node_path_1.default.basename(destPath);
|
|
257
274
|
entry = {
|
|
258
275
|
[baseDest.includes('.') ? node_path_1.default.basename(baseDest, node_path_1.default.extname(baseDest)) : baseDest]: srcRoot
|
|
259
276
|
};
|
|
@@ -261,12 +278,12 @@ module.exports = function (config, webpackConfig = require("@wordpress/scripts/c
|
|
|
261
278
|
let output;
|
|
262
279
|
if (srcIsDirectory) {
|
|
263
280
|
output = {
|
|
264
|
-
path: joinPossiblyAbsolutePaths(process.cwd(),
|
|
281
|
+
path: joinPossiblyAbsolutePaths(process.cwd(), destPath)
|
|
265
282
|
};
|
|
266
283
|
}
|
|
267
284
|
else {
|
|
268
285
|
output = {
|
|
269
|
-
path: joinPossiblyAbsolutePaths(process.cwd(), node_path_1.default.dirname(
|
|
286
|
+
path: joinPossiblyAbsolutePaths(process.cwd(), node_path_1.default.dirname(destPath))
|
|
270
287
|
};
|
|
271
288
|
}
|
|
272
289
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plaudit/webpack-extensions",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prepublishOnly": "rm -rf build && mkdir build && tsc",
|
|
6
6
|
"build": "tsc",
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@types/browser-sync-webpack-plugin": "^2.2.2",
|
|
17
|
-
"@types/node": "^20.3.
|
|
17
|
+
"@types/node": "^20.3.2",
|
|
18
18
|
"@types/tapable": "^2.2.3",
|
|
19
19
|
"@types/webpack": "^5.28.1",
|
|
20
20
|
"@types/webpack-sources": "^3.2.0",
|
|
21
21
|
"postcss-load-config": "^4.0.1",
|
|
22
22
|
"postcss-loader": "^7.3.3",
|
|
23
23
|
"ts-node": "^10.9.1",
|
|
24
|
-
"typescript": "^5.1.
|
|
24
|
+
"typescript": "^5.1.6"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@plaudit/postcss-color-function": "^5.0.0",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"clean-webpack-plugin": "^4.0.0",
|
|
36
36
|
"copy-webpack-plugin": "^11.0.0",
|
|
37
37
|
"cssnano": "^6.0.1",
|
|
38
|
-
"eslint": "^8.
|
|
38
|
+
"eslint": "^8.43.0",
|
|
39
39
|
"eslint-plugin-jsdoc": "^43.1.1",
|
|
40
40
|
"fork-ts-checker-webpack-plugin": "^8.0.0",
|
|
41
41
|
"postcss": "^8.4.24",
|
|
@@ -56,9 +56,8 @@
|
|
|
56
56
|
"postcss-simple-vars": "^7.0.1",
|
|
57
57
|
"react": "^18.2.0",
|
|
58
58
|
"react-dom": "^18.2.0",
|
|
59
|
-
"webpack": "^5.88.
|
|
60
|
-
"webpack-remove-empty-scripts": "^1.0.3"
|
|
61
|
-
"webpack-sources": "^3.2.3"
|
|
59
|
+
"webpack": "^5.88.1",
|
|
60
|
+
"webpack-remove-empty-scripts": "^1.0.3"
|
|
62
61
|
},
|
|
63
62
|
"resolutions": {
|
|
64
63
|
"eslint-plugin-jsdoc": "^43.1.1"
|