@plaudit/webpack-extensions 3.15.0 → 3.16.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.
- package/CHANGELOG.md +26 -0
- package/USER-GUIDE.md +17 -11
- package/dist/plugins/EnhancedBlockJSONPlugin.d.ts +5 -3
- package/dist/plugins/EnhancedBlockJSONPlugin.js +17 -8
- package/dist/plugins/ExtensionsConfigFileGeneratorPlugin.js +1 -1
- package/dist/plugins/PlainEntrypointsConfigFileGeneratorPlugin.js +12 -14
- package/dist/shared.d.ts +19 -10
- package/dist/shared.js +11 -6
- package/dist/utils/common-config-helpers.js +1 -1
- package/dist/utils/location-encoding-filename-parser.js +1 -1
- package/dist/utils/path-query-and-related-helpers.d.ts +7 -1
- package/dist/utils/path-query-and-related-helpers.js +9 -3
- package/dist/wordpress-scripts-wrapper.js +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.16.0] - 2026-08-04
|
|
9
|
+
### Added
|
|
10
|
+
- Logic so that files and directories with names equal to "example" or "examples" or that include "example" as a name segment are skipped
|
|
11
|
+
- This is done to allow us to include example files
|
|
12
|
+
- This comes from version `2.95.0`
|
|
13
|
+
- Updated the user guide with this information
|
|
14
|
+
- This comes from version `2.95.0`
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- The TOC in the user guide being out of date
|
|
18
|
+
|
|
19
|
+
## [3.15.1] - 2026-07-20
|
|
20
|
+
### Fixed
|
|
21
|
+
- A bug that caused all styles bound for editor use to be emitted as inline CSS
|
|
22
|
+
- This comes from version `2.94.1`
|
|
23
|
+
|
|
8
24
|
## [3.15.0] - 2026-07-17
|
|
9
25
|
### Changed
|
|
10
26
|
- The `add_editor_style()` enqueue path to use `block_editor_settings_all` to avoid a litany of bugs courtesy of WordPress's high-quality code
|
|
@@ -214,6 +230,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
214
230
|
- Legacy PostCSS features that have been integrated into modern CSS
|
|
215
231
|
- `@extends` support
|
|
216
232
|
|
|
233
|
+
## [2.95.0] - 2026-08-04
|
|
234
|
+
### Added
|
|
235
|
+
- Logic so that files and directories with names equal to "example" or "examples" or that include "example" as a name segment are skipped
|
|
236
|
+
- This is done to allow us to include example files
|
|
237
|
+
- Updated the user guide with this information
|
|
238
|
+
|
|
239
|
+
## [2.94.1] - 2026-07-20
|
|
240
|
+
### Fixed
|
|
241
|
+
- A bug that caused all styles bound for editor use to be emitted as inline CSS
|
|
242
|
+
|
|
217
243
|
## [2.94.0] - 2026-07-17
|
|
218
244
|
### Changed
|
|
219
245
|
- The `add_editor_style()` enqueue path to use `block_editor_settings_all` to avoid a litany of bugs courtesy of WordPress's high-quality code
|
package/USER-GUIDE.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* [Examples](#examples)
|
|
9
9
|
* [Best Practices](#best-practices)
|
|
10
10
|
* [Folder Structure](#folder-structure)
|
|
11
|
+
* [Enforced Naming Conventions](#enforced-naming-conventions)
|
|
11
12
|
* [Blocks](#blocks)
|
|
12
13
|
* [Extensions](#extensions)
|
|
13
14
|
* [Plain Assets](#plain-assets)
|
|
@@ -104,7 +105,7 @@ However, if you need to do something unusual or just want to know what everythin
|
|
|
104
105
|
- Any time that `dist` is referenced in a path, it should be replaced with the value of `outputDir` in your WebPack file
|
|
105
106
|
- As with `src`, the value of `outputDir` *should be* `dist`; however, this might not be the case in some inherited or older code
|
|
106
107
|
- Keys in the `src` *object* are all assumed to be paths relative to `srcDir` if it is specified or the folder in which the `webpack.config.js` file is located if it is not specified
|
|
107
|
-
- Paths in values in the `src`
|
|
108
|
+
- Paths in *values* in the `src` object are all assumed to be paths relative to `outputDir` if it is specified or the folder in which the `webpack.config.js` file is located if it is not specified
|
|
108
109
|
- All file names are informational placeholders. They can be whatever you want provided that they are web-safe (basically, don't do things like calling the email address block "✉️" and you'll be fine)
|
|
109
110
|
|
|
110
111
|
### Examples
|
|
@@ -117,6 +118,10 @@ However, if you need to do something unusual or just want to know what everythin
|
|
|
117
118
|
- All folder and file names should be in kebab-case
|
|
118
119
|
- Assets *should not* be in the root of the `src` folder. Assets that aren't block- or extension-bound should be in the `site` folder (or in a folder named after where they'll be used like, `admin` or `map-page`)
|
|
119
120
|
|
|
121
|
+
### Enforced Naming Conventions
|
|
122
|
+
- Directory and file names that start with a "~" are interpreted as "backup code" and are, therefore, not built.
|
|
123
|
+
- File and directory names that are equal to "example" or "examples", or have "example" as a name segment (see [Location-Encoding Filenames](#location-encoding-filenames) for details on what a name-segment is) are treated as example code and are also not built
|
|
124
|
+
|
|
120
125
|
### Blocks
|
|
121
126
|
- Block folder names *should* match the local portion of their name (ex: `plaudit-query-loop-maps/address-wrapper` should be stored in `address-wrapper`)
|
|
122
127
|
|
|
@@ -354,16 +359,17 @@ Notes on how to read the following table:
|
|
|
354
359
|
- `(-|=)` means "this can be either a dash or an equal sign"
|
|
355
360
|
- Pipe-separated items in parentheses means "any one of these items can go here"
|
|
356
361
|
|
|
357
|
-
| Name
|
|
358
|
-
|
|
359
|
-
| Enqueuing Location
|
|
360
|
-
| Type Override
|
|
361
|
-
| Inline
|
|
362
|
-
| Strategy
|
|
363
|
-
| Fetch Priority
|
|
364
|
-
| In Footer
|
|
365
|
-
| In Header
|
|
366
|
-
| Extension
|
|
362
|
+
| Name | Token | Usage |
|
|
363
|
+
|---------------------|-------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
364
|
+
| Enqueuing Location | `(enqueuing-location)[(-\|=)priority]` | This is a special section that is actually a collection of values. See the [Enqueuing Location](#enqueuing-location) section for more details |
|
|
365
|
+
| Type Override | `script`, `style`, `script-module` | Can be used to override the detected of the asset. Must be the first token in the filename; if used directly, it is shorthand for `both-(Type Override)` |
|
|
366
|
+
| Inline | `inline[(-\|=)position]`, `strategy(-\|=)inline[-position]` | Indicates that the script should be inlined. `position` can be either `before` or `after` |
|
|
367
|
+
| Strategy | `lazy\|eager`, `strategy(-\|=)(lazy\|eager\|defer\|async)` | Controls the loading strategy. Lazy and eager have shorthand while the remaining values must be prefixed with `strategy` |
|
|
368
|
+
| Fetch Priority | `fetchpriority(-\|=)(low\|high\|auto)` | Controls the fetchpriority property; `auto` is the default |
|
|
369
|
+
| In Footer | `in-footer`, `in_footer` | Sets the `in_footer` value to `true`; incompatible with `in-header` |
|
|
370
|
+
| In Header | `in-header`, `in_header` | Sets the `in_footer` value to `false`; incompatible with `in-footer` |
|
|
371
|
+
| Extension | `([ps]?c\|sa)ss`, `m?[jt]sx?` | This determines the type unless it is overridden. This **MUST** be the last token in the name (it is the file extension) |
|
|
372
|
+
| Example Code Marker | `example` | This informs the build system that the file contains example code and, therefore, should not be build |
|
|
367
373
|
|
|
368
374
|
### Enqueuing Location
|
|
369
375
|
If this is the first token, it can be suffixed with `-script`, `-style`, or `-script-module` to override the type.
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { Compilation } from "webpack";
|
|
2
2
|
import type WebpackRemoveEmptyScriptsPlugin from "webpack-remove-empty-scripts";
|
|
3
3
|
import { AbstractBiPhasicGroupAndEntryPlugin, EntryProvider } from "./AbstractBiPhasicGroupAndEntryPlugin";
|
|
4
|
-
import { BlockEntrypointInfo, FileSegmentBlockEntrypointInfo,
|
|
4
|
+
import { AssetMetaSegment, BlockEntrypointInfo, FileSegmentBlockEntrypointInfo, ParsedAssetJsonProvider, ParsedAssetsJson, ScriptArgsObject, VerifiedAdvancedOutputConfig } from "../shared";
|
|
5
5
|
import type { VerifiedPlauditWordpressWebpackConfig } from "../utils/common-config-helpers";
|
|
6
6
|
type WorkableBlockEntrypointInfo = Omit<FileSegmentBlockEntrypointInfo, 'originalValue' | 'pathQueryParameters'> & Partial<Pick<FileSegmentBlockEntrypointInfo, 'originalValue'>> & {
|
|
7
7
|
outputPath: string;
|
|
8
8
|
assetData: ParsedAssetsJson[string];
|
|
9
9
|
hash: string;
|
|
10
10
|
scriptArgsObject: ScriptArgsObject | undefined;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
} & (AssetMetaSegment | {
|
|
12
|
+
inlinedAsset?: undefined;
|
|
13
|
+
assetContents?: string;
|
|
14
|
+
});
|
|
13
15
|
type CollatedWorkableBlockInfo = Record<string, {
|
|
14
16
|
sourcePath?: string;
|
|
15
17
|
workableBlockEntrypointsInfo: WorkableBlockEntrypointInfo[];
|
|
@@ -65,8 +65,8 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
65
65
|
.filter((item) => item[1] !== '')
|
|
66
66
|
.map(([file, assetType]) => {
|
|
67
67
|
const enqueuingFlags = (0, path_query_and_related_helpers_1.mergeTwoEnqueuingControlFlagSets)(file, metadata.enqueuingFlags, this.dest.enqueuingFlags);
|
|
68
|
-
const { scriptArgsObject,
|
|
69
|
-
if (inlinedAsset !== undefined) {
|
|
68
|
+
const { scriptArgsObject, assetMeta } = (0, path_query_and_related_helpers_1.convertEnqueuingControlFlagsToScriptArgsObject)(compilation, file, enqueuingFlags);
|
|
69
|
+
if (assetMeta?.inlinedAsset !== undefined) {
|
|
70
70
|
staticallyLoadedEntrypoints.push(file);
|
|
71
71
|
}
|
|
72
72
|
const wasOriginallyAStyleField = (0, shared_1.isStyleField)(metadata.entrypointField);
|
|
@@ -75,10 +75,10 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
75
75
|
const entrypointField = (0, shared_1.convertEntrypointFieldForAssetType)(metadata.entrypointField, assetType);
|
|
76
76
|
return {
|
|
77
77
|
...metadata, outputPath, assetData, originalValue: undefined, hash: entrypointChunk.hash ?? "",
|
|
78
|
-
entrypointField, handleGroup: (0, shared_1.getHandleGroup)(entrypointField), scriptArgsObject,
|
|
78
|
+
entrypointField, handleGroup: (0, shared_1.getHandleGroup)(entrypointField), scriptArgsObject, ...assetMeta
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
|
-
return { ...metadata, outputPath, assetData, hash: entrypointChunk.hash ?? "", scriptArgsObject,
|
|
81
|
+
return { ...metadata, outputPath, assetData, hash: entrypointChunk.hash ?? "", scriptArgsObject, ...assetMeta };
|
|
82
82
|
});
|
|
83
83
|
if (applicableBlockJsonFiles[epBlockJson]) {
|
|
84
84
|
applicableBlockJsonFiles[epBlockJson].workableBlockEntrypointsInfo.push(...workableBlockEntrypointsInfo);
|
|
@@ -127,7 +127,7 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
127
127
|
const { inlinedAsset, ...finalizedHandle } = handleData;
|
|
128
128
|
if (inlinedAsset !== undefined) {
|
|
129
129
|
finalizedHandle.src = false;
|
|
130
|
-
inlinedAssets.push([handle, type,
|
|
130
|
+
inlinedAssets.push([handle, type, handleData]);
|
|
131
131
|
}
|
|
132
132
|
registerableHandles[handle] = finalizedHandle;
|
|
133
133
|
}
|
|
@@ -327,7 +327,10 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
327
327
|
.convertToScriptHandles(handleData.filter(hd => !(0, shared_1.isStyleField)(hd.entrypointField) && (0, shared_1.isScriptModuleField)(hd.entrypointField)))),
|
|
328
328
|
styleHandles: Object.fromEntries(handleData.filter(hd => (0, shared_1.isStyleField)(hd.entrypointField))
|
|
329
329
|
.map(hd => {
|
|
330
|
-
|
|
330
|
+
if (hd.inlinedAsset === undefined) {
|
|
331
|
+
return [hd.handle, { src: hd.outputPath, rest: [hd.originalValue !== undefined ? hd.assetData.dependencies : [], hd.assetData.version], assetContents: hd.assetContents }];
|
|
332
|
+
}
|
|
333
|
+
return [hd.handle, { src: hd.outputPath, rest: [hd.originalValue !== undefined ? hd.assetData.dependencies : [], hd.assetData.version], inlinedAsset: hd.inlinedAsset, assetContents: hd.assetContents }];
|
|
331
334
|
})),
|
|
332
335
|
bindableBlockAttributes
|
|
333
336
|
},
|
|
@@ -340,7 +343,7 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
340
343
|
}
|
|
341
344
|
static convertToScriptHandles(handleData) {
|
|
342
345
|
return handleData.map(hd => {
|
|
343
|
-
const { inlinedAsset, originalValue, outputPath, entrypointField, scriptArgsObject: rawScriptArgsObject, assetData, handle } = hd;
|
|
346
|
+
const { assetContents, inlinedAsset, originalValue, outputPath, entrypointField, scriptArgsObject: rawScriptArgsObject, assetData, handle } = hd;
|
|
344
347
|
const { dependencies = [], module_dependencies = undefined } = originalValue !== undefined ? assetData : {};
|
|
345
348
|
let scriptArgsObject;
|
|
346
349
|
if (rawScriptArgsObject !== undefined) {
|
|
@@ -366,7 +369,13 @@ class EnhancedBlockJSONPlugin extends AbstractBiPhasicGroupAndEntryPlugin_1.Abst
|
|
|
366
369
|
}
|
|
367
370
|
}
|
|
368
371
|
}
|
|
369
|
-
|
|
372
|
+
const rest = scriptArgsObject !== undefined ? [dependencies, assetData.version, scriptArgsObject] : [dependencies, assetData.version];
|
|
373
|
+
if (inlinedAsset) {
|
|
374
|
+
return [handle, { src: outputPath, rest, inlinedAsset, assetContents }];
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
return [handle, { src: outputPath, rest, assetContents }];
|
|
378
|
+
}
|
|
370
379
|
});
|
|
371
380
|
}
|
|
372
381
|
static doFileOrHandleReplacements(compilation, blockJson, workableBlockEntrypointsInfo, getter) {
|
|
@@ -52,7 +52,7 @@ class ExtensionsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAndEntryP
|
|
|
52
52
|
compilation.contextDependencies.add(srcRoot);
|
|
53
53
|
}
|
|
54
54
|
for await (const dirent of await (0, promises_1.opendir)(srcRoot)) {
|
|
55
|
-
if (dirent.name
|
|
55
|
+
if ((0, shared_1.shouldBeSkipped)(dirent.name)) {
|
|
56
56
|
continue;
|
|
57
57
|
}
|
|
58
58
|
if (dirent.isFile()) {
|
|
@@ -70,13 +70,12 @@ class PlainEntrypointsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAnd
|
|
|
70
70
|
writer.action("init", writer => {
|
|
71
71
|
writer.call("plaudit_webpack_extensions__resolve_base_uri", [expressions_1.Constants.__DIR__], { assignTo: baseUriVar });
|
|
72
72
|
for (const { handle, type, data } of prioritizedHandleList) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
(0, shared_1.appendAddInlineAssetCall)(compilation, writer, handle, type, inlinedAsset, data, src);
|
|
73
|
+
if (data.inlinedAsset !== undefined) {
|
|
74
|
+
writer.call(`wp_register_${type}`, [handle, false, ...data.rest]);
|
|
75
|
+
(0, shared_1.appendAddInlineAssetCall)(compilation, writer, handle, type, data);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
writer.call(`wp_register_${type}`, [handle, expressions_1.Op.concat(baseUriVar, (0, node_path_1.relative)(emitDir, data.src)), ...data.rest]);
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
81
|
}, { priority, accountForAlreadyDoing: this.config.includePostInitFallback });
|
|
@@ -85,10 +84,9 @@ class PlainEntrypointsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAnd
|
|
|
85
84
|
writer.action("init", writer => {
|
|
86
85
|
writer.call("plaudit_webpack_extensions__resolve_base_uri", [expressions_1.Constants.__DIR__], { assignTo: baseUriVar });
|
|
87
86
|
for (const { handle, type, data } of prioritizedHandleList) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
(0, shared_1.appendAddInlineAssetCall)(compilation, writer, handle, type, inlinedAsset, data, src);
|
|
87
|
+
writer.call(`wp_register_${type}`, [handle, false, ...data.rest]);
|
|
88
|
+
if (data.inlinedAsset !== undefined) {
|
|
89
|
+
(0, shared_1.appendAddInlineAssetCall)(compilation, writer, handle, type, data);
|
|
92
90
|
}
|
|
93
91
|
}
|
|
94
92
|
}, { priority, accountForAlreadyDoing: this.config.includePostInitFallback });
|
|
@@ -107,7 +105,7 @@ class PlainEntrypointsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAnd
|
|
|
107
105
|
const editorSettings = new expressions_1.Var("editor_settings");
|
|
108
106
|
writer.filter("block_editor_settings_all", writer => {
|
|
109
107
|
for (const [handle, data] of sortedEditorStyleHandles) {
|
|
110
|
-
const contents = data.
|
|
108
|
+
const contents = data.assetContents;
|
|
111
109
|
if (contents) {
|
|
112
110
|
writer.appendExpr(new expressions_1.Assignment(new expressions_1.ArrayAccess(editorSettings, "styles"), new expressions_1.PHPArray({ css: (0, shared_1.wrapInlineAssetContents)(compilation, "plaudit_editor_style", handle, contents) }), true));
|
|
113
111
|
}
|
|
@@ -302,7 +300,7 @@ class PlainEntrypointsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAnd
|
|
|
302
300
|
const { dependencies = [], module_dependencies = undefined } = isScript === entrypointChunkIsScript ? assetData : {};
|
|
303
301
|
const { lazyLoader, locations } = this.dest;
|
|
304
302
|
const { flags } = (0, path_query_and_related_helpers_1.unpackEnqueuingControlFlagsFromPathQueryParameters)(typeof locations.registerScriptArgs === 'object' ? locations.registerScriptArgs : { strategy: locations.registerScriptArgs }, file, "registerScriptArgs");
|
|
305
|
-
const {
|
|
303
|
+
const { assetMeta, scriptArgsObject } = (0, path_query_and_related_helpers_1.convertEnqueuingControlFlagsToScriptArgsObject)(compilation, file, (0, path_query_and_related_helpers_1.mergeTwoEnqueuingControlFlagSets)(file, flags, this.dest.enqueuingFlags), type === 'style' && (!!locations.clientEditor || locations.clientEditor === 0));
|
|
306
304
|
const completeScriptArgsObject = module_dependencies?.length ? { ...scriptArgsObject, module_dependencies } : scriptArgsObject;
|
|
307
305
|
const rest = isScript && completeScriptArgsObject !== undefined ? [dependencies, assetData.version, completeScriptArgsObject] : [dependencies, assetData.version];
|
|
308
306
|
const destPath = (0, node_path_1.join)(compilation.outputOptions.path, file);
|
|
@@ -313,7 +311,7 @@ class PlainEntrypointsConfigFileGeneratorPlugin extends AbstractBiPhasicGroupAnd
|
|
|
313
311
|
locations,
|
|
314
312
|
handleName: useHandleName ? locations.handle : undefined,
|
|
315
313
|
lazyLoader,
|
|
316
|
-
|
|
314
|
+
...assetMeta
|
|
317
315
|
});
|
|
318
316
|
}
|
|
319
317
|
myAssetHandles.push({ handles, handlePrefix: this.config.targetHandlePrefix });
|
package/dist/shared.d.ts
CHANGED
|
@@ -15,22 +15,29 @@ export type ParsedAssetsJson = Record<string, {
|
|
|
15
15
|
module_dependencies?: (string | WPModuleDependency)[];
|
|
16
16
|
}>;
|
|
17
17
|
export declare function isParsedAssetsJson(thing: any): thing is ParsedAssetsJson;
|
|
18
|
+
type BaseRestType = [/* dependencies: */ string[], /* version: */ string];
|
|
19
|
+
export type AssetMetaSegment = {
|
|
20
|
+
inlinedAsset: InlinedAsset;
|
|
21
|
+
assetContents: string;
|
|
22
|
+
};
|
|
23
|
+
export type BaseHandleData = {
|
|
24
|
+
src: string;
|
|
25
|
+
rest: BaseRestType | [...BaseRestType, ScriptArgsObject];
|
|
26
|
+
};
|
|
18
27
|
export type ScriptArgsObject = {
|
|
19
28
|
strategy?: 'defer' | 'async';
|
|
20
29
|
in_footer?: boolean;
|
|
21
30
|
fetchpriority?: 'auto' | 'low' | 'high';
|
|
22
31
|
module_dependencies?: (string | WPModuleDependency)[];
|
|
23
32
|
};
|
|
24
|
-
type BaseRestType = [/* dependencies: */ string[], /* version: */ string];
|
|
25
33
|
export type InlinedAsset = {
|
|
26
|
-
contents: string;
|
|
27
34
|
position?: 'before' | 'after';
|
|
28
35
|
};
|
|
29
|
-
export type
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
};
|
|
36
|
+
export type IAHandleData = BaseHandleData & AssetMetaSegment;
|
|
37
|
+
export type HandleData = BaseHandleData & (AssetMetaSegment | {
|
|
38
|
+
inlinedAsset?: undefined;
|
|
39
|
+
assetContents?: string;
|
|
40
|
+
});
|
|
34
41
|
export declare const standardLocationNamesMeta: {
|
|
35
42
|
readonly clientView: {
|
|
36
43
|
readonly action: "wp_enqueue_scripts";
|
|
@@ -260,11 +267,9 @@ export declare function resolveLegacyBlockScriptsInFolder(folder: string): strin
|
|
|
260
267
|
* @param writer
|
|
261
268
|
* @param handle
|
|
262
269
|
* @param type 'script_module' is NOT supported at this time; however, it is *handled* in this function
|
|
263
|
-
* @param inlinedAsset
|
|
264
270
|
* @param handleData
|
|
265
|
-
* @param file something that represents the file that is being inlined (this is purely for error-reporting purposes)
|
|
266
271
|
*/
|
|
267
|
-
export declare function appendAddInlineAssetCall(compilation: Compilation, writer: PHPWriter, handle: string, type: 'script' | 'style' | 'script_module',
|
|
272
|
+
export declare function appendAddInlineAssetCall(compilation: Compilation, writer: PHPWriter, handle: string, type: 'script' | 'style' | 'script_module', handleData: IAHandleData): void;
|
|
268
273
|
export declare function wrapInlineAssetContents(compilation: Compilation, wrapperIdPrefix: string, handle: string, contents: string): HereOrNowDoc;
|
|
269
274
|
export declare function synchronousDirIterator(dirPath: string): Generator<import("node:fs").Dirent<string>, void, unknown>;
|
|
270
275
|
/**
|
|
@@ -273,3 +278,7 @@ export declare function synchronousDirIterator(dirPath: string): Generator<impor
|
|
|
273
278
|
* @link https://dev.to/jdbar
|
|
274
279
|
*/
|
|
275
280
|
export declare function instanceOfNodeError<T extends new (...args: any) => Error>(value: unknown, errorType: T): value is InstanceType<T> & NodeJS.ErrnoException;
|
|
281
|
+
/**
|
|
282
|
+
* This tests if the name starts with a "~", is equal to "example" or "examples", or includes "example" as a name segment
|
|
283
|
+
*/
|
|
284
|
+
export declare function shouldBeSkipped(name: string): boolean;
|
package/dist/shared.js
CHANGED
|
@@ -55,6 +55,7 @@ exports.appendAddInlineAssetCall = appendAddInlineAssetCall;
|
|
|
55
55
|
exports.wrapInlineAssetContents = wrapInlineAssetContents;
|
|
56
56
|
exports.synchronousDirIterator = synchronousDirIterator;
|
|
57
57
|
exports.instanceOfNodeError = instanceOfNodeError;
|
|
58
|
+
exports.shouldBeSkipped = shouldBeSkipped;
|
|
58
59
|
const node_crypto_1 = require("node:crypto");
|
|
59
60
|
const node_fs_1 = require("node:fs");
|
|
60
61
|
const promises_1 = require("node:fs/promises");
|
|
@@ -390,19 +391,17 @@ function resolveLegacyBlockScriptsInFolder(folder) {
|
|
|
390
391
|
* @param writer
|
|
391
392
|
* @param handle
|
|
392
393
|
* @param type 'script_module' is NOT supported at this time; however, it is *handled* in this function
|
|
393
|
-
* @param inlinedAsset
|
|
394
394
|
* @param handleData
|
|
395
|
-
* @param file something that represents the file that is being inlined (this is purely for error-reporting purposes)
|
|
396
395
|
*/
|
|
397
|
-
function appendAddInlineAssetCall(compilation, writer, handle, type,
|
|
396
|
+
function appendAddInlineAssetCall(compilation, writer, handle, type, handleData) {
|
|
398
397
|
if (type === 'script_module') {
|
|
399
|
-
throw newWebpackErrorForFile("WordPress does not support inlined script modules",
|
|
398
|
+
throw newWebpackErrorForFile("WordPress does not support inlined script modules", handleData.src);
|
|
400
399
|
}
|
|
401
400
|
if (handleData.rest[0]?.length) { // If there are any dependencies
|
|
402
401
|
compilation.errors.push(newWebpackErrorForFile("Inlined scripts MUST NOT have dependencies. It WILL cause runtime inconsistencies and potentially cause sever performance issues", handleData.src));
|
|
403
402
|
}
|
|
404
|
-
const args = [handle, wrapInlineAssetContents(compilation, `plaudit_inlined_${type}`, handle,
|
|
405
|
-
if (type === 'script' && inlinedAsset.position === 'before') {
|
|
403
|
+
const args = [handle, wrapInlineAssetContents(compilation, `plaudit_inlined_${type}`, handle, handleData.assetContents)];
|
|
404
|
+
if (type === 'script' && handleData.inlinedAsset.position === 'before') {
|
|
406
405
|
args.push('before');
|
|
407
406
|
}
|
|
408
407
|
writer.call(`wp_add_inline_${type}`, args);
|
|
@@ -434,3 +433,9 @@ function* synchronousDirIterator(dirPath) {
|
|
|
434
433
|
function instanceOfNodeError(value, errorType) {
|
|
435
434
|
return !!value && value instanceof errorType;
|
|
436
435
|
}
|
|
436
|
+
/**
|
|
437
|
+
* This tests if the name starts with a "~", is equal to "example" or "examples", or includes "example" as a name segment
|
|
438
|
+
*/
|
|
439
|
+
function shouldBeSkipped(name) {
|
|
440
|
+
return name.startsWith("~") || name === "example" || name === "examples" || name.startsWith("example.") || name.includes(".example.");
|
|
441
|
+
}
|
|
@@ -126,7 +126,7 @@ function resolveEntryFromDirectory(commonConfig, srcRoot, dest) {
|
|
|
126
126
|
const seenExplicitHandles = { scriptHandles: {}, styleHandles: {}, scriptModuleHandles: {} };
|
|
127
127
|
const loadingEntrypoints = [];
|
|
128
128
|
for await (const dirent of await (0, promises_1.opendir)(srcRoot)) {
|
|
129
|
-
if (!dirent.isDirectory() || dirent.name
|
|
129
|
+
if (!dirent.isDirectory() || (0, shared_1.shouldBeSkipped)(dirent.name)) {
|
|
130
130
|
continue;
|
|
131
131
|
}
|
|
132
132
|
const dir = joinPossiblyAbsolutePaths(srcRoot, dirent.name);
|
|
@@ -7,7 +7,7 @@ const node_path_1 = require("node:path");
|
|
|
7
7
|
const shared_1 = require("../shared");
|
|
8
8
|
function parseLocationEncodingFilename(filename) {
|
|
9
9
|
const { name, ext } = (0, node_path_1.parse)(filename);
|
|
10
|
-
if (
|
|
10
|
+
if ((0, shared_1.shouldBeSkipped)(name)) {
|
|
11
11
|
return undefined;
|
|
12
12
|
}
|
|
13
13
|
let type = /^\.(?:s[ac]|p?c)ss$/i.test(ext) ? 'style' : /^\.m[jt]sx?/i.test(ext) ? 'script-module' : /^\.[jt]sx?/i.test(ext) ? 'script' : false;
|
|
@@ -55,5 +55,11 @@ export declare function unpackEnqueuingControlFlagsFromPathQueryParameters(pathQ
|
|
|
55
55
|
*/
|
|
56
56
|
export declare function convertEnqueuingControlFlagsToScriptArgsObject(compilation: Compilation, file: string, flags: NormalizedEnqueuingControlFlags | undefined, forceRecordContents?: boolean): {
|
|
57
57
|
scriptArgsObject?: ScriptArgsObject;
|
|
58
|
-
|
|
58
|
+
assetMeta?: {
|
|
59
|
+
inlinedAsset: InlinedAsset;
|
|
60
|
+
assetContents: string;
|
|
61
|
+
} | {
|
|
62
|
+
inlinedAsset?: undefined;
|
|
63
|
+
assetContents: string | undefined;
|
|
64
|
+
};
|
|
59
65
|
};
|
|
@@ -196,11 +196,15 @@ function unpackEnqueuingControlFlagsFromPathQueryParameters(pathQueryParameters,
|
|
|
196
196
|
*/
|
|
197
197
|
function convertEnqueuingControlFlagsToScriptArgsObject(compilation, file, flags, forceRecordContents = false) {
|
|
198
198
|
if (flags === undefined) {
|
|
199
|
+
if (forceRecordContents) {
|
|
200
|
+
return { assetMeta: { assetContents: getAssetFileContents(compilation, file) } };
|
|
201
|
+
}
|
|
199
202
|
return {};
|
|
200
203
|
}
|
|
201
204
|
const { strategy, in_footer, inline, position, fetchpriority } = flags;
|
|
202
205
|
const scriptArgsObject = {};
|
|
203
206
|
let inlinedAsset = undefined;
|
|
207
|
+
let assetContents = undefined;
|
|
204
208
|
switch (strategy) {
|
|
205
209
|
case 'async':
|
|
206
210
|
case 'defer':
|
|
@@ -231,7 +235,8 @@ function convertEnqueuingControlFlagsToScriptArgsObject(compilation, file, flags
|
|
|
231
235
|
scriptArgsObject.in_footer = in_footer;
|
|
232
236
|
}
|
|
233
237
|
if (inline) {
|
|
234
|
-
inlinedAsset = {
|
|
238
|
+
inlinedAsset = {};
|
|
239
|
+
assetContents = getAssetFileContents(compilation, file);
|
|
235
240
|
removeFileAndAssetPHP(compilation, file);
|
|
236
241
|
if (position !== undefined) {
|
|
237
242
|
if (!isValidPositionForInlineStrategy(position)) {
|
|
@@ -247,7 +252,7 @@ function convertEnqueuingControlFlagsToScriptArgsObject(compilation, file, flags
|
|
|
247
252
|
}
|
|
248
253
|
}
|
|
249
254
|
else if (forceRecordContents) {
|
|
250
|
-
|
|
255
|
+
assetContents = getAssetFileContents(compilation, file);
|
|
251
256
|
}
|
|
252
257
|
if (fetchpriority !== undefined) {
|
|
253
258
|
if (!isValidFetchPriority(fetchpriority)) {
|
|
@@ -258,7 +263,8 @@ function convertEnqueuingControlFlagsToScriptArgsObject(compilation, file, flags
|
|
|
258
263
|
}
|
|
259
264
|
scriptArgsObject.fetchpriority = fetchpriority;
|
|
260
265
|
}
|
|
261
|
-
|
|
266
|
+
const assetMeta = inlinedAsset ? { inlinedAsset, assetContents: assetContents } : { assetContents };
|
|
267
|
+
return Object.keys(scriptArgsObject).length > 0 ? { scriptArgsObject, assetMeta } : { assetMeta };
|
|
262
268
|
}
|
|
263
269
|
function removeFileAndAssetPHP(compilation, file) {
|
|
264
270
|
const pathParts = (0, node_path_1.parse)(file);
|
|
@@ -511,7 +511,7 @@ function processIndividualWebpackConfig(config, webpackConfig, sources, canClean
|
|
|
511
511
|
const entry = async () => {
|
|
512
512
|
const rawEntrypoints = [];
|
|
513
513
|
for await (const dirent of await (0, promises_1.opendir)(srcRoot)) {
|
|
514
|
-
if (dirent.name
|
|
514
|
+
if ((0, shared_1.shouldBeSkipped)(dirent.name)) {
|
|
515
515
|
continue;
|
|
516
516
|
}
|
|
517
517
|
if (dirent.isFile()) {
|
|
@@ -579,7 +579,7 @@ function processIndividualWebpackConfig(config, webpackConfig, sources, canClean
|
|
|
579
579
|
async function walkExtensionsTree(srcRoot, dest, applicableExtensionTest, parents) {
|
|
580
580
|
const res = [];
|
|
581
581
|
for await (const dirent of await (0, promises_1.opendir)(srcRoot)) {
|
|
582
|
-
if (dirent.name
|
|
582
|
+
if ((0, shared_1.shouldBeSkipped)(dirent.name)) {
|
|
583
583
|
continue;
|
|
584
584
|
}
|
|
585
585
|
if (dirent.isFile()) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plaudit/webpack-extensions",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.0",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
5
5
|
"files": [
|
|
6
6
|
"/dist",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"http-proxy-middleware": "^3.0.7",
|
|
58
58
|
"jsdom": "^29.1.1",
|
|
59
59
|
"json2php": "0.0.12",
|
|
60
|
-
"postcss": "^8.5.
|
|
60
|
+
"postcss": "^8.5.20",
|
|
61
61
|
"postcss-calc": "^10.1.1",
|
|
62
62
|
"postcss-functions": "^4.0.2",
|
|
63
63
|
"postcss-import": "^16.1.1",
|