All files / lib webpackManifest.ts

42.86% Statements 6/14
50% Branches 2/4
33.33% Functions 1/3
42.86% Lines 6/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 281x 1x   1x   1x 1x   1x                                      
import * as fs from 'fs'
import * as path from 'path'
import * as webpack from 'webpack'
import { projectPath } from '../internal'
 
export const webpackManifest = (jsDest: string, dest: string, filename?: string) => {
  filename = filename || 'rev-manifest.json'
 
  return function(this: webpack.Compiler) {
    this.hooks.done.tap('webpackManifest', statsObject => {
      const stats = statsObject.toJson()
      const chunks = stats.assetsByChunkName
      const manifest: { [n: string]: any } = {}
 
      for (const key in chunks) {
        if (chunks.hasOwnProperty(key)) {
          const originalFilename = key + '.js'
          // https://github.com/vigetlabs/blendid/issues/232#issuecomment-171963233
          const chunkName = typeof chunks[key] === 'string' ? chunks[key] : chunks[key][0]
          manifest[path.join(jsDest, originalFilename)] = path.join(jsDest, chunkName)
        }
      }
 
      fs.writeFileSync(projectPath(dest, filename), JSON.stringify(manifest))
    })
  }
}