(a, b)
| 87 | * @returns {AssetInfo} object |
| 88 | */ |
| 89 | const mergeAssetInfo = (a, b) => { |
| 90 | /** @type {AssetInfo} */ |
| 91 | const result = { ...a, ...b }; |
| 92 | for (const key of Object.keys(a)) { |
| 93 | if (key in b) { |
| 94 | if (a[key] === b[key]) continue; |
| 95 | switch (key) { |
| 96 | case "fullhash": |
| 97 | case "chunkhash": |
| 98 | case "modulehash": |
| 99 | case "contenthash": |
| 100 | result[key] = mergeMaybeArrays(a[key], b[key]); |
| 101 | break; |
| 102 | case "immutable": |
| 103 | case "development": |
| 104 | case "hotModuleReplacement": |
| 105 | case "javascriptModule": |
| 106 | result[key] = a[key] || b[key]; |
| 107 | break; |
| 108 | case "related": |
| 109 | result[key] = mergeRelatedInfo( |
| 110 | /** @type {NonNullable<AssetInfo["related"]>} */ |
| 111 | (a[key]), |
| 112 | /** @type {NonNullable<AssetInfo["related"]>} */ |
| 113 | (b[key]) |
| 114 | ); |
| 115 | break; |
| 116 | default: |
| 117 | throw new Error(`Can't handle conflicting asset info for ${key}`); |
| 118 | } |
| 119 | } |
| 120 | } |
| 121 | return result; |
| 122 | }; |
| 123 | |
| 124 | /** |
| 125 | * Merges related info. |
no test coverage detected