@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
JavaScript
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;