(json1, json2)
| 206 | } |
| 207 | |
| 208 | export function applyJsonDiff(json1, json2) { |
| 209 | json1 = JSON.parse(JSON.stringify(json1)); |
| 210 | json2 = JSON.parse(JSON.stringify(json2)); |
| 211 | |
| 212 | // deep copy, needed because of the bug in diff library |
| 213 | const rawDiff = diff(json1, json2); |
| 214 | |
| 215 | const difference = JSON.parse(JSON.stringify(rawDiff || {})); |
| 216 | difference.schemas = difference.schemas || {}; |
| 217 | difference.tables = difference.tables || {}; |
| 218 | difference.enums = difference.enums || {}; |
| 219 | difference.sequences = difference.sequences || {}; |
| 220 | difference.roles = difference.roles || {}; |
| 221 | difference.policies = difference.policies || {}; |
| 222 | difference.views = difference.views || {}; |
| 223 | |
| 224 | // remove added/deleted schemas |
| 225 | const schemaKeys = Object.keys(difference.schemas); |
| 226 | for (let key of schemaKeys) { |
| 227 | if (key.endsWith('__added') || key.endsWith('__deleted')) { |
| 228 | delete difference.schemas[key]; |
| 229 | continue; |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | // remove added/deleted tables |
| 234 | const tableKeys = Object.keys(difference.tables); |
| 235 | for (let key of tableKeys) { |
| 236 | if (key.endsWith('__added') || key.endsWith('__deleted')) { |
| 237 | delete difference.tables[key]; |
| 238 | continue; |
| 239 | } |
| 240 | |
| 241 | // supply table name and schema for altered tables |
| 242 | const table = json1.tables[key]; |
| 243 | difference.tables[key] = { |
| 244 | name: table.name, |
| 245 | schema: table.schema, |
| 246 | ...difference.tables[key], |
| 247 | }; |
| 248 | } |
| 249 | |
| 250 | for (let [tableKey, tableValue] of Object.entries(difference.tables)) { |
| 251 | const table = difference.tables[tableKey]; |
| 252 | const columns = tableValue.columns || {}; |
| 253 | const columnKeys = Object.keys(columns); |
| 254 | for (let key of columnKeys) { |
| 255 | if (key.endsWith('__added') || key.endsWith('__deleted')) { |
| 256 | delete table.columns[key]; |
| 257 | continue; |
| 258 | } |
| 259 | } |
| 260 | |
| 261 | if (Object.keys(columns).length === 0) { |
| 262 | delete table['columns']; |
| 263 | } |
| 264 | |
| 265 | if ( |
no test coverage detected