1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra and Zackary Jackson @ScriptedAlchemy
- */
- "use strict";
- const { parseOptions } = require("../container/options");
- const ConsumeSharedPlugin = require("./ConsumeSharedPlugin");
- const ProvideSharedPlugin = require("./ProvideSharedPlugin");
- const { isRequiredVersion } = require("./utils");
- /** @typedef {import("../../declarations/plugins/sharing/ConsumeSharedPlugin").ConsumeSharedPluginOptions} ConsumeSharedPluginOptions */
- /** @typedef {import("../../declarations/plugins/sharing/ConsumeSharedPlugin").ConsumesConfig} ConsumesConfig */
- /** @typedef {import("../../declarations/plugins/sharing/ProvideSharedPlugin").ProvideSharedPluginOptions} ProvideSharedPluginOptions */
- /** @typedef {import("../../declarations/plugins/sharing/ProvideSharedPlugin").ProvidesConfig} ProvidesConfig */
- /** @typedef {import("../../declarations/plugins/sharing/SharePlugin").SharePluginOptions} SharePluginOptions */
- /** @typedef {import("../../declarations/plugins/sharing/SharePlugin").SharedConfig} SharedConfig */
- /** @typedef {import("../Compiler")} Compiler */
- class SharePlugin {
- /**
- * @param {SharePluginOptions} options options
- */
- constructor(options) {
- /** @type {[string, SharedConfig][]} */
- const sharedOptions = parseOptions(
- options.shared,
- (item, key) => {
- if (typeof item !== "string")
- throw new Error("Unexpected array in shared");
- /** @type {SharedConfig} */
- const config =
- item === key || !isRequiredVersion(item)
- ? {
- import: item
- }
- : {
- import: key,
- requiredVersion: item
- };
- return config;
- },
- item => item
- );
- /** @type {Record<string, ConsumesConfig>[]} */
- const consumes = sharedOptions.map(([key, options]) => ({
- [key]: {
- import: options.import,
- shareKey: options.shareKey || key,
- shareScope: options.shareScope,
- requiredVersion: options.requiredVersion,
- strictVersion: options.strictVersion,
- singleton: options.singleton,
- packageName: options.packageName,
- eager: options.eager
- }
- }));
- /** @type {Record<string, ProvidesConfig>[]} */
- const provides = sharedOptions
- .filter(([, options]) => options.import !== false)
- .map(([key, options]) => ({
- [options.import || key]: {
- shareKey: options.shareKey || key,
- shareScope: options.shareScope,
- version: options.version,
- eager: options.eager
- }
- }));
- this._shareScope = options.shareScope;
- this._consumes = consumes;
- this._provides = provides;
- }
- /**
- * Apply the plugin
- * @param {Compiler} compiler the compiler instance
- * @returns {void}
- */
- apply(compiler) {
- new ConsumeSharedPlugin({
- shareScope: this._shareScope,
- consumes: this._consumes
- }).apply(compiler);
- new ProvideSharedPlugin({
- shareScope: this._shareScope,
- provides: this._provides
- }).apply(compiler);
- }
- }
- module.exports = SharePlugin;
|