@elementor/generate-wordpress-asset-file-webpack-plugin 0.1.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.
@@ -0,0 +1,47 @@
1
+ import { Compiler, Compilation, Chunk } from 'webpack';
2
+
3
+ type HandlesMap = {
4
+ exact: Record<string, string>;
5
+ startsWith: Record<string, string>;
6
+ };
7
+ type Options = {
8
+ handlePrefix: string;
9
+ handlesMap?: Partial<HandlesMap>;
10
+ apps?: string[];
11
+ extensions?: string[];
12
+ i18n?: {
13
+ domain: string;
14
+ replaceRequestedFile?: boolean;
15
+ };
16
+ };
17
+ type NormalizedOptions = {
18
+ handlePrefix: string;
19
+ handlesMap: HandlesMap;
20
+ apps: string[];
21
+ extensions: string[];
22
+ i18n: {
23
+ domain: string | null;
24
+ replaceRequestedFile: boolean;
25
+ };
26
+ };
27
+ declare class GenerateWordPressAssetFileWebpackPlugin {
28
+ options: NormalizedOptions;
29
+ constructor(options: Options);
30
+ apply(compiler: Compiler): void;
31
+ getDepsFromChunk(compilation: Compilation, chunk: Chunk): Set<string>;
32
+ createAssetsFileContent({ deps, i18n, entryName, }: {
33
+ deps: Set<string>;
34
+ i18n: NormalizedOptions['i18n'];
35
+ entryName: string;
36
+ }): string;
37
+ getLoaderFileContent(entriesData: Record<string, string>): string;
38
+ getEntryType(entryName: string): "extension" | "app" | "util";
39
+ getFileFromChunk(chunk: Chunk): string | undefined;
40
+ isExternalDep(request: string): boolean | "";
41
+ getHandleFromDep(dep: string): string;
42
+ generateHandleName(name: string): string;
43
+ generateAssetsFileName(filename: string): string;
44
+ normalizeOptions(options: Options): NormalizedOptions;
45
+ }
46
+
47
+ export { GenerateWordPressAssetFileWebpackPlugin };
package/dist/index.js ADDED
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ GenerateWordPressAssetFileWebpackPlugin: () => GenerateWordPressAssetFileWebpackPlugin
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+ var import_webpack = require("webpack");
27
+ var baseHandlesMap = {
28
+ exact: {
29
+ react: "react",
30
+ "react-dom": "react-dom"
31
+ },
32
+ startsWith: {
33
+ "@elementor/": "elementor-packages-",
34
+ "@wordpress/": "wp-"
35
+ }
36
+ };
37
+ var GenerateWordPressAssetFileWebpackPlugin = class {
38
+ options;
39
+ constructor(options) {
40
+ this.options = this.normalizeOptions(options);
41
+ }
42
+ apply(compiler) {
43
+ compiler.hooks.thisCompilation.tap(this.constructor.name, (compilation) => {
44
+ let handlesAssetsMap;
45
+ compilation.hooks.processAssets.tap({ name: this.constructor.name }, () => {
46
+ handlesAssetsMap = [...compilation.entrypoints].reduce((map, [entryName, entrypoint]) => {
47
+ const chunk = entrypoint.chunks.find(({ name }) => name === entryName);
48
+ if (!chunk) {
49
+ return map;
50
+ }
51
+ const chunkJSFile = this.getFileFromChunk(chunk);
52
+ if (!chunkJSFile) {
53
+ return map;
54
+ }
55
+ const deps = this.getDepsFromChunk(compilation, chunk);
56
+ const assetFilename = this.generateAssetsFileName(
57
+ compilation.getPath("[file]", { filename: chunkJSFile })
58
+ );
59
+ const handle = this.generateHandleName(entryName);
60
+ const content = this.createAssetsFileContent({
61
+ deps,
62
+ entryName,
63
+ i18n: this.options.i18n
64
+ });
65
+ compilation.assets[assetFilename] = new import_webpack.sources.RawSource(content);
66
+ chunk.files.add(assetFilename);
67
+ map[handle] = assetFilename;
68
+ return map;
69
+ }, {});
70
+ });
71
+ compilation.hooks.afterProcessAssets.tap({ name: this.constructor.name }, () => {
72
+ const loaderFileContent = this.getLoaderFileContent(handlesAssetsMap);
73
+ compilation.assets["loader.php"] = new import_webpack.sources.RawSource(loaderFileContent);
74
+ });
75
+ });
76
+ }
77
+ getDepsFromChunk(compilation, chunk) {
78
+ const depsSet = /* @__PURE__ */ new Set();
79
+ compilation.chunkGraph.getChunkModules(chunk).forEach((module2) => {
80
+ const theModule = module2;
81
+ [...theModule.modules || [], theModule].forEach((subModule) => {
82
+ if (subModule.userRequest && this.isExternalDep(subModule.userRequest)) {
83
+ depsSet.add(subModule.userRequest);
84
+ }
85
+ });
86
+ });
87
+ return depsSet;
88
+ }
89
+ createAssetsFileContent({
90
+ deps,
91
+ i18n,
92
+ entryName
93
+ }) {
94
+ const handleName = this.generateHandleName(entryName);
95
+ const type = this.getEntryType(entryName);
96
+ const depsAsString = [...deps].map((dep) => this.getHandleFromDep(dep)).filter((dep) => dep !== handleName).sort().map((dep) => `'${dep}',`).join("\n ");
97
+ const i18nContent = i18n.domain ? `[
98
+ 'domain' => '${i18n.domain}',
99
+ 'replace_requested_file' => ${(i18n.replaceRequestedFile ?? false).toString()},
100
+ ]` : "[]";
101
+ const content = `<?php
102
+ if ( ! defined( 'ABSPATH' ) ) {
103
+ exit;
104
+ }
105
+ /**
106
+ * This file is generated by Webpack, do not edit it directly.
107
+ */
108
+ return [
109
+ 'handle' => '${handleName}',
110
+ 'src' => plugins_url( '/', __FILE__ ) . '${entryName}{{MIN_SUFFIX}}.js',
111
+ 'i18n' => ${i18nContent},
112
+ 'type' => '${type}',
113
+ 'deps' => [
114
+ ${depsAsString}
115
+ ],
116
+ ];
117
+ `;
118
+ return content;
119
+ }
120
+ getLoaderFileContent(entriesData) {
121
+ const entriesContent = Object.entries(entriesData).map(([handle, assetFileName]) => {
122
+ return `
123
+ $data['${handle}'] = require __DIR__ . '/${assetFileName}';`;
124
+ });
125
+ return `<?php
126
+ if ( ! defined( 'ABSPATH' ) ) {
127
+ exit;
128
+ }
129
+ /**
130
+ * This file is generated by Webpack, do not edit it directly.
131
+ */
132
+ add_filter( 'elementor/editor-v2/packages/config', function( $data ) {
133
+ ${entriesContent.join("\n")}
134
+ return $data;
135
+ } );
136
+ `;
137
+ }
138
+ getEntryType(entryName) {
139
+ if (this.options.extensions.includes(entryName)) {
140
+ return "extension";
141
+ }
142
+ if (this.options.apps.includes(entryName)) {
143
+ return "app";
144
+ }
145
+ return "util";
146
+ }
147
+ getFileFromChunk(chunk) {
148
+ return [...chunk.files].find((f) => /\.js$/i.test(f));
149
+ }
150
+ isExternalDep(request) {
151
+ const { startsWith, exact } = this.options.handlesMap;
152
+ return request && (Object.keys(exact).includes(request) || Object.keys(startsWith).some((dep) => request.startsWith(dep)));
153
+ }
154
+ getHandleFromDep(dep) {
155
+ const { startsWith, exact } = this.options.handlesMap;
156
+ if (Object.keys(exact).includes(dep)) {
157
+ return exact[dep];
158
+ }
159
+ for (const [key, value] of Object.entries(startsWith)) {
160
+ if (dep.startsWith(key)) {
161
+ return dep.replace(key, value);
162
+ }
163
+ }
164
+ return dep;
165
+ }
166
+ generateHandleName(name) {
167
+ if (this.options.handlePrefix) {
168
+ return `${this.options.handlePrefix}${name}`;
169
+ }
170
+ return name;
171
+ }
172
+ generateAssetsFileName(filename) {
173
+ return filename.replace(/(\.min)?\.js$/i, ".asset.php");
174
+ }
175
+ normalizeOptions(options) {
176
+ return {
177
+ ...options,
178
+ handlesMap: {
179
+ exact: {
180
+ ...baseHandlesMap.exact,
181
+ ...options?.handlesMap?.exact || {}
182
+ },
183
+ startsWith: {
184
+ ...baseHandlesMap.startsWith,
185
+ ...options?.handlesMap?.startsWith || {}
186
+ }
187
+ },
188
+ apps: options?.apps || [],
189
+ extensions: options?.extensions || [],
190
+ i18n: {
191
+ domain: options?.i18n?.domain || null,
192
+ replaceRequestedFile: options?.i18n?.replaceRequestedFile ?? false
193
+ }
194
+ };
195
+ }
196
+ };
197
+ // Annotate the CommonJS export names for ESM import in node:
198
+ 0 && (module.exports = {
199
+ GenerateWordPressAssetFileWebpackPlugin
200
+ });
201
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Inspired by \"Dependency Extraction Webpack Plugin\" by @wordpress team.\n// Link: https://github.com/WordPress/gutenberg/tree/trunk/packages/dependency-extraction-webpack-plugin\nimport { sources, Compilation, Compiler, Chunk } from 'webpack';\n\ntype HandlesMap = {\n\texact: Record<string, string>;\n\tstartsWith: Record<string, string>;\n}\n\ntype Options = {\n\thandlePrefix: string;\n\thandlesMap?: Partial<HandlesMap>\n\tapps?: string[];\n\textensions?: string[];\n\ti18n?: {\n\t\tdomain: string;\n\t\treplaceRequestedFile?: boolean;\n\t}\n}\n\ntype NormalizedOptions = {\n\thandlePrefix: string;\n\thandlesMap: HandlesMap;\n\tapps: string[];\n\textensions: string[];\n\ti18n: {\n\t\tdomain: string | null;\n\t\treplaceRequestedFile: boolean;\n\t}\n}\n\ntype Module = {\n\tuserRequest?: string;\n\tmodules?: Module[];\n}\n\nconst baseHandlesMap: HandlesMap = {\n\texact: {\n\t\treact: 'react',\n\t\t'react-dom': 'react-dom',\n\t},\n\tstartsWith: {\n\t\t'@elementor/': 'elementor-packages-',\n\t\t'@wordpress/': 'wp-',\n\t},\n};\n\nexport class GenerateWordPressAssetFileWebpackPlugin {\n\toptions: NormalizedOptions;\n\n\tconstructor( options: Options ) {\n\t\tthis.options = this.normalizeOptions( options );\n\t}\n\n\tapply( compiler: Compiler ) {\n\t\tcompiler.hooks.thisCompilation.tap( this.constructor.name, ( compilation ) => {\n\t\t\tlet handlesAssetsMap: Record<string, string>;\n\n\t\t\tcompilation.hooks.processAssets.tap( { name: this.constructor.name }, () => {\n\t\t\t\thandlesAssetsMap = [ ...compilation.entrypoints ].reduce<Record<string, string>>( ( map, [ entryName, entrypoint ] ) => {\n\t\t\t\t\tconst chunk = entrypoint.chunks.find( ( { name } ) => name === entryName );\n\n\t\t\t\t\tif ( ! chunk ) {\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chunkJSFile = this.getFileFromChunk( chunk );\n\n\t\t\t\t\tif ( ! chunkJSFile ) {\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst deps = this.getDepsFromChunk( compilation, chunk );\n\n\t\t\t\t\tconst assetFilename = this.generateAssetsFileName(\n\t\t\t\t\t\tcompilation.getPath( '[file]', { filename: chunkJSFile } )\n\t\t\t\t\t);\n\n\t\t\t\t\tconst handle = this.generateHandleName( entryName );\n\n\t\t\t\t\tconst content = this.createAssetsFileContent( {\n\t\t\t\t\t\tdeps,\n\t\t\t\t\t\tentryName,\n\t\t\t\t\t\ti18n: this.options.i18n,\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Add source and file into compilation for webpack to output.\n\t\t\t\t\tcompilation.assets[ assetFilename ] = new sources.RawSource( content );\n\n\t\t\t\t\tchunk.files.add( assetFilename );\n\n\t\t\t\t\tmap[ handle ] = assetFilename;\n\n\t\t\t\t\treturn map;\n\t\t\t\t}, {} );\n\t\t\t} );\n\n\t\t\tcompilation.hooks.afterProcessAssets.tap( { name: this.constructor.name }, () => {\n\t\t\t\tconst loaderFileContent = this.getLoaderFileContent( handlesAssetsMap );\n\n\t\t\t\tcompilation.assets[ 'loader.php' ] = new sources.RawSource( loaderFileContent );\n\t\t\t} );\n\t\t} );\n\t}\n\n\tgetDepsFromChunk( compilation: Compilation, chunk: Chunk ) {\n\t\tconst depsSet = new Set<string>();\n\n\t\tcompilation.chunkGraph.getChunkModules( chunk ).forEach( ( module ) => {\n\t\t\t// There are some issues with types in webpack, so we need to cast it.\n\t\t\tconst theModule = module as Module;\n\n\t\t\t[ ...( theModule.modules || [] ), theModule ].forEach( ( subModule ) => {\n\t\t\t\tif ( subModule.userRequest && this.isExternalDep( subModule.userRequest ) ) {\n\t\t\t\t\tdepsSet.add( subModule.userRequest );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn depsSet;\n\t}\n\n\tcreateAssetsFileContent( {\n\t\tdeps,\n\t\ti18n,\n\t\tentryName,\n\t}: {\n\t\tdeps: Set<string>;\n\t\ti18n: NormalizedOptions[ 'i18n' ];\n\t\tentryName: string;\n\t} ) {\n\t\tconst handleName = this.generateHandleName( entryName );\n\t\tconst type = this.getEntryType( entryName );\n\n\t\tconst depsAsString = [ ...deps ]\n\t\t\t.map( ( dep ) => this.getHandleFromDep( dep ) )\n\t\t\t.filter( ( dep ) => dep !== handleName )\n\t\t\t.sort()\n\t\t\t.map( ( dep ) => `'${ dep }',` )\n\t\t\t.join( '\\n\\t\\t' );\n\n\t\tconst i18nContent = i18n.domain ? `[\n\t\t'domain' => '${ i18n.domain }',\n\t\t'replace_requested_file' => ${ ( i18n.replaceRequestedFile ?? false ).toString() },\n\t]` : '[]';\n\n\t\tconst content =\n\t\t\t`<?php\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n/**\n * This file is generated by Webpack, do not edit it directly.\n */\nreturn [\n\t'handle' => '${ handleName }',\n\t'src' => plugins_url( '/', __FILE__ ) . '${ entryName }{{MIN_SUFFIX}}.js',\n\t'i18n' => ${ i18nContent },\n\t'type' => '${ type }',\n\t'deps' => [\n\t\t${ depsAsString }\n\t],\n];\n`;\n\n\t\treturn content;\n\t}\n\n\tgetLoaderFileContent( entriesData: Record<string, string> ) {\n\t\tconst entriesContent = Object.entries( entriesData ).map( ( [ handle, assetFileName ] ) => {\n\t\t\treturn `\n\t$data['${ handle }'] = require __DIR__ . '/${ assetFileName }';`;\n\t\t} );\n\n\t\treturn `<?php\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n/**\n * This file is generated by Webpack, do not edit it directly.\n */\nadd_filter( 'elementor/editor-v2/packages/config', function( $data ) {\n${ entriesContent.join( '\\n' ) }\n\treturn $data;\n} );\n`;\n\t}\n\n\tgetEntryType( entryName: string ) {\n\t\tif ( this.options.extensions.includes( entryName ) ) {\n\t\t\treturn 'extension';\n\t\t}\n\n\t\tif ( this.options.apps.includes( entryName ) ) {\n\t\t\treturn 'app';\n\t\t}\n\n\t\treturn 'util';\n\t}\n\n\tgetFileFromChunk( chunk: Chunk ) {\n\t\treturn [ ...chunk.files ].find( ( f ) => /\\.js$/i.test( f ) );\n\t}\n\n\tisExternalDep( request: string ) {\n\t\tconst { startsWith, exact } = this.options.handlesMap;\n\n\t\treturn request && (\n\t\t\tObject.keys( exact ).includes( request ) ||\n\t\t\tObject.keys( startsWith ).some( ( dep ) => request.startsWith( dep ) )\n\t\t);\n\t}\n\n\tgetHandleFromDep( dep: string ) {\n\t\tconst { startsWith, exact } = this.options.handlesMap;\n\n\t\tif ( Object.keys( exact ).includes( dep ) ) {\n\t\t\treturn exact[ dep ];\n\t\t}\n\n\t\tfor ( const [ key, value ] of Object.entries( startsWith ) ) {\n\t\t\tif ( dep.startsWith( key ) ) {\n\t\t\t\treturn dep.replace( key, value );\n\t\t\t}\n\t\t}\n\n\t\treturn dep;\n\t}\n\n\tgenerateHandleName( name: string ) {\n\t\tif ( this.options.handlePrefix ) {\n\t\t\treturn `${ this.options.handlePrefix }${ name }`;\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tgenerateAssetsFileName( filename: string ) {\n\t\treturn filename.replace( /(\\.min)?\\.js$/i, '.asset.php' );\n\t}\n\n\tnormalizeOptions( options: Options ): NormalizedOptions {\n\t\treturn {\n\t\t\t...options,\n\t\t\thandlesMap: {\n\t\t\t\texact: {\n\t\t\t\t\t...baseHandlesMap.exact,\n\t\t\t\t\t...( options?.handlesMap?.exact || {} ),\n\t\t\t\t},\n\t\t\t\tstartsWith: {\n\t\t\t\t\t...baseHandlesMap.startsWith,\n\t\t\t\t\t...( options?.handlesMap?.startsWith || {} ),\n\t\t\t\t},\n\t\t\t},\n\t\t\tapps: options?.apps || [],\n\t\t\textensions: options?.extensions || [],\n\t\t\ti18n: {\n\t\t\t\tdomain: options?.i18n?.domain || null,\n\t\t\t\treplaceRequestedFile: options?.i18n?.replaceRequestedFile ?? false,\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":"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","names":["module"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,176 @@
1
+ // src/index.ts
2
+ import { sources } from "webpack";
3
+ var baseHandlesMap = {
4
+ exact: {
5
+ react: "react",
6
+ "react-dom": "react-dom"
7
+ },
8
+ startsWith: {
9
+ "@elementor/": "elementor-packages-",
10
+ "@wordpress/": "wp-"
11
+ }
12
+ };
13
+ var GenerateWordPressAssetFileWebpackPlugin = class {
14
+ options;
15
+ constructor(options) {
16
+ this.options = this.normalizeOptions(options);
17
+ }
18
+ apply(compiler) {
19
+ compiler.hooks.thisCompilation.tap(this.constructor.name, (compilation) => {
20
+ let handlesAssetsMap;
21
+ compilation.hooks.processAssets.tap({ name: this.constructor.name }, () => {
22
+ handlesAssetsMap = [...compilation.entrypoints].reduce((map, [entryName, entrypoint]) => {
23
+ const chunk = entrypoint.chunks.find(({ name }) => name === entryName);
24
+ if (!chunk) {
25
+ return map;
26
+ }
27
+ const chunkJSFile = this.getFileFromChunk(chunk);
28
+ if (!chunkJSFile) {
29
+ return map;
30
+ }
31
+ const deps = this.getDepsFromChunk(compilation, chunk);
32
+ const assetFilename = this.generateAssetsFileName(
33
+ compilation.getPath("[file]", { filename: chunkJSFile })
34
+ );
35
+ const handle = this.generateHandleName(entryName);
36
+ const content = this.createAssetsFileContent({
37
+ deps,
38
+ entryName,
39
+ i18n: this.options.i18n
40
+ });
41
+ compilation.assets[assetFilename] = new sources.RawSource(content);
42
+ chunk.files.add(assetFilename);
43
+ map[handle] = assetFilename;
44
+ return map;
45
+ }, {});
46
+ });
47
+ compilation.hooks.afterProcessAssets.tap({ name: this.constructor.name }, () => {
48
+ const loaderFileContent = this.getLoaderFileContent(handlesAssetsMap);
49
+ compilation.assets["loader.php"] = new sources.RawSource(loaderFileContent);
50
+ });
51
+ });
52
+ }
53
+ getDepsFromChunk(compilation, chunk) {
54
+ const depsSet = /* @__PURE__ */ new Set();
55
+ compilation.chunkGraph.getChunkModules(chunk).forEach((module) => {
56
+ const theModule = module;
57
+ [...theModule.modules || [], theModule].forEach((subModule) => {
58
+ if (subModule.userRequest && this.isExternalDep(subModule.userRequest)) {
59
+ depsSet.add(subModule.userRequest);
60
+ }
61
+ });
62
+ });
63
+ return depsSet;
64
+ }
65
+ createAssetsFileContent({
66
+ deps,
67
+ i18n,
68
+ entryName
69
+ }) {
70
+ const handleName = this.generateHandleName(entryName);
71
+ const type = this.getEntryType(entryName);
72
+ const depsAsString = [...deps].map((dep) => this.getHandleFromDep(dep)).filter((dep) => dep !== handleName).sort().map((dep) => `'${dep}',`).join("\n ");
73
+ const i18nContent = i18n.domain ? `[
74
+ 'domain' => '${i18n.domain}',
75
+ 'replace_requested_file' => ${(i18n.replaceRequestedFile ?? false).toString()},
76
+ ]` : "[]";
77
+ const content = `<?php
78
+ if ( ! defined( 'ABSPATH' ) ) {
79
+ exit;
80
+ }
81
+ /**
82
+ * This file is generated by Webpack, do not edit it directly.
83
+ */
84
+ return [
85
+ 'handle' => '${handleName}',
86
+ 'src' => plugins_url( '/', __FILE__ ) . '${entryName}{{MIN_SUFFIX}}.js',
87
+ 'i18n' => ${i18nContent},
88
+ 'type' => '${type}',
89
+ 'deps' => [
90
+ ${depsAsString}
91
+ ],
92
+ ];
93
+ `;
94
+ return content;
95
+ }
96
+ getLoaderFileContent(entriesData) {
97
+ const entriesContent = Object.entries(entriesData).map(([handle, assetFileName]) => {
98
+ return `
99
+ $data['${handle}'] = require __DIR__ . '/${assetFileName}';`;
100
+ });
101
+ return `<?php
102
+ if ( ! defined( 'ABSPATH' ) ) {
103
+ exit;
104
+ }
105
+ /**
106
+ * This file is generated by Webpack, do not edit it directly.
107
+ */
108
+ add_filter( 'elementor/editor-v2/packages/config', function( $data ) {
109
+ ${entriesContent.join("\n")}
110
+ return $data;
111
+ } );
112
+ `;
113
+ }
114
+ getEntryType(entryName) {
115
+ if (this.options.extensions.includes(entryName)) {
116
+ return "extension";
117
+ }
118
+ if (this.options.apps.includes(entryName)) {
119
+ return "app";
120
+ }
121
+ return "util";
122
+ }
123
+ getFileFromChunk(chunk) {
124
+ return [...chunk.files].find((f) => /\.js$/i.test(f));
125
+ }
126
+ isExternalDep(request) {
127
+ const { startsWith, exact } = this.options.handlesMap;
128
+ return request && (Object.keys(exact).includes(request) || Object.keys(startsWith).some((dep) => request.startsWith(dep)));
129
+ }
130
+ getHandleFromDep(dep) {
131
+ const { startsWith, exact } = this.options.handlesMap;
132
+ if (Object.keys(exact).includes(dep)) {
133
+ return exact[dep];
134
+ }
135
+ for (const [key, value] of Object.entries(startsWith)) {
136
+ if (dep.startsWith(key)) {
137
+ return dep.replace(key, value);
138
+ }
139
+ }
140
+ return dep;
141
+ }
142
+ generateHandleName(name) {
143
+ if (this.options.handlePrefix) {
144
+ return `${this.options.handlePrefix}${name}`;
145
+ }
146
+ return name;
147
+ }
148
+ generateAssetsFileName(filename) {
149
+ return filename.replace(/(\.min)?\.js$/i, ".asset.php");
150
+ }
151
+ normalizeOptions(options) {
152
+ return {
153
+ ...options,
154
+ handlesMap: {
155
+ exact: {
156
+ ...baseHandlesMap.exact,
157
+ ...options?.handlesMap?.exact || {}
158
+ },
159
+ startsWith: {
160
+ ...baseHandlesMap.startsWith,
161
+ ...options?.handlesMap?.startsWith || {}
162
+ }
163
+ },
164
+ apps: options?.apps || [],
165
+ extensions: options?.extensions || [],
166
+ i18n: {
167
+ domain: options?.i18n?.domain || null,
168
+ replaceRequestedFile: options?.i18n?.replaceRequestedFile ?? false
169
+ }
170
+ };
171
+ }
172
+ };
173
+ export {
174
+ GenerateWordPressAssetFileWebpackPlugin
175
+ };
176
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Inspired by \"Dependency Extraction Webpack Plugin\" by @wordpress team.\n// Link: https://github.com/WordPress/gutenberg/tree/trunk/packages/dependency-extraction-webpack-plugin\nimport { sources, Compilation, Compiler, Chunk } from 'webpack';\n\ntype HandlesMap = {\n\texact: Record<string, string>;\n\tstartsWith: Record<string, string>;\n}\n\ntype Options = {\n\thandlePrefix: string;\n\thandlesMap?: Partial<HandlesMap>\n\tapps?: string[];\n\textensions?: string[];\n\ti18n?: {\n\t\tdomain: string;\n\t\treplaceRequestedFile?: boolean;\n\t}\n}\n\ntype NormalizedOptions = {\n\thandlePrefix: string;\n\thandlesMap: HandlesMap;\n\tapps: string[];\n\textensions: string[];\n\ti18n: {\n\t\tdomain: string | null;\n\t\treplaceRequestedFile: boolean;\n\t}\n}\n\ntype Module = {\n\tuserRequest?: string;\n\tmodules?: Module[];\n}\n\nconst baseHandlesMap: HandlesMap = {\n\texact: {\n\t\treact: 'react',\n\t\t'react-dom': 'react-dom',\n\t},\n\tstartsWith: {\n\t\t'@elementor/': 'elementor-packages-',\n\t\t'@wordpress/': 'wp-',\n\t},\n};\n\nexport class GenerateWordPressAssetFileWebpackPlugin {\n\toptions: NormalizedOptions;\n\n\tconstructor( options: Options ) {\n\t\tthis.options = this.normalizeOptions( options );\n\t}\n\n\tapply( compiler: Compiler ) {\n\t\tcompiler.hooks.thisCompilation.tap( this.constructor.name, ( compilation ) => {\n\t\t\tlet handlesAssetsMap: Record<string, string>;\n\n\t\t\tcompilation.hooks.processAssets.tap( { name: this.constructor.name }, () => {\n\t\t\t\thandlesAssetsMap = [ ...compilation.entrypoints ].reduce<Record<string, string>>( ( map, [ entryName, entrypoint ] ) => {\n\t\t\t\t\tconst chunk = entrypoint.chunks.find( ( { name } ) => name === entryName );\n\n\t\t\t\t\tif ( ! chunk ) {\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst chunkJSFile = this.getFileFromChunk( chunk );\n\n\t\t\t\t\tif ( ! chunkJSFile ) {\n\t\t\t\t\t\treturn map;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst deps = this.getDepsFromChunk( compilation, chunk );\n\n\t\t\t\t\tconst assetFilename = this.generateAssetsFileName(\n\t\t\t\t\t\tcompilation.getPath( '[file]', { filename: chunkJSFile } )\n\t\t\t\t\t);\n\n\t\t\t\t\tconst handle = this.generateHandleName( entryName );\n\n\t\t\t\t\tconst content = this.createAssetsFileContent( {\n\t\t\t\t\t\tdeps,\n\t\t\t\t\t\tentryName,\n\t\t\t\t\t\ti18n: this.options.i18n,\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Add source and file into compilation for webpack to output.\n\t\t\t\t\tcompilation.assets[ assetFilename ] = new sources.RawSource( content );\n\n\t\t\t\t\tchunk.files.add( assetFilename );\n\n\t\t\t\t\tmap[ handle ] = assetFilename;\n\n\t\t\t\t\treturn map;\n\t\t\t\t}, {} );\n\t\t\t} );\n\n\t\t\tcompilation.hooks.afterProcessAssets.tap( { name: this.constructor.name }, () => {\n\t\t\t\tconst loaderFileContent = this.getLoaderFileContent( handlesAssetsMap );\n\n\t\t\t\tcompilation.assets[ 'loader.php' ] = new sources.RawSource( loaderFileContent );\n\t\t\t} );\n\t\t} );\n\t}\n\n\tgetDepsFromChunk( compilation: Compilation, chunk: Chunk ) {\n\t\tconst depsSet = new Set<string>();\n\n\t\tcompilation.chunkGraph.getChunkModules( chunk ).forEach( ( module ) => {\n\t\t\t// There are some issues with types in webpack, so we need to cast it.\n\t\t\tconst theModule = module as Module;\n\n\t\t\t[ ...( theModule.modules || [] ), theModule ].forEach( ( subModule ) => {\n\t\t\t\tif ( subModule.userRequest && this.isExternalDep( subModule.userRequest ) ) {\n\t\t\t\t\tdepsSet.add( subModule.userRequest );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\n\t\treturn depsSet;\n\t}\n\n\tcreateAssetsFileContent( {\n\t\tdeps,\n\t\ti18n,\n\t\tentryName,\n\t}: {\n\t\tdeps: Set<string>;\n\t\ti18n: NormalizedOptions[ 'i18n' ];\n\t\tentryName: string;\n\t} ) {\n\t\tconst handleName = this.generateHandleName( entryName );\n\t\tconst type = this.getEntryType( entryName );\n\n\t\tconst depsAsString = [ ...deps ]\n\t\t\t.map( ( dep ) => this.getHandleFromDep( dep ) )\n\t\t\t.filter( ( dep ) => dep !== handleName )\n\t\t\t.sort()\n\t\t\t.map( ( dep ) => `'${ dep }',` )\n\t\t\t.join( '\\n\\t\\t' );\n\n\t\tconst i18nContent = i18n.domain ? `[\n\t\t'domain' => '${ i18n.domain }',\n\t\t'replace_requested_file' => ${ ( i18n.replaceRequestedFile ?? false ).toString() },\n\t]` : '[]';\n\n\t\tconst content =\n\t\t\t`<?php\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n/**\n * This file is generated by Webpack, do not edit it directly.\n */\nreturn [\n\t'handle' => '${ handleName }',\n\t'src' => plugins_url( '/', __FILE__ ) . '${ entryName }{{MIN_SUFFIX}}.js',\n\t'i18n' => ${ i18nContent },\n\t'type' => '${ type }',\n\t'deps' => [\n\t\t${ depsAsString }\n\t],\n];\n`;\n\n\t\treturn content;\n\t}\n\n\tgetLoaderFileContent( entriesData: Record<string, string> ) {\n\t\tconst entriesContent = Object.entries( entriesData ).map( ( [ handle, assetFileName ] ) => {\n\t\t\treturn `\n\t$data['${ handle }'] = require __DIR__ . '/${ assetFileName }';`;\n\t\t} );\n\n\t\treturn `<?php\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n/**\n * This file is generated by Webpack, do not edit it directly.\n */\nadd_filter( 'elementor/editor-v2/packages/config', function( $data ) {\n${ entriesContent.join( '\\n' ) }\n\treturn $data;\n} );\n`;\n\t}\n\n\tgetEntryType( entryName: string ) {\n\t\tif ( this.options.extensions.includes( entryName ) ) {\n\t\t\treturn 'extension';\n\t\t}\n\n\t\tif ( this.options.apps.includes( entryName ) ) {\n\t\t\treturn 'app';\n\t\t}\n\n\t\treturn 'util';\n\t}\n\n\tgetFileFromChunk( chunk: Chunk ) {\n\t\treturn [ ...chunk.files ].find( ( f ) => /\\.js$/i.test( f ) );\n\t}\n\n\tisExternalDep( request: string ) {\n\t\tconst { startsWith, exact } = this.options.handlesMap;\n\n\t\treturn request && (\n\t\t\tObject.keys( exact ).includes( request ) ||\n\t\t\tObject.keys( startsWith ).some( ( dep ) => request.startsWith( dep ) )\n\t\t);\n\t}\n\n\tgetHandleFromDep( dep: string ) {\n\t\tconst { startsWith, exact } = this.options.handlesMap;\n\n\t\tif ( Object.keys( exact ).includes( dep ) ) {\n\t\t\treturn exact[ dep ];\n\t\t}\n\n\t\tfor ( const [ key, value ] of Object.entries( startsWith ) ) {\n\t\t\tif ( dep.startsWith( key ) ) {\n\t\t\t\treturn dep.replace( key, value );\n\t\t\t}\n\t\t}\n\n\t\treturn dep;\n\t}\n\n\tgenerateHandleName( name: string ) {\n\t\tif ( this.options.handlePrefix ) {\n\t\t\treturn `${ this.options.handlePrefix }${ name }`;\n\t\t}\n\n\t\treturn name;\n\t}\n\n\tgenerateAssetsFileName( filename: string ) {\n\t\treturn filename.replace( /(\\.min)?\\.js$/i, '.asset.php' );\n\t}\n\n\tnormalizeOptions( options: Options ): NormalizedOptions {\n\t\treturn {\n\t\t\t...options,\n\t\t\thandlesMap: {\n\t\t\t\texact: {\n\t\t\t\t\t...baseHandlesMap.exact,\n\t\t\t\t\t...( options?.handlesMap?.exact || {} ),\n\t\t\t\t},\n\t\t\t\tstartsWith: {\n\t\t\t\t\t...baseHandlesMap.startsWith,\n\t\t\t\t\t...( options?.handlesMap?.startsWith || {} ),\n\t\t\t\t},\n\t\t\t},\n\t\t\tapps: options?.apps || [],\n\t\t\textensions: options?.extensions || [],\n\t\t\ti18n: {\n\t\t\t\tdomain: options?.i18n?.domain || null,\n\t\t\t\treplaceRequestedFile: options?.i18n?.replaceRequestedFile ?? false,\n\t\t\t},\n\t\t};\n\t}\n}\n"],"mappings":"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","names":[]}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@elementor/generate-wordpress-asset-file-webpack-plugin",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "author": "Elementor Team",
6
+ "homepage": "https://elementor.com/",
7
+ "license": "GPL-3.0-or-later",
8
+ "main": "dist/index.js",
9
+ "module": "dist/index.mjs",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.mjs",
14
+ "require": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ },
17
+ "./package.json": "./package.json"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/elementor/elementor-packages.git",
22
+ "directory": "packages/generated-wordpress-asset-file-webpack-plugin"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/elementor/elementor-packages/issues"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "scripts": {
31
+ "build": "tsup --config=../../tsup.build.ts",
32
+ "dev": "tsup --config=../../tsup.dev.ts --format=esm,cjs"
33
+ },
34
+ "peerDependencies": {
35
+ "webpack": "5.x"
36
+ },
37
+ "gitHead": "2ba9f13a9dbd085eb6ed8e6e303e9275ce626b8d"
38
+ }
@@ -0,0 +1,93 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`@elementor/generate-wordpress-asset-file-webpack-plugin should generate assets files: app.asset.php 1`] = `
4
+ "<?php
5
+ if ( ! defined( 'ABSPATH' ) ) {
6
+ exit;
7
+ }
8
+ /**
9
+ * This file is generated by Webpack, do not edit it directly.
10
+ */
11
+ return [
12
+ 'handle' => 'elementor-test-app',
13
+ 'src' => plugins_url( '/', __FILE__ ) . 'app{{MIN_SUFFIX}}.js',
14
+ 'i18n' => [
15
+ 'domain' => 'elementor-test',
16
+ 'replace_requested_file' => true,
17
+ ],
18
+ 'type' => 'app',
19
+ 'deps' => [
20
+ 'elementor-editor',
21
+ 'wp-element',
22
+ ],
23
+ ];
24
+ "
25
+ `;
26
+
27
+ exports[`@elementor/generate-wordpress-asset-file-webpack-plugin should generate assets files: extension.asset.php 1`] = `
28
+ "<?php
29
+ if ( ! defined( 'ABSPATH' ) ) {
30
+ exit;
31
+ }
32
+ /**
33
+ * This file is generated by Webpack, do not edit it directly.
34
+ */
35
+ return [
36
+ 'handle' => 'elementor-test-extension',
37
+ 'src' => plugins_url( '/', __FILE__ ) . 'extension{{MIN_SUFFIX}}.js',
38
+ 'i18n' => [
39
+ 'domain' => 'elementor-test',
40
+ 'replace_requested_file' => true,
41
+ ],
42
+ 'type' => 'extension',
43
+ 'deps' => [
44
+ 'elementor-editor',
45
+ 'wp-element',
46
+ ],
47
+ ];
48
+ "
49
+ `;
50
+
51
+ exports[`@elementor/generate-wordpress-asset-file-webpack-plugin should generate assets files: loader.php 1`] = `
52
+ "<?php
53
+ if ( ! defined( 'ABSPATH' ) ) {
54
+ exit;
55
+ }
56
+ /**
57
+ * This file is generated by Webpack, do not edit it directly.
58
+ */
59
+ add_filter( 'elementor/editor-v2/packages/config', function( $data ) {
60
+
61
+ $data['elementor-test-app'] = require __DIR__ . '/app.asset.php';
62
+
63
+ $data['elementor-test-extension'] = require __DIR__ . '/extension.asset.php';
64
+
65
+ $data['elementor-test-util'] = require __DIR__ . '/util.asset.php';
66
+ return $data;
67
+ } );
68
+ "
69
+ `;
70
+
71
+ exports[`@elementor/generate-wordpress-asset-file-webpack-plugin should generate assets files: util.asset.php 1`] = `
72
+ "<?php
73
+ if ( ! defined( 'ABSPATH' ) ) {
74
+ exit;
75
+ }
76
+ /**
77
+ * This file is generated by Webpack, do not edit it directly.
78
+ */
79
+ return [
80
+ 'handle' => 'elementor-test-util',
81
+ 'src' => plugins_url( '/', __FILE__ ) . 'util{{MIN_SUFFIX}}.js',
82
+ 'i18n' => [
83
+ 'domain' => 'elementor-test',
84
+ 'replace_requested_file' => true,
85
+ ],
86
+ 'type' => 'util',
87
+ 'deps' => [
88
+ 'elementor-editor',
89
+ 'wp-element',
90
+ ],
91
+ ];
92
+ "
93
+ `;