Docpack.prototype.apply = function()

in packages/docpack/lib/docpack.js [91:180]


Docpack.prototype.apply = function(compiler) {
  if (compiler.parentCompilation) {
    return false;
  }

  var docpack = this;
  var promises;
  var applyPluginsWaterfall;

  if (docpack.plugins.length > 0) {
    compiler.apply.apply(compiler, docpack.plugins);
  }

  compiler.plugin('after-plugins', function () {
    this.applyPlugins(HOOKS.INIT, compiler);
  });

  compiler.plugin('this-compilation', function (compilation) {
    applyPluginsWaterfall = Promise.promisify(compilation.applyPluginsAsyncWaterfall, {context: compilation});

    compilation.plugin('optimize-tree', function (chunks, modules, done) {
      var filesToProcess = utils.getAffectedFiles(compilation).filter(function(filepath) {
        return utils.matcher(docpack.config, filepath);
      });

      promises = Promise.map(filesToProcess, function (filepath) {
        return utils.readFile(compiler.inputFileSystem, filepath)
          .then(function (content) {
            return new Source({
              absolutePath: filepath,
              path: path.relative(compiler.options.context, filepath),
              content: content.toString()
            });
          })
      })

        .then(function(sources) {
          return applyHook(applyPluginsWaterfall, HOOKS.BEFORE_EXTRACT, sources);
        })

        .then(function(sources) {
          return applyHook(applyPluginsWaterfall, HOOKS.EXTRACT, sources);
        })

        .then(function(sources) {
          return applyHook(applyPluginsWaterfall, HOOKS.AFTER_EXTRACT, sources);
        })

        .each(function(source) {
          docpack.save(source);
          return source;
        })

        .then(function(sources) {
          done();
          return sources;
        })

        .catch(done);
    });
  });

  compiler.plugin('emit', function (compilation, done) {
    promises
      .then(function (sources) {
        return applyHook(applyPluginsWaterfall, HOOKS.BEFORE_GENERATE, sources);
      })

      .then(function (sources) {
        return applyHook(applyPluginsWaterfall, HOOKS.GENERATE, sources);
      })

      .then(function (sources) {
        return applyHook(applyPluginsWaterfall, HOOKS.AFTER_GENERATE, sources);
      })

      .then(function (sources) {
        return applyHook(applyPluginsWaterfall, HOOKS.EMIT, sources);
      })

      .catch(done)

      .finally(function () {
        done();
        return null;
      });
  });

  return true;
};