{"version":3,"file":"diffProps.mjs","sources":["../../src/helpers/diffProps.ts"],"sourcesContent":["import { ReactToPixiEventPropNames } from '../constants/EventPropNames';\nimport { type Change } from '../typedefs/Change';\nimport { type HostConfig } from '../typedefs/HostConfig';\nimport { isEqual } from './compare';\nimport { gentleCloneProps } from './gentleCloneProps';\n\nconst DEFAULT = '__default';\n\nexport function diffProps(\n    newProps: HostConfig['props'],\n    oldProps: HostConfig['props'] = {},\n    remove = false,\n)\n{\n    const newPropsRest = gentleCloneProps(newProps);\n    const oldPropsRest = gentleCloneProps(oldProps);\n\n    const entries = Object.entries(newPropsRest);\n\n    const changes: Change[] = [];\n\n    // Catch removed props, prepend them so they can be reset or removed\n    if (remove)\n    {\n        const oldPropsKeys = Object.keys(oldPropsRest);\n\n        let propIndex = 0;\n\n        while (propIndex < oldPropsKeys.length)\n        {\n            const propKey = oldPropsKeys[propIndex];\n            const isPropRemoved = !(propKey in newPropsRest);\n\n            if (isPropRemoved)\n            {\n                entries.unshift([propKey, `${DEFAULT}remove`]);\n            }\n\n            propIndex += 1;\n        }\n    }\n\n    entries.forEach(([key, value]) =>\n    {\n        // When props match bail out\n        if (isEqual(value, oldPropsRest[key]))\n        {\n            return;\n        }\n\n        // Collect handlers and bail out\n        if (key in ReactToPixiEventPropNames)\n        {\n            changes.push([key, value, true, []]);\n\n            return;\n        }\n\n        // Split dashed props\n        let entries: string[] = [];\n\n        if (key.includes('-'))\n        {\n            entries = key.split('-');\n        }\n\n        changes.push([key, value, false, entries]);\n\n        // Reset pierced props\n        for (const prop in newPropsRest)\n        {\n            const value = newPropsRest[prop];\n\n            if (prop.startsWith(`${key}-`))\n            {\n                changes.push([prop, value, false, prop.split('-')]);\n            }\n        }\n    });\n\n    return { changes };\n}\n"],"names":["entries","value"],"mappings":";;;;;AAMA,MAAM,OAAU,GAAA,WAAA;AAET,SAAS,UACZ,QACA,EAAA,QAAA,GAAgC,EAAC,EACjC,SAAS,KAEb,EAAA;AACI,EAAM,MAAA,YAAA,GAAe,iBAAiB,QAAQ,CAAA;AAC9C,EAAM,MAAA,YAAA,GAAe,iBAAiB,QAAQ,CAAA;AAE9C,EAAM,MAAA,OAAA,GAAU,MAAO,CAAA,OAAA,CAAQ,YAAY,CAAA;AAE3C,EAAA,MAAM,UAAoB,EAAC;AAG3B,EAAA,IAAI,MACJ,EAAA;AACI,IAAM,MAAA,YAAA,GAAe,MAAO,CAAA,IAAA,CAAK,YAAY,CAAA;AAE7C,IAAA,IAAI,SAAY,GAAA,CAAA;AAEhB,IAAO,OAAA,SAAA,GAAY,aAAa,MAChC,EAAA;AACI,MAAM,MAAA,OAAA,GAAU,aAAa,SAAS,CAAA;AACtC,MAAM,MAAA,aAAA,GAAgB,EAAE,OAAW,IAAA,YAAA,CAAA;AAEnC,MAAA,IAAI,aACJ,EAAA;AACI,QAAA,OAAA,CAAQ,QAAQ,CAAC,OAAA,EAAS,CAAG,EAAA,OAAO,QAAQ,CAAC,CAAA;AAAA;AAGjD,MAAa,SAAA,IAAA,CAAA;AAAA;AACjB;AAGJ,EAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAC5B,KAAA;AAEI,IAAA,IAAI,OAAQ,CAAA,KAAA,EAAO,YAAa,CAAA,GAAG,CAAC,CACpC,EAAA;AACI,MAAA;AAAA;AAIJ,IAAA,IAAI,OAAO,yBACX,EAAA;AACI,MAAA,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,OAAO,IAAM,EAAA,EAAE,CAAC,CAAA;AAEnC,MAAA;AAAA;AAIJ,IAAA,IAAIA,WAAoB,EAAC;AAEzB,IAAI,IAAA,GAAA,CAAI,QAAS,CAAA,GAAG,CACpB,EAAA;AACI,MAAAA,QAAAA,GAAU,GAAI,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA;AAG3B,IAAA,OAAA,CAAQ,KAAK,CAAC,GAAA,EAAK,KAAO,EAAA,KAAA,EAAOA,QAAO,CAAC,CAAA;AAGzC,IAAA,KAAA,MAAW,QAAQ,YACnB,EAAA;AACI,MAAMC,MAAAA,MAAAA,GAAQ,aAAa,IAAI,CAAA;AAE/B,MAAA,IAAI,IAAK,CAAA,UAAA,CAAW,CAAG,EAAA,GAAG,GAAG,CAC7B,EAAA;AACI,QAAQ,OAAA,CAAA,IAAA,CAAK,CAAC,IAAMA,EAAAA,MAAAA,EAAO,OAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAC,CAAC,CAAA;AAAA;AACtD;AACJ,GACH,CAAA;AAED,EAAA,OAAO,EAAE,OAAQ,EAAA;AACrB;;;;"}