UNPKG

@gravityforms/dependency-extraction-webpack-plugin

Version:

Dependency extraction webpack plugin for use in Gravity Forms development. Extends the WordPress plugin.

89 lines (73 loc) 2.77 kB
const WPDependencyExtractionWebpackPlugin = require( '@wordpress/dependency-extraction-webpack-plugin' ); const getPackages = require( '../assets/get-packages' ); const ROOT_NAMESPACE = 'gform'; const gfRequestToExternal = ( request, excludedExternals, rootNameSpace ) => { const packages = getPackages( rootNameSpace ); if ( packages.hasOwnProperty( request ) ) { // Check if the request is in the excludedExternals array if ( ( excludedExternals || [] ).includes( request ) ) { return; } // Return the external array return packages[ request ].external; } }; const gfRequestToHandle = ( request, rootNameSpace ) => { const packages = getPackages( rootNameSpace ); if ( packages.hasOwnProperty( request ) ) { return packages[ request ].handle; } }; class DependencyExtractionWebpackPlugin extends WPDependencyExtractionWebpackPlugin { externalizeWpDeps( _context, request, callback ) { const rootNameSpace = this.options.rootNamespace || ROOT_NAMESPACE; let externalRequest; // Determine if @gravityforms/components is bundled const isGravityComponentsBundled = ( this.options.bundledPackages || [] ).includes( '@gravityforms/components' ); // If @gravityforms/components is bundled, exclude all requests that start with @gravityforms/components if ( isGravityComponentsBundled && request.startsWith( '@gravityforms/components' ) ) { return callback(); } // Handle via options.requestToExternal first if ( typeof this.options.requestToExternal === 'function' ) { externalRequest = this.options.requestToExternal( request ); } // Cascade to default if unhandled and enabled if ( typeof externalRequest === 'undefined' && this.options.useDefaults ) { externalRequest = gfRequestToExternal( request, this.options.bundledPackages || [], rootNameSpace ); } if ( externalRequest ) { this.externalizedDeps.add( request ); return callback( null, externalRequest ); } // Fall back to the WP method return super.externalizeWpDeps( _context, request, callback ); } mapRequestToDependency( request ) { const rootNameSpace = this.options.rootNamespace || ROOT_NAMESPACE; // Handle via options.requestToHandle first if ( typeof this.options.requestToHandle === 'function' ) { const scriptDependency = this.options.requestToHandle( request ); if ( scriptDependency ) { return scriptDependency; } } // Cascade to default if enabled if ( this.options.useDefaults ) { const scriptDependency = gfRequestToHandle( request, rootNameSpace ); if ( scriptDependency ) { return scriptDependency; } } // Fall back to the WP method return super.mapRequestToDependency( request ); } } module.exports = DependencyExtractionWebpackPlugin;