{"version":3,"file":"api.cjs","sources":["../../src/api.ts"],"sourcesContent":["import {createContext} from \"react\";\nimport {API} from \"./types\";\n\nexport const ApiContext = createContext<API>(null!);\n\nexport const dummyApi = {\n    getSearch: () => \"\",\n    replaceState: () => {},\n    pushState: () => {},\n    registerListener: () => {},\n}\n\nexport type BatchingApi = API & {\n    batch: (fn: () => void) => void;\n}\n\ntype ActionDetails = {\n    search: string;\n    state: unknown;\n    type: \"replaceState\" | \"pushState\";\n}\n\nexport const withBatch = (api: API): BatchingApi => {\n    let isBatching = false;\n    let lastActionDetails: ActionDetails | null = null\n    return {\n        ...api,\n        getSearch: () => {\n            if (isBatching && lastActionDetails) {\n                return lastActionDetails.search\n            }\n            return api.getSearch();\n        },\n        replaceState: (search: string, state?: unknown) => {\n            if (isBatching) {\n                lastActionDetails = {\n                    search,\n                    state,\n                    type: \"replaceState\"\n                }\n            } else {\n                api.replaceState(search, state);\n            }\n        },\n        pushState: (search: string, state?: unknown) => {\n            if (isBatching) {\n                lastActionDetails = {\n                    search,\n                    state,\n                    type: \"pushState\"\n                }\n            } else {\n                api.pushState(search, state);\n            }\n        },\n        batch: (fn: () => void) => {\n            isBatching = true;\n            fn();\n            if (lastActionDetails) {\n                api[lastActionDetails.type](lastActionDetails.search, lastActionDetails.state);\n            }\n            isBatching = false;\n        }\n    }\n}\n\nexport const defaultApi = () => {\n    return {\n        getSearch: () => window.location.search,\n        replaceState: (params: string, state?: unknown) => window.history.replaceState(state, \"\", params),\n        pushState: (params: string, state?: unknown) => window.history.pushState(state, \"\", params),\n        registerListener: (listener: (state?: unknown) => void) => {\n            const originalPushState = window.history.pushState;\n            window.history.pushState = (state, ...args) => {\n                originalPushState.apply(window.history, [state, ...args]);\n                listener(state);\n            }\n\n            const orginalReplaceState = window.history.replaceState;\n            window.history.replaceState = (state, ...args) => {\n                orginalReplaceState.apply(window.history, [state, ...args]);\n                listener(state);\n            }\n\n            window.addEventListener(\"popstate\", () => {\n                listener();\n            })\n        }\n    }\n}\n\n"],"names":["createContext"],"mappings":";;;AAGa,MAAA,aAAaA,oBAAmB,IAAK;AAE3C,MAAM,WAAW;AAAA,EACpB,WAAW,MAAM;AAAA,EACjB,cAAc,MAAM;AAAA,EAAC;AAAA,EACrB,WAAW,MAAM;AAAA,EAAC;AAAA,EAClB,kBAAkB,MAAM;AAAA,EAAA;AAC5B;AAYa,MAAA,YAAY,CAAC,QAA0B;AAChD,MAAI,aAAa;AACjB,MAAI,oBAA0C;AACvC,SAAA;AAAA,IACH,GAAG;AAAA,IACH,WAAW,MAAM;AACb,UAAI,cAAc,mBAAmB;AACjC,eAAO,kBAAkB;AAAA,MAAA;AAE7B,aAAO,IAAI,UAAU;AAAA,IACzB;AAAA,IACA,cAAc,CAAC,QAAgB,UAAoB;AAC/C,UAAI,YAAY;AACQ,4BAAA;AAAA,UAChB;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QACV;AAAA,MAAA,OACG;AACC,YAAA,aAAa,QAAQ,KAAK;AAAA,MAAA;AAAA,IAEtC;AAAA,IACA,WAAW,CAAC,QAAgB,UAAoB;AAC5C,UAAI,YAAY;AACQ,4BAAA;AAAA,UAChB;AAAA,UACA;AAAA,UACA,MAAM;AAAA,QACV;AAAA,MAAA,OACG;AACC,YAAA,UAAU,QAAQ,KAAK;AAAA,MAAA;AAAA,IAEnC;AAAA,IACA,OAAO,CAAC,OAAmB;AACV,mBAAA;AACV,SAAA;AACH,UAAI,mBAAmB;AACnB,YAAI,kBAAkB,IAAI,EAAE,kBAAkB,QAAQ,kBAAkB,KAAK;AAAA,MAAA;AAEpE,mBAAA;AAAA,IAAA;AAAA,EAErB;AACJ;AAEO,MAAM,aAAa,MAAM;AACrB,SAAA;AAAA,IACH,WAAW,MAAM,OAAO,SAAS;AAAA,IACjC,cAAc,CAAC,QAAgB,UAAoB,OAAO,QAAQ,aAAa,OAAO,IAAI,MAAM;AAAA,IAChG,WAAW,CAAC,QAAgB,UAAoB,OAAO,QAAQ,UAAU,OAAO,IAAI,MAAM;AAAA,IAC1F,kBAAkB,CAAC,aAAwC;AACjD,YAAA,oBAAoB,OAAO,QAAQ;AACzC,aAAO,QAAQ,YAAY,CAAC,UAAU,SAAS;AAC3C,0BAAkB,MAAM,OAAO,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;AACxD,iBAAS,KAAK;AAAA,MAClB;AAEM,YAAA,sBAAsB,OAAO,QAAQ;AAC3C,aAAO,QAAQ,eAAe,CAAC,UAAU,SAAS;AAC9C,4BAAoB,MAAM,OAAO,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;AAC1D,iBAAS,KAAK;AAAA,MAClB;AAEO,aAAA,iBAAiB,YAAY,MAAM;AAC7B,iBAAA;AAAA,MAAA,CACZ;AAAA,IAAA;AAAA,EAET;AACJ;;;;;"}