|
944 | 944 | for(var key in r.data) { |
945 | 945 | var v = r.data[key]; |
946 | 946 |
|
| 947 | + // TODO: work with arrays? |
947 | 948 | if (v !== '' && v !== null && ((typeof v === 'string' && !/^\s+$/.test(v)) || typeof v === 'number' || typeof v === 'object')) { |
948 | 949 |
|
949 | 950 | // Check meta plugins order. |
950 | 951 | allResults.vars._sources = allResults.vars._sources || {}; |
951 | 952 |
|
952 | | - var prevOrder = null, nextOrder = null, pluginId = allResults.vars._sources[key]; |
| 953 | + var prevOrder = null, nextOrder = null, prevPluginId = allResults.vars._sources[key]; |
953 | 954 |
|
954 | | - if (pluginId && plugins[pluginId] && plugins[r.method.pluginId]) { |
955 | | - prevOrder = plugins[pluginId].order; |
| 955 | + if (prevPluginId && plugins[prevPluginId] && plugins[r.method.pluginId]) { |
| 956 | + prevOrder = plugins[prevPluginId].order; |
956 | 957 | nextOrder = plugins[r.method.pluginId].order; |
957 | 958 | } |
958 | 959 |
|
959 | | - if (!prevOrder || !nextOrder || prevOrder < nextOrder) { |
| 960 | + var oldValue = allResults.vars[key]; |
| 961 | + |
| 962 | + var newValueOverrides = !prevOrder || !nextOrder || prevOrder < nextOrder; |
| 963 | + |
| 964 | + if (typeof v === 'object' && typeof oldValue === 'object') { |
| 965 | + |
| 966 | + if (newValueOverrides) { |
| 967 | + // Override existing object. |
| 968 | + Object.assign(oldValue, v); |
| 969 | + } else { |
| 970 | + // Reassign with old values on top. |
| 971 | + allResults.vars[key] = Object.assign(v, oldValue); |
| 972 | + } |
| 973 | + |
| 974 | + if (!Array.isArray(allResults.vars._sources[key])) { |
| 975 | + // Convert sources list to array. |
| 976 | + allResults.vars._sources[key] = [allResults.vars._sources[key]]; |
| 977 | + } |
| 978 | + allResults.vars._sources[key].push(r.method.pluginId); |
| 979 | + |
| 980 | + } else if (newValueOverrides) { |
| 981 | + |
| 982 | + // Assign new non object value. |
960 | 983 | allResults.vars[key] = v; |
961 | 984 | allResults.vars._sources[key] = r.method.pluginId; |
962 | 985 | } |
|
0 commit comments