apply: function()

in packages/docpack-examples-compiler/lib/plugin.js [26:85]


  apply: function(compiler) {
    var config = this.config;

    compiler.plugin('compilation', function(compilation) {
      compilation.plugin(docpack.HOOKS.AFTER_EXTRACT, function(sources, done) {
        var compiler = new ExamplesCompiler(compilation, {
          filename: config.filename,
          outputFilename: config.outputFilename
        });

        var hasFilter = typeof config.filter == 'function';

        var targets = config.match === null
          ? sources
          : sources.filter(function(source) {
              return tools.matcher(config.match, source.absolutePath);
            });

        var filesByPaths = getExampleFilesByPath(targets);

        for (var sourcePath in filesByPaths) {
          filesByPaths[sourcePath].forEach(function(file) {
            if (hasFilter && !config.filter(file)) {
              return;
            }

            file.chunkName = compiler.getOutputFilename(file, sourcePath);
            compiler.addFile(file, sourcePath);
          });
        }

        compiler.run()
          .then(function(compilation) {
            var files = compiler.files;
            var assetsByChunk = tools.getAssetsByChunkName(compilation);

            files.forEach(function(file) {
              if (file.chunkName in assetsByChunk == false) {
                return;
              }

              assetsByChunk[file.chunkName].forEach(function (assetPath) {
                var asset = new Asset({
                  type: path.extname(assetPath).substr(1),
                  content: compilation.assets[assetPath].source(),
                  path: assetPath
                });

                file.assets.push(asset);
              });

              delete file.chunkName;
            });

            done(null, sources);
          })
          .catch(done);
      });
    })
  }