| 'use strict'; | 
|   | 
| const CHUNK_OPTIONS = ['all', 'async']; | 
|   | 
| const getPublicPath = require('./common.js').getPublicPath; | 
| const createResourceHint = require('./resource-hints.js').createResourceHint; | 
| const matches = require('./common.js').matches; | 
|   | 
| const addAsyncChunkResourceHints = (chunks, options) => { | 
|   const getRef = generateRef(options); | 
|   const hints = []; | 
|   chunks | 
|     .filter(chunk => !isInitial(chunk)) | 
|     .reduce( | 
|       (files, chunk) => files.concat(chunk.files), | 
|       []) | 
|     .forEach(file => { | 
|       if (optionsMatch(options.preload, file)) { | 
|         hints.push(createResourceHint('preload', getRef(file))); | 
|       } else if (optionsMatch(options.prefetch, file)) { | 
|         hints.push(createResourceHint('prefetch', getRef(file))); | 
|       } | 
|     }); | 
|   return hints; | 
| }; | 
|   | 
| const isInitial = chunk => | 
|   chunk.canBeInitial | 
|     ? chunk.canBeInitial() | 
|     : chunk.isInitial | 
|       ? chunk.isInitial() | 
|       : chunk.isInitial; | 
|   | 
| const optionsMatch = (option, file) => { | 
|   return matches(option.chunks, CHUNK_OPTIONS) && matches(file, option.test); | 
| }; | 
|   | 
| const generateRef = options => { | 
|   const publicPath = getPublicPath(options); | 
|   return publicPath | 
|     ? file => publicPath + file | 
|     : file => file; | 
| }; | 
|   | 
| module.exports = addAsyncChunkResourceHints; |