packages/workbox-webpack-plugin/src/lib/get-manifest-entries-from-compilation.js
function getManifestEntriesFromCompilation(compilation, config) {
  const blacklistedChunkNames = config.excludeChunks;
  const whitelistedChunkNames = config.chunks;
  const {assets, chunks} = compilation;
  const {publicPath} = compilation.options.output;

  const assetMetadata = generateMetadataForAssets(assets, chunks);
  const filteredAssetMetadata = filterAssets(assetMetadata,
      whitelistedChunkNames, blacklistedChunkNames);

  const knownHashes = [
    compilation.hash,
    compilation.fullHash,
    ...getKnownHashesFromAssets(filteredAssetMetadata),
  ].filter((hash) => !!hash);

  const manifestEntries = [];
  for (const [file, metadata] of Object.entries(filteredAssetMetadata)) {
    // Filter based on test/include/exclude options set in the config,
    // following webpack's conventions.
    // This matches the behavior of, e.g., UglifyJS's webpack plugin.
    if (!ModuleFilenameHelpers.matchObject(config, file)) {
      continue;
    }

    const publicURL = resolveWebpackURL(publicPath, file);
    const manifestEntry = getEntry(knownHashes, publicURL, metadata.hash);
    manifestEntries.push(manifestEntry);
  }
  return manifestEntries;
}
function getManifestEntriesFromCompilation(compilation, config) {
  const blacklistedChunkNames = config.excludeChunks;
  const whitelistedChunkNames = config.chunks;
  const {assets, chunks} = compilation;
  const {publicPath} = compilation.options.output;

  const assetMetadata = generateMetadataForAssets(assets, chunks);
  const filteredAssetMetadata = filterAssets(assetMetadata,
      whitelistedChunkNames, blacklistedChunkNames);

  const knownHashes = [
    compilation.hash,
    compilation.fullHash,
    ...getKnownHashesFromAssets(filteredAssetMetadata),
  ].filter((hash) => !!hash);

  const manifestEntries = [];
  for (const [file, metadata] of Object.entries(filteredAssetMetadata)) {
    // Filter based on test/include/exclude options set in the config,
    // following webpack's conventions.
    // This matches the behavior of, e.g., UglifyJS's webpack plugin.
    if (!ModuleFilenameHelpers.matchObject(config, file)) {
      continue;
    }

    const publicURL = resolveWebpackURL(publicPath, file);
    const manifestEntry = getEntry(knownHashes, publicURL, metadata.hash);
    manifestEntries.push(manifestEntry);
  }
  return manifestEntries;
}
function getManifestEntriesFromCompilation ( compilation , config ) { const blacklistedChunkNames = config . excludeChunks ; const whitelistedChunkNames = config . chunks ; const { assets , chunks } = compilation ; const { publicPath } = compilation . options . output ; const assetMetadata = generateMetadataForAssets ( assets , chunks ) ; const filteredAssetMetadata = filterAssets ( assetMetadata , whitelistedChunkNames , blacklistedChunkNames ) ; const knownHashes = [ compilation . hash , compilation . fullHash , ... getKnownHashesFromAssets ( filteredAssetMetadata ) , ] . filter ( ( hash ) => ! ! hash ) ; const manifestEntries = [ ] ; for ( const [ file , metadata ] of Object . entries ( filteredAssetMetadata ) ) { // Filter based on test/include/exclude options set in the config, // following webpack's conventions. // This matches the behavior of, e.g., UglifyJS's webpack plugin. if ( ! ModuleFilenameHelpers . matchObject ( config , file ) ) { continue ; } const publicURL = resolveWebpackURL ( publicPath , file ) ; const manifestEntry = getEntry ( knownHashes , publicURL , metadata . hash ) ; manifestEntries . push ( manifestEntry ) ; } return manifestEntries ; }
Generate an array of manifest entries using webpack's compilation data.

@param {Object} compilation webpack compilation
@param {Object} config
@return {Array<workbox.build.ManifestEntry>}

@private
Generate an array of manifest entries using webpack s compilation data .