123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- const util = require("util");
- const SyncBailHook = require("./SyncBailHook");
- function Tapable() {
- this._pluginCompat = new SyncBailHook(["options"]);
- this._pluginCompat.tap(
- {
- name: "Tapable camelCase",
- stage: 100
- },
- options => {
- options.names.add(
- options.name.replace(/[- ]([a-z])/g, (str, ch) => ch.toUpperCase())
- );
- }
- );
- this._pluginCompat.tap(
- {
- name: "Tapable this.hooks",
- stage: 200
- },
- options => {
- let hook;
- for (const name of options.names) {
- hook = this.hooks[name];
- if (hook !== undefined) {
- break;
- }
- }
- if (hook !== undefined) {
- const tapOpt = {
- name: options.fn.name || "unnamed compat plugin",
- stage: options.stage || 0
- };
- if (options.async) hook.tapAsync(tapOpt, options.fn);
- else hook.tap(tapOpt, options.fn);
- return true;
- }
- }
- );
- }
- module.exports = Tapable;
- Tapable.addCompatLayer = function addCompatLayer(instance) {
- Tapable.call(instance);
- instance.plugin = Tapable.prototype.plugin;
- instance.apply = Tapable.prototype.apply;
- };
- Tapable.prototype.plugin = util.deprecate(function plugin(name, fn) {
- if (Array.isArray(name)) {
- name.forEach(function(name) {
- this.plugin(name, fn);
- }, this);
- return;
- }
- const result = this._pluginCompat.call({
- name: name,
- fn: fn,
- names: new Set([name])
- });
- if (!result) {
- throw new Error(
- `Plugin could not be registered at '${name}'. Hook was not found.\n` +
- "BREAKING CHANGE: There need to exist a hook at 'this.hooks'. " +
- "To create a compatibility layer for this hook, hook into 'this._pluginCompat'."
- );
- }
- }, "Tapable.plugin is deprecated. Use new API on `.hooks` instead");
- Tapable.prototype.apply = util.deprecate(function apply() {
- for (var i = 0; i < arguments.length; i++) {
- arguments[i].apply(this);
- }
- }, "Tapable.apply is deprecated. Call apply on the plugin directly instead");
|