@zappie/sdk 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +79 -2
- package/dist/cart/item.d.ts +10 -0
- package/dist/cart/item.js +1 -0
- package/dist/cart/item.js.map +1 -0
- package/dist/cart/quote.d.ts +15 -0
- package/dist/cart/quote.js +1 -0
- package/dist/cart/quote.js.map +1 -0
- package/dist/checkout/index.d.ts +141 -0
- package/dist/checkout/index.js +1 -0
- package/dist/checkout/index.js.map +1 -0
- package/dist/chunk-I55A5QXJ.js +2 -0
- package/dist/chunk-I55A5QXJ.js.map +1 -0
- package/dist/chunk-LFBQICYU.js +2 -0
- package/dist/chunk-LFBQICYU.js.map +1 -0
- package/dist/client-BctSrEhO.d.ts +725 -0
- package/dist/config/index.d.ts +83 -0
- package/dist/config/index.js +1 -0
- package/dist/customer/index.d.ts +175 -0
- package/dist/customer/index.js +3 -0
- package/dist/customer/index.js.map +1 -0
- package/dist/customer/react.d.ts +31 -0
- package/dist/customer/react.js +3 -0
- package/dist/customer/react.js.map +1 -0
- package/dist/debug.d.ts +45 -0
- package/dist/debug.js +1 -0
- package/dist/debug.js.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +14 -0
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -0
- package/dist/models-Dj-VkdU1.d.ts +230 -0
- package/dist/persist/catalogue.d.ts +2 -0
- package/dist/persist/catalogue.js +2 -0
- package/dist/persist/catalogue.js.map +1 -0
- package/dist/places/index.d.ts +121 -0
- package/dist/places/index.js +1 -0
- package/dist/places/index.js.map +1 -0
- package/dist/react/index.d.ts +79 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/server/index.d.ts +235 -0
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -0
- package/dist/template/index.d.ts +16 -0
- package/dist/template/index.js +3 -0
- package/dist/template/index.js.map +1 -0
- package/dist/template/react.d.ts +13 -0
- package/dist/template/react.js +3 -0
- package/dist/template/react.js.map +1 -0
- package/dist/testing/index.d.ts +64 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/transport/category-page.d.ts +17 -0
- package/dist/transport/category-page.js +2 -0
- package/dist/transport/category-page.js.map +1 -0
- package/dist/transport/search.d.ts +7 -0
- package/dist/transport/search.js +2 -0
- package/dist/transport/search.js.map +1 -0
- package/dist/transport/selected-menu.d.ts +2 -0
- package/dist/transport/selected-menu.js +2 -0
- package/dist/transport/selected-menu.js.map +1 -0
- package/dist/transport/store.d.ts +10 -0
- package/dist/transport/store.js +2 -0
- package/dist/transport/store.js.map +1 -0
- package/dist/url/index.d.ts +157 -0
- package/dist/url/index.js +2 -0
- package/dist/url/index.js.map +1 -0
- package/dist/visits/index.d.ts +89 -0
- package/dist/visits/index.js +1 -0
- package/dist/visits/index.js.map +1 -0
- package/package.json +105 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/testing/index.ts"],"names":["createMockZappie","input","opts","fixtures","before","method","ctx","throwIfAborted","delay","code","ZappieError","menu","id","value","transport","body","branch","b","issues","lines","line","item","c","invalid","validateLine","i","price","estimateUnitPrice","money","multiplyMoney","subtotal","n","issue","createZappie","fulfilment","store","ngn","amountMinor","templateStore","day","templateMenu"],"mappings":"qIAoBO,SAASA,CAAAA,CAAiBC,CAAAA,CAAqBC,CAAAA,CAAoB,GAAI,CAC5E,IAAMC,CAAAA,CAAW,eAAA,CAAgBF,CAAK,CAAA,CAChCG,CAAAA,CAAS,MAAOC,GAAAA,CAAyBC,IAAoB,CACjEC,CAAAA,CAAeD,CAAAA,CAAI,MAAM,CAAA,CACrBJ,CAAAA,CAAK,SAAA,EACP,MAAMM,EAAMN,CAAAA,CAAK,SAAA,CAAWI,CAAAA,CAAI,MAAM,EAExC,IAAMG,CAAAA,CAAOP,CAAAA,CAAK,QAAA,GAAWG,GAAM,CAAA,CACnC,GAAII,CAAAA,CACF,MAAM,IAAIC,CAAAA,CAAYD,CAAAA,CAAM,CAAA,KAAA,EAAQJ,GAAM,CAAA,QAAA,CAAU,CAExD,CAAA,CACMM,GAAAA,CAAQC,GAAe,CAC3B,IAAMC,CAAAA,CAAQV,CAAAA,CAAS,MAAMS,CAAE,CAAA,CAC/B,GAAI,CAACC,EACH,MAAM,IAAIH,CAAAA,CAAY,kBAAA,CAAoB,4BAA4B,CAAA,CAExE,OAAO,eAAA,CAAgBG,CAAK,CAC9B,CAAA,CACMC,CAAAA,CAAuB,CAC3B,MAAM,MAAMR,CAAAA,CAAKS,GAAAA,CAA0B,CACzC,MAAMX,CAAAA,CAAO,OAAA,CAASE,CAAG,CAAA,CACzB,IAAMO,CAAAA,CAAQF,GAAAA,CAAKI,GAAAA,CAAK,SAAS,EAC3BC,CAAAA,CAASb,CAAAA,CAAS,KAAA,CAAM,QAAA,CAAS,KACpCc,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAOF,GAAAA,CAAK,SACvB,CAAA,CACMG,CAAAA,CAA8B,EAAC,CAC/BC,EAAQJ,GAAAA,CAAK,KAAA,CAAM,GAAA,CAAKK,CAAAA,EAAS,CACrC,IAAMC,CAAAA,CAAOR,CAAAA,CAAM,KAAA,CAAMO,EAAK,OAAO,CAAA,CAC/BnB,GAAAA,CAAQ,CACZ,MAAA,CAAQmB,CAAAA,CAAK,OAAA,CACb,GAAIA,EAAK,OAAA,GAAY,MAAA,CAAY,CAAE,MAAA,CAAQA,EAAK,OAAQ,CAAA,CAAI,EAAC,CAC7D,SAAUA,CAAAA,CAAK,QAAA,CACf,OAAA,CAASA,CAAAA,CAAK,QAAQ,GAAA,CAAKE,CAAAA,GAAO,CAChC,OAAA,CAASA,EAAE,QAAA,CACX,QAAA,CAAUA,CAAAA,CAAE,SAAA,CACZ,SAAUA,CAAAA,CAAE,QACd,CAAA,CAAE,CAAA,CACF,OAAQF,CAAAA,CAAK,MAAA,CACb,GAAIA,CAAAA,CAAK,UAAA,CAAa,CAAE,SAAA,CAAWA,CAAAA,CAAK,UAAW,CAAA,CAAI,EACzD,CAAA,CACMG,EAAUC,CAAAA,CAAaH,CAAAA,CAAMpB,GAAAA,CAAO,CAAE,KAAMY,CAAAA,CAAO,MAAA,CAAAG,CAAO,CAAC,EACjEE,CAAAA,CAAO,IAAA,CACL,GAAGK,CAAAA,CAAQ,IAAKE,CAAAA,GAAO,CACrB,IAAA,CAAMA,CAAAA,CAAE,KACR,QAAA,CAAUA,CAAAA,CAAE,QAAA,CACZ,OAAA,CAASA,EAAE,OAAA,CACX,OAAA,CAASL,CAAAA,CAAK,OAAA,CACd,GAAIK,CAAAA,CAAE,OAAA,CAAU,CAAE,SAAUA,CAAAA,CAAE,OAAQ,CAAA,CAAI,GAC1C,KAAA,CAAO,EACT,CAAA,CAAE,CACJ,CAAA,CACA,IAAMC,GAAAA,CACJL,CAAAA,EAAQ,CAACE,CAAAA,CAAQ,MAAA,CACbI,CAAAA,CAAkBN,CAAAA,CAAMpB,GAAK,CAAA,CAC7B2B,CAAAA,CAAM,CAAA,CAAGzB,CAAAA,CAAS,MAAM,QAAQ,CAAA,CACtC,OAAO,CACL,QAASiB,CAAAA,CAAK,OAAA,CACd,UAAA,CAAY,CACV,YAAA,CAAcM,GAAAA,CAAM,WAAA,CACpB,QAAA,CAAUA,IAAM,QAClB,CAAA,CACA,UAAA,CAAY,CACV,aAAcG,CAAAA,CAAcH,GAAAA,CAAON,CAAAA,CAAK,QAAQ,EAAE,WAAA,CAClD,QAAA,CAAUM,GAAAA,CAAM,QAClB,CACF,CACF,CAAC,CAAA,CACKI,GAAAA,CAAW,CACf,YAAA,CAAcX,CAAAA,CAAM,MAAA,CAAO,CAACY,EAAG,CAAA,GAAMA,CAAAA,CAAI,CAAA,CAAE,UAAA,CAAW,aAAc,CAAC,CAAA,CACrE,QAAA,CAAU5B,CAAAA,CAAS,KAAA,CAAM,QAC3B,CAAA,CACA,OAAO,CACL,SAAA,CAAWY,GAAAA,CAAK,SAAA,CAChB,KAAA,CAAAI,EACA,QAAA,CAAAW,GAAAA,CACA,KAAA,CAAOA,GAAAA,CACP,QAAS,EAAC,CACV,SAAA,CAAW,GACX,MAAA,CAAAZ,CAAAA,CACA,YAAA,CAAc,CAACA,EAAO,IAAA,CAAMc,CAAAA,EAAUA,CAAAA,CAAM,QAAA,GAAa,UAAU,CAAA,CACnE,QAAA,CAAUd,CAAAA,CAAO,IAAA,CAAMc,GAAUA,CAAAA,CAAM,QAAA,GAAa,UAAU,CAAA,CAC1D,CAAE,KAAA,CAAO,KAAA,CAAO,MAAA,CAAQ,QAAS,CAAA,CACjC,CAAE,KAAA,CAAO,IAAK,EAClB,YAAA,CAAcnB,CAAAA,CAAM,OAAA,CACpB,UAAA,CAAY,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,EAAI,CAAI,GAAO,CAAA,CAAE,WAAA,EAC7C,CACF,CAAA,CACA,MAAM,QAAA,CAASP,CAAAA,CAAK,CAClB,OAAA,MAAMF,CAAAA,CAAO,UAAA,CAAYE,CAAG,EACrB,eAAA,CAAgBH,CAAAA,CAAS,KAAK,CACvC,CAAA,CACA,MAAM,OAAA,CAAQG,CAAAA,CAAK,CACjB,MAAMF,CAAAA,CAAO,SAAA,CAAWE,CAAG,EAC3B,IAAMO,CAAAA,CAAQF,GAAAA,CAAKL,CAAAA,CAAI,QAAQ,CAAA,CAC/B,OAAOA,CAAAA,CAAI,WAAA,GAAgBO,EAAM,OAAA,CAC7B,CAAE,WAAA,CAAa,IAAK,EACpB,CAAE,IAAA,CAAMA,CAAAA,CAAO,IAAA,CAAMA,EAAM,OAAQ,CACzC,CAAA,CACA,MAAM,eAAeP,CAAAA,CAAK,CACxB,MAAMF,CAAAA,CAAO,gBAAA,CAAkBE,CAAG,CAAA,CAClC,IAAMO,EAAQF,GAAAA,CAAKL,CAAAA,CAAI,QAAQ,CAAA,CAC/B,OAAO,CAAE,OAAA,CAASO,CAAAA,CAAM,OAAA,CAAS,iBAAkBA,CAAAA,CAAM,OAAQ,CACnE,CAAA,CACA,MAAM,OAAA,CAAQP,CAAAA,CAAK,CACjB,MAAMF,EAAO,SAAA,CAAWE,CAAG,CAAA,CAC3B,IAAMO,EAAQF,GAAAA,CAAKL,CAAAA,CAAI,QAAQ,CAAA,CAAE,MAAMA,CAAAA,CAAI,MAAM,CAAA,CACjD,GAAI,CAACO,CAAAA,CACH,MAAM,IAAIH,EAAY,gBAAA,CAAkB,gBAAgB,CAAA,CAE1D,OAAOG,CACT,CACF,CAAA,CACA,OAAOoB,CAAAA,CAAa,CAClB,KAAA,CAAO9B,CAAAA,CAAS,KAAA,CAAM,IAAA,CACtB,IAAK,iBAAA,CACL,SAAA,CAAAW,CACF,CAAC,CACH,CACA,IAAMoB,CAAAA,CAAa,CACjB,OAAQ,IAAA,CACR,QAAA,CAAU,IAAA,CACV,MAAA,CAAQ,MACR,UAAA,CAAY,KACd,CAAA,CACMC,CAAAA,CAAe,CACnB,EAAA,CAAI,aAAA,CACJ,IAAA,CAAM,gBACN,IAAA,CAAM,oBAAA,CACN,QAAA,CAAU,KAAA,CACV,SAAU,cAAA,CACV,KAAA,CAAO,EAAC,CACR,WAAAD,CAAAA,CACA,cAAA,CAAgB,CAAC,MAAM,EACvB,QAAA,CAAU,CACR,CACE,EAAA,CAAI,aACJ,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,MAAA,CACN,aAAc,CAAC,CAAE,GAAA,CAAK,CAAA,CAAG,MAAO,OAAA,CAAS,MAAA,CAAQ,OAAQ,CAAC,CAAA,CAC1D,MAAA,CAAQ,IAAA,CACR,UAAA,CAAAA,CACF,CACF,CACF,CAAA,CACMvB,CAAAA,CAAa,CACjB,EAAA,CAAI,cAAA,CACJ,QAAA,CAAU,YAAA,CACV,KAAM,MAAA,CACN,OAAA,CAAS,YAAA,CACT,UAAA,CAAY,CAAC,CAAE,EAAA,CAAI,aAAA,CAAe,IAAA,CAAM,OAAQ,OAAA,CAAS,CAAC,cAAc,CAAE,CAAC,CAAA,CAC3E,KAAA,CAAO,CACL,YAAA,CAAc,CACZ,EAAA,CAAI,cAAA,CACJ,IAAA,CAAM,OAAA,CACN,MAAA,CAAQ,EAAC,CACT,KAAA,CAAOiB,EAAM,IAAA,CAAQ,KAAK,CAAA,CAC1B,WAAA,CAAa,KACb,QAAA,CAAU,CAAE,GAAA,CAAK,CAAA,CAAG,KAAM,CAAE,CAAA,CAC5B,QAAA,CAAU,CACR,CACE,EAAA,CAAI,iBAAA,CACJ,gBAAA,CAAkB,GAClB,KAAA,CAAOA,CAAAA,CAAM,IAAA,CAAQ,KAAK,EAC1B,WAAA,CAAa,IACf,CACF,CAAA,CACA,aAAc,EAAC,CACf,IAAA,CAAM,EACR,CACF,CACF,CAAA,CACMQ,EAAOC,CAAAA,EAAwBT,CAAAA,CAAMS,CAAAA,CAAa,KAAK,EACvDC,CAAAA,CAAuB,CAC3B,EAAA,CAAI,cAAA,CACJ,KAAM,kBAAA,CACN,IAAA,CAAM,kBAAA,CACN,WAAA,CAAa,oDACb,gBAAA,CAAkB,CAChB,MAAA,CAAQ,SAAA,CACR,YAAa,gDACf,CAAA,CACA,QAAA,CAAU,KAAA,CACV,SAAU,cAAA,CACV,KAAA,CAAO,CACL,OAAA,CAAS,gDACT,aAAA,CAAe,gDACjB,CAAA,CACA,UAAA,CAAY,CAAE,MAAA,CAAQ,IAAA,CAAM,QAAA,CAAU,KAAM,MAAA,CAAQ,IAAA,CAAM,UAAA,CAAY,IAAK,EAC3E,cAAA,CAAgB,CAAC,MAAA,CAAQ,eAAA,CAAiB,QAAQ,CAAA,CAClD,QAAA,CAAU,CACR,CACE,EAAA,CAAI,kBAAA,CACJ,IAAA,CAAM,MAAA,CACN,KAAM,MAAA,CACN,QAAA,CAAU,cAAA,CACV,OAAA,CAAS,0BACT,KAAA,CAAO,mBAAA,CACP,aAAA,CAAe,CACb,QAAS,qBAAA,CACT,WAAA,CAAa,CAAE,GAAA,CAAK,MAAA,CAAQ,GAAA,CAAK,MAAO,CAC1C,EACA,WAAA,CAAa,CACX,CAAE,IAAA,CAAM,YAAa,GAAA,CAAK,wCAAyC,CAAA,CACnE,CAAE,KAAM,SAAA,CAAW,GAAA,CAAK,qBAAsB,CAChD,EACA,YAAA,CAAc,CAAC,CAAA,CAAG,CAAA,CAAG,EAAG,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAKC,IAAS,CAC1C,GAAA,CAAKA,CAAAA,CACL,KAAA,CAAO,QACP,MAAA,CAAQ,OACV,CAAA,CAAE,CAAA,CACF,MAAA,CAAQ,IAAA,CACR,SAAA,CAAW,IAAA,CACX,WAAY,CACV,MAAA,CAAQ,IAAA,CACR,QAAA,CAAU,KACV,MAAA,CAAQ,IAAA,CACR,UAAA,CAAY,IACd,EACA,YAAA,CAAcH,CAAAA,CAAI,GAAM,CAC1B,EACA,CACE,EAAA,CAAI,oBAAA,CACJ,IAAA,CAAM,SACN,IAAA,CAAM,QAAA,CACN,QAAA,CAAU,cAAA,CACV,aAAc,CAAC,CAAE,GAAA,CAAK,CAAA,CAAG,MAAO,OAAA,CAAS,MAAA,CAAQ,OAAQ,CAAC,CAAA,CAC1D,YAAA,CAAc,CAAC,CAAE,KAAM,YAAA,CAAc,MAAA,CAAQ,IAAK,CAAC,EACnD,MAAA,CAAQ,KAAA,CACR,WAAA,CAAa,2BAAA,CACb,WAAY,CACV,MAAA,CAAQ,KAAA,CACR,QAAA,CAAU,KACV,MAAA,CAAQ,KAAA,CACR,UAAA,CAAY,KACd,CACF,CACF,CACF,CAAA,CACMI,CAAAA,CAAqB,CACzB,EAAA,CAAI,eAAA,CACJ,QAAA,CAAU,kBAAA,CACV,KAAM,SAAA,CACN,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,CACV,CACE,EAAA,CAAI,aAAA,CACJ,KAAM,SAAA,CACN,OAAA,CAAS,CAAC,aAAA,CAAe,WAAW,CACtC,CAAA,CACA,CAAE,EAAA,CAAI,YAAa,IAAA,CAAM,OAAA,CAAS,OAAA,CAAS,CAAC,aAAa,CAAE,CAAA,CAC3D,CACE,EAAA,CAAI,aACJ,IAAA,CAAM,qBAAA,CACN,OAAA,CAAS,CAAC,YAAa,WAAW,CACpC,CACF,CAAA,CACA,MAAO,CACL,WAAA,CAAa,CACX,EAAA,CAAI,aAAA,CACJ,IAAA,CAAM,aAAA,CACN,WAAA,CAAa,sBACb,MAAA,CAAQ,EAAC,CACT,KAAA,CAAOJ,EAAI,IAAM,CAAA,CACjB,WAAA,CAAa,IAAA,CACb,SAAU,CAAE,GAAA,CAAK,CAAA,CAAG,GAAA,CAAK,GAAI,IAAA,CAAM,CAAE,CAAA,CACrC,QAAA,CAAU,CACR,CACE,EAAA,CAAI,gBAAA,CACJ,gBAAA,CAAkB,EAAC,CACnB,KAAA,CAAOA,CAAAA,CAAI,IAAM,EACjB,WAAA,CAAa,IACf,CACF,CAAA,CACA,YAAA,CAAc,CACZ,CACE,EAAA,CAAI,cACJ,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,QAAA,CACN,SAAU,IAAA,CACV,SAAA,CAAW,CAAE,GAAA,CAAK,EAAG,GAAA,CAAK,CAAE,CAAA,CAC5B,WAAA,CAAa,MACb,OAAA,CAAS,CACP,CACE,EAAA,CAAI,cACJ,IAAA,CAAM,SAAA,CACN,KAAA,CAAOA,CAAAA,CAAI,CAAC,CAAA,CACZ,WAAA,CAAa,IACf,CAAA,CACA,CACE,EAAA,CAAI,UAAA,CACJ,IAAA,CAAM,MAAA,CACN,KAAA,CAAOA,CAAAA,CAAI,GAAK,CAAA,CAChB,YAAa,IACf,CAAA,CACA,CACE,EAAA,CAAI,WACJ,IAAA,CAAM,MAAA,CACN,KAAA,CAAOA,CAAAA,CAAI,GAAK,CAAA,CAChB,WAAA,CAAa,KACf,CACF,CACF,CAAA,CACA,CACE,EAAA,CAAI,WAAA,CACJ,KAAM,OAAA,CACN,QAAA,CAAU,wBAAA,CACV,IAAA,CAAM,SACN,QAAA,CAAU,KAAA,CACV,SAAA,CAAW,CAAE,IAAK,CAAA,CAAG,GAAA,CAAK,CAAE,CAAA,CAC5B,WAAA,CAAa,KAAA,CACb,OAAA,CAAS,CACP,CACE,EAAA,CAAI,YAAA,CACJ,IAAA,CAAM,cAAA,CACN,MAAOA,CAAAA,CAAI,CAAC,CAAA,CACZ,WAAA,CAAa,IACf,CAAA,CACA,CACE,EAAA,CAAI,UAAA,CACJ,IAAA,CAAM,MAAA,CACN,KAAA,CAAOA,CAAAA,CAAI,GAAK,CAAA,CAChB,WAAA,CAAa,IACf,CACF,EACA,UAAA,CAAY,CACV,CACE,OAAA,CAAS,cACT,SAAA,CAAW,CAAC,aAAa,CAAA,CACzB,KAAA,CAAO,KAAA,CACP,WAAA,CAAa,IAAA,CACb,OAAQ,CACV,CACF,CACF,CAAA,CACA,CACE,EAAA,CAAI,YAAA,CACJ,IAAA,CAAM,QAAA,CACN,KAAM,QAAA,CACN,QAAA,CAAU,KAAA,CACV,SAAA,CAAW,CAAE,GAAA,CAAK,CAAA,CAAG,GAAA,CAAK,CAAE,EAC5B,WAAA,CAAa,KAAA,CACb,OAAA,CAAS,CACP,CACE,EAAA,CAAI,cAAA,CACJ,IAAA,CAAM,UAAA,CACN,MAAOA,CAAAA,CAAI,GAAK,CAAA,CAChB,WAAA,CAAa,IAAA,CACb,QAAA,CAAU,CAAE,GAAA,CAAK,EAAG,GAAA,CAAK,CAAE,CAC7B,CAAA,CACA,CACE,EAAA,CAAI,SAAA,CACJ,IAAA,CAAM,YAAA,CACN,MAAOA,CAAAA,CAAI,IAAK,CAAA,CAChB,WAAA,CAAa,IACf,CACF,CACF,CAAA,CACA,CACE,GAAI,UAAA,CACJ,IAAA,CAAM,sBAAA,CACN,IAAA,CAAM,OACN,QAAA,CAAU,KAAA,CACV,SAAA,CAAW,CAAE,IAAK,CAAE,CAAA,CACpB,WAAA,CAAa,KAAA,CACb,OAAA,CAAS,EAAC,CACV,KAAA,CAAO,CAAE,SAAA,CAAW,GAAA,CAAK,WAAA,CAAa,mBAAoB,CAC5D,CACF,CAAA,CACA,IAAA,CAAM,CAAC,SAAS,CAClB,CAAA,CACA,SAAA,CAAW,CACT,GAAI,WAAA,CACJ,IAAA,CAAM,MAAA,CACN,MAAA,CAAQ,EAAC,CACT,KAAA,CAAOA,CAAAA,CAAI,IAAM,EACjB,WAAA,CAAa,IAAA,CACb,QAAA,CAAU,CAAE,IAAK,CAAA,CAAG,IAAA,CAAM,CAAE,CAAA,CAC5B,QAAA,CAAU,CACR,CACE,EAAA,CAAI,qBACJ,gBAAA,CAAkB,CAAE,QAAA,CAAU,WAAY,EAC1C,KAAA,CAAOA,CAAAA,CAAI,IAAM,CAAA,CACjB,YAAa,IACf,CAAA,CACA,CACE,EAAA,CAAI,qBACJ,gBAAA,CAAkB,CAAE,QAAA,CAAU,WAAY,EAC1C,KAAA,CAAOA,CAAAA,CAAI,GAAM,CAAA,CACjB,YAAa,KACf,CACF,CAAA,CACA,YAAA,CAAc,CACZ,CACE,EAAA,CAAI,UAAA,CACJ,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,QAAA,CACN,QAAA,CAAU,KACV,SAAA,CAAW,CAAE,GAAA,CAAK,CAAA,CAAG,IAAK,CAAE,CAAA,CAC5B,WAAA,CAAa,IAAA,CACb,QAAS,CACP,CACE,EAAA,CAAI,WAAA,CACJ,KAAM,OAAA,CACN,KAAA,CAAOA,CAAAA,CAAI,CAAC,EACZ,WAAA,CAAa,IACf,CAAA,CACA,CACE,GAAI,WAAA,CACJ,IAAA,CAAM,OAAA,CACN,KAAA,CAAOA,EAAI,CAAC,CAAA,CACZ,WAAA,CAAa,KACf,CACF,CACF,CACF,CAAA,CACA,KAAM,EACR,CAAA,CACA,SAAA,CAAW,CACT,EAAA,CAAI,WAAA,CACJ,IAAA,CAAM,gBAAA,CACN,OAAQ,EAAC,CACT,KAAA,CAAOA,CAAAA,CAAI,IAAM,CAAA,CACjB,cAAA,CAAgBA,CAAAA,CAAI,GAAM,EAC1B,WAAA,CAAa,KAAA,CACb,QAAA,CAAU,CAAE,IAAK,CAAA,CAAG,IAAA,CAAM,CAAE,CAAA,CAC5B,SAAU,CACR,CACE,EAAA,CAAI,cAAA,CACJ,gBAAA,CAAkB,EAAC,CACnB,KAAA,CAAOA,EAAI,IAAM,CAAA,CACjB,WAAA,CAAa,KACf,CACF,CAAA,CACA,YAAA,CAAc,EAAC,CACf,KAAM,EACR,CACF,CACF,EAMajC,CAAAA,CAAW,CACtB,OAAA,CAAS,CAAE,MAAAgC,CAAAA,CAAO,IAAA,CAAAxB,CAAK,CAAA,CACvB,gBAAiB,CAAE,KAAA,CAAO2B,CAAAA,CAAe,IAAA,CAAME,CAAa,CAC9D","file":"index.js","sourcesContent":["import { estimateUnitPrice } from \"../cart/price\";\nimport type { WireQuote } from \"../cart/types\";\nimport { validateLine } from \"../cart/validate\";\nimport { createZappie } from \"../client\";\nimport type { ZappieErrorCode } from \"../errors\";\nimport { ZappieError } from \"../errors\";\nimport { delay, throwIfAborted } from \"../internal/abort\";\nimport { multiplyMoney } from \"../internal/money-math\";\nimport type { Menu, Store } from \"../models\";\nimport { money } from \"../money\";\nimport type { RequestCtx, Transport } from \"../transport/types\";\nexport { VERSION } from \"../index\";\n/** Store and branch menus supplied to the deterministic mock transport. */\nexport type MockFixtures = { store: Store; menus: Record<string, Menu> };\n/** Mock timing and per-operation failures. */\nexport type MockOptions = {\n latencyMs?: number;\n failWith?: Partial<Record<keyof Transport, ZappieErrorCode>>;\n};\n/** Create an isolated in-memory SDK client without making network requests. */\nexport function createMockZappie(input: MockFixtures, opts: MockOptions = {}) {\n const fixtures = structuredClone(input);\n const before = async (method: keyof Transport, ctx: RequestCtx) => {\n throwIfAborted(ctx.signal);\n if (opts.latencyMs) {\n await delay(opts.latencyMs, ctx.signal);\n }\n const code = opts.failWith?.[method];\n if (code) {\n throw new ZappieError(code, `Mock ${method} failure`);\n }\n };\n const menu = (id: string) => {\n const value = fixtures.menus[id];\n if (!value) {\n throw new ZappieError(\"branch_not_found\", \"No fixture for this branch\");\n }\n return structuredClone(value);\n };\n const transport: Transport = {\n async quote(ctx, body): Promise<WireQuote> {\n await before(\"quote\", ctx);\n const value = menu(body.branch_id);\n const branch = fixtures.store.branches.find(\n (b) => b.id === body.branch_id,\n )!;\n const issues: WireQuote[\"issues\"] = [];\n const lines = body.lines.map((line) => {\n const item = value.items[line.item_id];\n const input = {\n itemId: line.item_id,\n ...(line.menu_id !== undefined ? { menuId: line.menu_id } : {}),\n quantity: line.quantity,\n choices: line.options.map((c) => ({\n groupId: c.group_id,\n choiceId: c.choice_id,\n quantity: c.quantity,\n })),\n inputs: line.inputs,\n ...(line.variant_id ? { variantId: line.variant_id } : {}),\n };\n const invalid = validateLine(item, input, { menu: value, branch });\n issues.push(\n ...invalid.map((i) => ({\n code: i.code,\n severity: i.severity,\n message: i.message,\n line_id: line.line_id,\n ...(i.groupId ? { group_id: i.groupId } : {}),\n fixes: [],\n })),\n );\n const price =\n item && !invalid.length\n ? estimateUnitPrice(item, input)\n : money(0, fixtures.store.currency);\n return {\n line_id: line.line_id,\n unit_price: {\n amount_minor: price.amountMinor,\n currency: price.currency,\n },\n line_total: {\n amount_minor: multiplyMoney(price, line.quantity).amountMinor,\n currency: price.currency,\n },\n };\n });\n const subtotal = {\n amount_minor: lines.reduce((n, l) => n + l.line_total.amount_minor, 0),\n currency: fixtures.store.currency,\n };\n return {\n branch_id: body.branch_id,\n lines,\n subtotal,\n total: subtotal,\n charges: [],\n discounts: [],\n issues,\n can_checkout: !issues.some((issue) => issue.severity === \"blocking\"),\n checkout: issues.some((issue) => issue.severity === \"blocking\")\n ? { ready: false, reason: \"issues\" }\n : { ready: true },\n menu_version: value.version,\n expires_at: new Date(Date.now() + 300_000).toISOString(),\n };\n },\n async getStore(ctx) {\n await before(\"getStore\", ctx);\n return structuredClone(fixtures.store);\n },\n async getMenu(ctx) {\n await before(\"getMenu\", ctx);\n const value = menu(ctx.branchId);\n return ctx.ifNoneMatch === value.version\n ? { notModified: true }\n : { menu: value, etag: value.version };\n },\n async getMenuVersion(ctx) {\n await before(\"getMenuVersion\", ctx);\n const value = menu(ctx.branchId);\n return { version: value.version, availabilityHash: value.version };\n },\n async getItem(ctx) {\n await before(\"getItem\", ctx);\n const value = menu(ctx.branchId).items[ctx.itemId];\n if (!value) {\n throw new ZappieError(\"item_not_found\", \"Item not found\");\n }\n return value;\n },\n };\n return createZappie({\n store: fixtures.store.slug,\n key: \"pk_test_fixture\",\n transport,\n });\n}\nconst fulfilment = {\n pickup: true,\n delivery: true,\n dineIn: false,\n scheduling: false,\n};\nconst store: Store = {\n id: \"biz_fixture\",\n slug: \"default-store\",\n name: \"Default storefront\",\n currency: \"NGN\",\n timezone: \"Africa/Lagos\",\n brand: {},\n fulfilment,\n paymentMethods: [\"card\"],\n branches: [\n {\n id: \"br_fixture\",\n slug: \"main\",\n name: \"Main\",\n openingTimes: [{ day: 1, opens: \"08:00\", closes: \"22:00\" }],\n isOpen: true,\n fulfilment,\n },\n ],\n};\nconst menu: Menu = {\n id: \"menu_fixture\",\n branchId: \"br_fixture\",\n name: \"Menu\",\n version: \"fixture-v1\",\n categories: [{ id: \"cat_fixture\", name: \"Food\", itemIds: [\"item_fixture\"] }],\n items: {\n item_fixture: {\n id: \"item_fixture\",\n name: \"Lunch\",\n images: [],\n price: money(650000, \"NGN\"),\n isAvailable: true,\n quantity: { min: 1, step: 1 },\n variants: [\n {\n id: \"variant_fixture\",\n attributeChoices: {},\n price: money(650000, \"NGN\"),\n isAvailable: true,\n },\n ],\n optionGroups: [],\n tags: [],\n },\n },\n};\nconst ngn = (amountMinor: number) => money(amountMinor, \"NGN\");\nconst templateStore: Store = {\n id: \"biz_template\",\n slug: \"default-template\",\n name: \"Default template\",\n description: \"A public storefront fixture for template authors.\",\n templateSettings: {\n accent: \"#175c3a\",\n headerPhoto: \"https://example.com/default-template-cover.png\",\n },\n currency: \"NGN\",\n timezone: \"Africa/Lagos\",\n brand: {\n logoUrl: \"https://example.com/default-template-logo.png\",\n coverImageUrl: \"https://example.com/default-template-cover.png\",\n },\n fulfilment: { pickup: true, delivery: true, dineIn: true, scheduling: true },\n paymentMethods: [\"card\", \"bank_transfer\", \"wallet\"],\n branches: [\n {\n id: \"br_template_main\",\n slug: \"main\",\n name: \"Main\",\n timezone: \"Africa/Lagos\",\n address: \"1 Example Street, Lagos\",\n phone: \"+234 800 000 0000\",\n pickupAddress: {\n placeId: \"place_template_main\",\n coordinates: { lat: 6.5244, lng: 3.3792 },\n },\n socialLinks: [\n { type: \"INSTAGRAM\", url: \"https://instagram.com/default-template\" },\n { type: \"WEBSITE\", url: \"https://example.com\" },\n ],\n openingTimes: [1, 2, 3, 4, 5].map((day) => ({\n day: day as 1 | 2 | 3 | 4 | 5,\n opens: \"08:00\",\n closes: \"22:00\",\n })),\n isOpen: true,\n isDefault: true,\n fulfilment: {\n pickup: true,\n delivery: true,\n dineIn: true,\n scheduling: true,\n },\n minimumOrder: ngn(200000),\n },\n {\n id: \"br_template_island\",\n slug: \"island\",\n name: \"Island\",\n timezone: \"Africa/Lagos\",\n openingTimes: [{ day: 6, opens: \"10:00\", closes: \"18:00\" }],\n specialHours: [{ date: \"2026-12-25\", closed: true }],\n isOpen: false,\n closedUntil: \"2026-12-26T10:00:00+01:00\",\n fulfilment: {\n pickup: false,\n delivery: true,\n dineIn: false,\n scheduling: false,\n },\n },\n ],\n};\nconst templateMenu: Menu = {\n id: \"menu_template\",\n branchId: \"br_template_main\",\n name: \"All day\",\n version: \"template-v1\",\n categories: [\n {\n id: \"cat_popular\",\n name: \"Popular\",\n itemIds: [\"item_jollof\", \"item_zobo\"],\n },\n { id: \"cat_mains\", name: \"Mains\", itemIds: [\"item_jollof\"] },\n {\n id: \"cat_drinks\",\n name: \"Drinks and desserts\",\n itemIds: [\"item_zobo\", \"item_cake\"],\n },\n ],\n items: {\n item_jollof: {\n id: \"item_jollof\",\n name: \"Jollof rice\",\n description: \"Smoky party jollof.\",\n images: [],\n price: ngn(450000),\n isAvailable: true,\n quantity: { min: 1, max: 10, step: 1 },\n variants: [\n {\n id: \"variant_jollof\",\n attributeChoices: {},\n price: ngn(450000),\n isAvailable: true,\n },\n ],\n optionGroups: [\n {\n id: \"grp_protein\",\n name: \"Protein\",\n kind: \"select\",\n required: true,\n selection: { min: 1, max: 1 },\n isAttribute: false,\n choices: [\n {\n id: \"opt_chicken\",\n name: \"Chicken\",\n price: ngn(0),\n isAvailable: true,\n },\n {\n id: \"opt_beef\",\n name: \"Beef\",\n price: ngn(50000),\n isAvailable: true,\n },\n {\n id: \"opt_fish\",\n name: \"Fish\",\n price: ngn(80000),\n isAvailable: false,\n },\n ],\n },\n {\n id: \"grp_sauce\",\n name: \"Sauce\",\n helpText: \"Required with chicken.\",\n kind: \"select\",\n required: false,\n selection: { min: 0, max: 1 },\n isAttribute: false,\n choices: [\n {\n id: \"opt_pepper\",\n name: \"Pepper sauce\",\n price: ngn(0),\n isAvailable: true,\n },\n {\n id: \"opt_stew\",\n name: \"Stew\",\n price: ngn(20000),\n isAvailable: true,\n },\n ],\n conditions: [\n {\n groupId: \"grp_protein\",\n choiceIds: [\"opt_chicken\"],\n match: \"any\",\n setRequired: true,\n setMin: 1,\n },\n ],\n },\n {\n id: \"grp_extras\",\n name: \"Extras\",\n kind: \"select\",\n required: false,\n selection: { min: 0, max: 3 },\n isAttribute: false,\n choices: [\n {\n id: \"opt_plantain\",\n name: \"Plantain\",\n price: ngn(30000),\n isAvailable: true,\n quantity: { min: 1, max: 3 },\n },\n {\n id: \"opt_egg\",\n name: \"Boiled egg\",\n price: ngn(15000),\n isAvailable: true,\n },\n ],\n },\n {\n id: \"grp_note\",\n name: \"Note for the kitchen\",\n kind: \"text\",\n required: false,\n selection: { min: 0 },\n isAttribute: false,\n choices: [],\n input: { maxLength: 140, placeholder: \"No onions, please\" },\n },\n ],\n tags: [\"popular\"],\n },\n item_zobo: {\n id: \"item_zobo\",\n name: \"Zobo\",\n images: [],\n price: ngn(120000),\n isAvailable: true,\n quantity: { min: 1, step: 1 },\n variants: [\n {\n id: \"variant_zobo_small\",\n attributeChoices: { grp_size: \"opt_small\" },\n price: ngn(120000),\n isAvailable: true,\n },\n {\n id: \"variant_zobo_large\",\n attributeChoices: { grp_size: \"opt_large\" },\n price: ngn(200000),\n isAvailable: false,\n },\n ],\n optionGroups: [\n {\n id: \"grp_size\",\n name: \"Size\",\n kind: \"select\",\n required: true,\n selection: { min: 1, max: 1 },\n isAttribute: true,\n choices: [\n {\n id: \"opt_small\",\n name: \"Small\",\n price: ngn(0),\n isAvailable: true,\n },\n {\n id: \"opt_large\",\n name: \"Large\",\n price: ngn(0),\n isAvailable: false,\n },\n ],\n },\n ],\n tags: [],\n },\n item_cake: {\n id: \"item_cake\",\n name: \"Chocolate cake\",\n images: [],\n price: ngn(350000),\n compareAtPrice: ngn(400000),\n isAvailable: false,\n quantity: { min: 1, step: 1 },\n variants: [\n {\n id: \"variant_cake\",\n attributeChoices: {},\n price: ngn(350000),\n isAvailable: false,\n },\n ],\n optionGroups: [],\n tags: [],\n },\n },\n};\n/**\n * Sample data with no merchant IDs or photos. `minimal` has one plain item.\n * `defaultTemplate` covers several branches, shared category membership, required and\n * conditional options, per-choice quantities, text input and attribute variants.\n */\nexport const fixtures = {\n minimal: { store, menu },\n defaultTemplate: { store: templateStore, menu: templateMenu },\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { a as Menu, C as CategoryPage } from '../models-Dj-VkdU1.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validates and maps one category page. Only progressive catalogues read
|
|
5
|
+
* pages, so this loads on the first `menu.page()` call and stays out of the
|
|
6
|
+
* core bundle, like the quote client (PRD 03 §4). The mapper and error come
|
|
7
|
+
* in as arguments: importing them would split the core's shared code into a
|
|
8
|
+
* separate chunk, which costs the core more than this module saves.
|
|
9
|
+
*/
|
|
10
|
+
declare function categoryPage(raw: Record<string, unknown>, ctx: {
|
|
11
|
+
branchId: string;
|
|
12
|
+
menuId: string;
|
|
13
|
+
categoryId: string;
|
|
14
|
+
cursor?: string;
|
|
15
|
+
}, mapMenu: (value: unknown, branchId: string) => Menu, invalid: () => Error): CategoryPage;
|
|
16
|
+
|
|
17
|
+
export { categoryPage };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function c(e,r,s,t){let o=s(e,r.branchId);if(e.next_cursor!=null&&(typeof e.next_cursor!="string"||!e.next_cursor||e.next_cursor===r.cursor)||o.categories.some(n=>n.id!==r.categoryId)||Object.keys(o.items).some(n=>!o.categories.some(u=>u.itemIds.includes(n)))||!o.menus?.some(n=>n.id===r.menuId&&n.categoryIds.includes(r.categoryId)))throw t();return {menu:{...o,completeness:"partial"},menuId:r.menuId,categoryId:r.categoryId,...typeof e.next_cursor=="string"&&e.next_cursor?{nextCursor:e.next_cursor}:{}}}export{c as categoryPage};//# sourceMappingURL=category-page.js.map
|
|
2
|
+
//# sourceMappingURL=category-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transport/category-page.ts"],"names":["categoryPage","raw","ctx","mapMenu","invalid","menu","c","id","m"],"mappings":"AASO,SAASA,CAAAA,CACdC,EACAC,CAAAA,CAMAC,CAAAA,CACAC,EACc,CACd,IAAMC,CAAAA,CAAOF,CAAAA,CAAQF,CAAAA,CAAKC,CAAAA,CAAI,QAAQ,CAAA,CACtC,GACGD,CAAAA,CAAI,WAAA,EAAe,IAAA,GACjB,OAAOA,EAAI,WAAA,EAAgB,QAAA,EAC1B,CAACA,CAAAA,CAAI,WAAA,EACLA,CAAAA,CAAI,cAAgBC,CAAAA,CAAI,MAAA,CAAA,EAC5BG,EAAK,UAAA,CAAW,IAAA,CAAMC,GAAMA,CAAAA,CAAE,EAAA,GAAOJ,CAAAA,CAAI,UAAU,CAAA,EACnD,MAAA,CAAO,KAAKG,CAAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CACrBE,CAAAA,EAAO,CAACF,EAAK,UAAA,CAAW,IAAA,CAAMC,CAAAA,EAAMA,CAAAA,CAAE,OAAA,CAAQ,QAAA,CAASC,CAAE,CAAC,CAC7D,GACA,CAACF,CAAAA,CAAK,OAAO,IAAA,CACVG,CAAAA,EAAMA,CAAAA,CAAE,EAAA,GAAON,CAAAA,CAAI,MAAA,EAAUM,EAAE,WAAA,CAAY,QAAA,CAASN,CAAAA,CAAI,UAAU,CACrE,CAAA,CAEA,MAAME,CAAAA,EAAQ,CAEhB,OAAO,CACL,IAAA,CAAM,CAAE,GAAGC,CAAAA,CAAM,YAAA,CAAc,SAAU,CAAA,CACzC,MAAA,CAAQH,EAAI,MAAA,CACZ,UAAA,CAAYA,CAAAA,CAAI,UAAA,CAChB,GAAI,OAAOD,EAAI,WAAA,EAAgB,QAAA,EAAYA,CAAAA,CAAI,WAAA,CAC3C,CAAE,UAAA,CAAYA,EAAI,WAAY,CAAA,CAC9B,EACN,CACF","file":"category-page.js","sourcesContent":["import type { CategoryPage, Menu } from \"../models\";\n\n/**\n * Validates and maps one category page. Only progressive catalogues read\n * pages, so this loads on the first `menu.page()` call and stays out of the\n * core bundle, like the quote client (PRD 03 §4). The mapper and error come\n * in as arguments: importing them would split the core's shared code into a\n * separate chunk, which costs the core more than this module saves.\n */\nexport function categoryPage(\n raw: Record<string, unknown>,\n ctx: {\n branchId: string;\n menuId: string;\n categoryId: string;\n cursor?: string;\n },\n mapMenu: (value: unknown, branchId: string) => Menu,\n invalid: () => Error,\n): CategoryPage {\n const menu = mapMenu(raw, ctx.branchId);\n if (\n (raw.next_cursor != null &&\n (typeof raw.next_cursor !== \"string\" ||\n !raw.next_cursor ||\n raw.next_cursor === ctx.cursor)) ||\n menu.categories.some((c) => c.id !== ctx.categoryId) ||\n Object.keys(menu.items).some(\n (id) => !menu.categories.some((c) => c.itemIds.includes(id)),\n ) ||\n !menu.menus?.some(\n (m) => m.id === ctx.menuId && m.categoryIds.includes(ctx.categoryId),\n )\n ) {\n throw invalid();\n }\n return {\n menu: { ...menu, completeness: \"partial\" },\n menuId: ctx.menuId,\n categoryId: ctx.categoryId,\n ...(typeof raw.next_cursor === \"string\" && raw.next_cursor\n ? { nextCursor: raw.next_cursor }\n : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { a as Menu } from '../models-Dj-VkdU1.js';
|
|
2
|
+
import { q as SearchRequest, r as SearchPage } from '../client-BctSrEhO.js';
|
|
3
|
+
|
|
4
|
+
/** Loaded only when search is used; request authentication/retries stay in REST. */
|
|
5
|
+
declare function searchPage(ctx: SearchRequest, read: (path: string) => Promise<unknown>, mapMenu: (value: unknown, branchId: string) => Menu, invalid: () => Error): Promise<SearchPage>;
|
|
6
|
+
|
|
7
|
+
export { searchPage };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
async function m(e,i,c,a){e.signal?.throwIfAborted();let u=new URLSearchParams({branch:e.branchId,query:e.query.trim(),limit:"25",...e.cursor?{cursor:e.cursor}:{}}),o=await i(`/items/search?${u}`);if(e.signal?.throwIfAborted(),!o||typeof o!="object"||Array.isArray(o))throw a();let r=o.next_cursor,s=c(o,e.branchId);if(Object.keys(s.items).length>25||r!=null&&(typeof r!="string"||!r||r===e.cursor)||Object.keys(s.items).some(n=>!s.categories.some(t=>t.itemIds.includes(n)))||s.categories.some(n=>!s.menus?.some(t=>t.categoryIds.includes(n.id))))throw a();return {menu:{...s,completeness:"partial"},...typeof r=="string"?{nextCursor:r}:{}}}export{m as searchPage};//# sourceMappingURL=search.js.map
|
|
2
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transport/search.ts"],"names":["searchPage","ctx","read","mapMenu","invalid","query","raw","cursor","menu","id","category","source"],"mappings":"AAIA,eAAsBA,CAAAA,CACpBC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACAC,EACqB,CACrBH,CAAAA,CAAI,MAAA,EAAQ,cAAA,EAAe,CAC3B,IAAMI,CAAAA,CAAQ,IAAI,gBAAgB,CAChC,MAAA,CAAQJ,CAAAA,CAAI,QAAA,CACZ,KAAA,CAAOA,CAAAA,CAAI,KAAA,CAAM,IAAA,GACjB,KAAA,CAAO,IAAA,CACP,GAAIA,CAAAA,CAAI,OAAS,CAAE,MAAA,CAAQA,CAAAA,CAAI,MAAO,EAAI,EAC5C,CAAC,CAAA,CACKK,CAAAA,CAAM,MAAMJ,CAAAA,CAAK,CAAA,cAAA,EAAiBG,CAAK,CAAA,CAAE,CAAA,CAE/C,GADAJ,CAAAA,CAAI,QAAQ,cAAA,EAAe,CACvB,CAACK,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,EAAY,KAAA,CAAM,OAAA,CAAQA,CAAG,CAAA,CACtD,MAAMF,CAAAA,GAER,IAAMG,CAAAA,CAAUD,CAAAA,CAAgC,WAAA,CAC1CE,EAAOL,CAAAA,CAAQG,CAAAA,CAAKL,CAAAA,CAAI,QAAQ,EACtC,GACE,MAAA,CAAO,IAAA,CAAKO,CAAAA,CAAK,KAAK,CAAA,CAAE,MAAA,CAAS,EAAA,EAChCD,GAAU,IAAA,GACR,OAAOA,CAAAA,EAAW,QAAA,EAAY,CAACA,CAAAA,EAAUA,CAAAA,GAAWN,CAAAA,CAAI,MAAA,CAAA,EAC3D,OAAO,IAAA,CAAKO,CAAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CACrBC,CAAAA,EACC,CAACD,CAAAA,CAAK,WAAW,IAAA,CAAME,CAAAA,EAAaA,CAAAA,CAAS,OAAA,CAAQ,SAASD,CAAE,CAAC,CACrE,CAAA,EACAD,EAAK,UAAA,CAAW,IAAA,CACbE,CAAAA,EACC,CAACF,CAAAA,CAAK,KAAA,EAAO,IAAA,CAAMG,CAAAA,EAAWA,EAAO,WAAA,CAAY,QAAA,CAASD,CAAAA,CAAS,EAAE,CAAC,CAC1E,CAAA,CAEA,MAAMN,CAAAA,GAER,OAAO,CACL,IAAA,CAAM,CAAE,GAAGI,CAAAA,CAAM,YAAA,CAAc,SAAU,EACzC,GAAI,OAAOD,CAAAA,EAAW,QAAA,CAAW,CAAE,UAAA,CAAYA,CAAO,CAAA,CAAI,EAC5D,CACF","file":"search.js","sourcesContent":["import type { Menu } from \"../models\";\nimport type { SearchPage, SearchRequest } from \"./types\";\n\n/** Loaded only when search is used; request authentication/retries stay in REST. */\nexport async function searchPage(\n ctx: SearchRequest,\n read: (path: string) => Promise<unknown>,\n mapMenu: (value: unknown, branchId: string) => Menu,\n invalid: () => Error,\n): Promise<SearchPage> {\n ctx.signal?.throwIfAborted();\n const query = new URLSearchParams({\n branch: ctx.branchId,\n query: ctx.query.trim(),\n limit: \"25\",\n ...(ctx.cursor ? { cursor: ctx.cursor } : {}),\n });\n const raw = await read(`/items/search?${query}`);\n ctx.signal?.throwIfAborted();\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n throw invalid();\n }\n const cursor = (raw as Record<string, unknown>).next_cursor;\n const menu = mapMenu(raw, ctx.branchId);\n if (\n Object.keys(menu.items).length > 25 ||\n (cursor != null &&\n (typeof cursor !== \"string\" || !cursor || cursor === ctx.cursor)) ||\n Object.keys(menu.items).some(\n (id) =>\n !menu.categories.some((category) => category.itemIds.includes(id)),\n ) ||\n menu.categories.some(\n (category) =>\n !menu.menus?.some((source) => source.categoryIds.includes(category.id)),\n )\n ) {\n throw invalid();\n }\n return {\n menu: { ...menu, completeness: \"partial\" },\n ...(typeof cursor === \"string\" ? { nextCursor: cursor } : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
async function l(e,o,t,s,n){let r=a=>{if(!a||typeof a!="object"||Array.isArray(a))throw n();return a},d=new URLSearchParams({branch:e.branchId,order_context:e.orderContext}),c=await o(`/menus/${encodeURIComponent(e.menuId)}?${d}`),i=c.headers.get("ETag");if(!i)throw n();if(c.status===304)return {notModified:true,etag:i};let p=r(await t(c)),u=r(p.coverage),m=s(p,e.branchId);if(p.next_cursor||u.complete!==true||!Array.isArray(u.menuIds)||u.menuIds.length!==1||u.menuIds[0]!==e.menuId||m.menus?.length!==1||m.menus[0]?.id!==e.menuId)throw n();return {menu:{...m,completeness:"partial"},coverage:{menuIds:[e.menuId],complete:true},etag:i}}function g(e){return JSON.stringify(["selected-menu:v1",e.store,e.branchId,e.orderContext,e.menuId])}function h(e){let o=e._internal.transport;return {async read(t,s={}){if(!o.getSelectedMenu)throw new Error("Transport does not support selected menus");let n=await o.getSelectedMenu({key:e.config.key,version:e.config.version,branchId:t.branchId,menuId:t.menuId,orderContext:t.orderContext,...s});if(s.signal?.throwIfAborted(),!("notModified"in n)){if(n.menu.branchId!==t.branchId||n.coverage.menuIds.length!==1||n.coverage.menuIds[0]!==t.menuId)throw new Error("Selected menu belongs to another scope");let r=g(t),d=e._internal.cache.snapshot(r).value;JSON.stringify(d)!==JSON.stringify(n)&&e._internal.cache.set(r,n,n.etag);}return n}}}export{h as createSelectedMenuReader,l as selectedMenu,g as selectedMenuKey};//# sourceMappingURL=selected-menu.js.map
|
|
2
|
+
//# sourceMappingURL=selected-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transport/selected-menu.ts"],"names":["selectedMenu","ctx","request","json","mapMenu","invalid","record","value","query","response","etag","raw","coverage","menu","selectedMenuKey","scope","createSelectedMenuReader","client","transport","options","key","previous"],"mappings":"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","file":"selected-menu.js","sourcesContent":["import type { Zappie } from \"../client\";\nimport type { Menu } from \"../models\";\nimport type { CatalogueScope } from \"../persist/catalogue\";\nimport type { RequestCtx } from \"./types\";\n\n/** Complete for the named source, never complete for the branch. */\nexport type SelectedMenu = {\n menu: Menu & { completeness: \"partial\" };\n coverage: { menuIds: [string]; complete: true };\n};\n/**\n * A source menu with its ETag, or an unchanged response carrying the matching ETag.\n */\nexport type SelectedMenuResponse =\n (SelectedMenu & { etag: string }) | { notModified: true; etag: string };\n/**\n * A branch-scoped source-menu request with order context and an optional conditional ETag.\n */\nexport type SelectedMenuRequest = RequestCtx & {\n branchId: string;\n menuId: string;\n orderContext: CatalogueScope[\"orderContext\"];\n ifNoneMatch?: string;\n};\n/**\n * A transport that reads one complete source menu without claiming branch-wide coverage.\n */\nexport type SelectedMenuTransport = {\n getSelectedMenu(request: SelectedMenuRequest): Promise<SelectedMenuResponse>;\n};\n/** Dependencies are passed by REST to avoid splitting core shared chunks. */\nexport async function selectedMenu(\n ctx: SelectedMenuRequest,\n request: (path: string) => Promise<Response>,\n json: (response: Response) => Promise<unknown>,\n mapMenu: (value: unknown, branchId: string) => Menu,\n invalid: () => Error,\n): Promise<SelectedMenuResponse> {\n // Checked here rather than passed in: every argument REST passes costs the\n // core bytes, and the core has none to spare.\n const record = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw invalid();\n }\n return value as Record<string, unknown>;\n };\n const query = new URLSearchParams({\n branch: ctx.branchId,\n order_context: ctx.orderContext,\n });\n const response = await request(\n `/menus/${encodeURIComponent(ctx.menuId)}?${query}`,\n );\n const etag = response.headers.get(\"ETag\");\n if (!etag) {\n throw invalid();\n }\n if (response.status === 304) {\n return { notModified: true, etag };\n }\n const raw = record(await json(response));\n const coverage = record(raw.coverage);\n const menu = mapMenu(raw, ctx.branchId);\n if (\n raw.next_cursor ||\n coverage.complete !== true ||\n !Array.isArray(coverage.menuIds) ||\n coverage.menuIds.length !== 1 ||\n coverage.menuIds[0] !== ctx.menuId ||\n menu.menus?.length !== 1 ||\n menu.menus[0]?.id !== ctx.menuId\n ) {\n throw invalid();\n }\n return {\n menu: { ...menu, completeness: \"partial\" },\n coverage: { menuIds: [ctx.menuId], complete: true },\n etag,\n };\n}\n/**\n * Build a versioned cache key for a source menu within a store, branch and order context.\n */\nexport function selectedMenuKey(scope: CatalogueScope) {\n return JSON.stringify([\n \"selected-menu:v1\",\n scope.store,\n scope.branchId,\n scope.orderContext,\n scope.menuId,\n ]);\n}\n/** Dedicated lazy resource: deliberately does not call menu.hydrate(). */\nexport function createSelectedMenuReader(client: Zappie) {\n const transport = client._internal.transport;\n return {\n async read(\n scope: CatalogueScope,\n options: { signal?: AbortSignal; ifNoneMatch?: string } = {},\n ) {\n if (!transport.getSelectedMenu) {\n throw new Error(\"Transport does not support selected menus\");\n }\n const response = await transport.getSelectedMenu({\n key: client.config.key,\n version: client.config.version,\n branchId: scope.branchId,\n menuId: scope.menuId,\n orderContext: scope.orderContext,\n ...options,\n });\n options.signal?.throwIfAborted();\n if (!(\"notModified\" in response)) {\n if (\n response.menu.branchId !== scope.branchId ||\n response.coverage.menuIds.length !== 1 ||\n response.coverage.menuIds[0] !== scope.menuId\n ) {\n throw new Error(\"Selected menu belongs to another scope\");\n }\n const key = selectedMenuKey(scope);\n const previous =\n client._internal.cache.snapshot<SelectedMenuResponse>(key).value;\n if (JSON.stringify(previous) !== JSON.stringify(response)) {\n client._internal.cache.set(key, response, response.etag);\n }\n }\n return response;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { i as OpeningTime, M as Money, d as Currency, S as Store } from '../models-Dj-VkdU1.js';
|
|
2
|
+
|
|
3
|
+
type Guard<T> = (value: unknown) => value is T;
|
|
4
|
+
type Optional = <K extends string, T>(key: K, value: unknown, is: Guard<T>) => {
|
|
5
|
+
[P in K]?: T;
|
|
6
|
+
};
|
|
7
|
+
/** Core parsing helpers are passed in, in this order, so this lazy entry has no runtime import. */
|
|
8
|
+
declare function mapStore(value: unknown, record: (value: unknown) => Record<string, unknown>, text: (value: unknown) => string, list: (value: unknown) => unknown[], hours: (value: unknown) => OpeningTime[], mapMoney: (value: unknown) => Money, money: (amountMinor: number, currency: Currency) => Money, opt: Optional, isString: Guard<string>, isBoolean: Guard<boolean>): Store;
|
|
9
|
+
|
|
10
|
+
export { mapStore };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function G(v,s,a,d,O,M,T,t,o,C){let m=l=>{let e=s(l??{});return typeof e.lat=="number"&&typeof e.lng=="number"?{lat:e.lat,lng:e.lng}:void 0},f=l=>{let e=s(l);return {pickup:e.pickup===true,delivery:e.delivery===true,dineIn:(e.dine_in??e.dineIn)===true,scheduling:(e.scheduling??e.scheduled)===true}},n=s(v),r=s(n.brand??{}),y=d(n.branches).map(l=>{let e=s(l),k=s(e.pickup_address??{}),_=m(k.coordinates),g={...t("placeId",k.place_id,o),..._?{coordinates:_}:{}},b=typeof e.address=="string"?e.address:e.address?Object.values(s(e.address)).filter(c=>typeof c=="string").join(", "):void 0,F=e.address&&typeof e.address=="object"?s(e.address):{},w=m(F);return {id:a(e.id),slug:a(e.slug??e.id),name:a(e.name),openingTimes:O(e.opening_times??e.hours),isOpen:e.is_open===true,fulfilment:f(e.fulfilment),...b!==void 0?{address:b}:{},...o(e.phone)?{phone:e.phone.trim()}:{},...t("timezone",e.timezone,o),...w?{coordinates:w}:{},...t("closedUntil",e.closed_until,o),...t("nextChangeAt",e.next_change_at,o),...t("isDefault",e.is_default,C),...Object.keys(g).length>0?{pickupAddress:g}:{},...e.social_links!==void 0?{socialLinks:d(e.social_links).flatMap(c=>{let u=s(c);try{let p=new URL(a(u.url));return o(u.type)&&(p.protocol==="https:"||p.protocol==="http:")?[{type:u.type,url:p.href}]:[]}catch{return []}})}:{},...e.minimum_order?{minimumOrder:M(e.minimum_order)}:{},...e.special_hours?{specialHours:d(e.special_hours).map(c=>{let u=s(c);return {date:a(u.date),closed:u.closed===true,...t("opens",u.open,o),...t("closes",u.close,o)}})}:{}}}),j=["card","bank_transfer","wallet","zap","apple_pay","google_pay"],z=d(n.payment_methods).map(a).filter(l=>j.includes(l)?true:(console.warn(`Zappie payment method "${l}" is newer than this SDK and was skipped`),false)),i={pickup:false,delivery:false,dineIn:false,scheduling:false};for(let l of y)for(let e of Object.keys(i))i[e]||(i[e]=l.fulfilment[e]);let h=r.accent??(r.colors?s(r.colors).accent:void 0),I=s(n.template_settings??{});return {id:a(n.id),slug:a(n.slug),name:a(n.name),currency:T(0,a(n.currency)).currency,timezone:a(n.timezone),...t("description",n.description,o),...n.template_settings!==void 0?{templateSettings:I}:{},brand:{...t("logoUrl",r.logo_url,o),...t("coverImageUrl",r.cover_image_url,o),...o(h)?{accent:h}:{}},fulfilment:n.fulfilment?f(n.fulfilment):i,paymentMethods:z,branches:y}}export{G as mapStore};//# sourceMappingURL=store.js.map
|
|
2
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/transport/store.ts"],"names":["mapStore","value","record","text","list","hours","mapMoney","money","opt","isString","isBoolean","coordinates","input","fulfilment","source","brand","branches","raw","branch","pickup","pickupCoordinates","pickupAddress","address","entry","addressFields","branchCoordinates","rawLink","link","url","rawHours","special","allowed","paymentMethods","method","aggregate","key","accent","templateSettings"],"mappings":"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","file":"store.js","sourcesContent":["import type { Branch, Fulfilment, OpeningTime, Store } from \"../models\";\nimport type { Currency, Money } from \"../money\";\n\ntype Guard<T> = (value: unknown) => value is T;\ntype Optional = <K extends string, T>(\n key: K,\n value: unknown,\n is: Guard<T>,\n) => { [P in K]?: T };\n\n/** Core parsing helpers are passed in, in this order, so this lazy entry has no runtime import. */\nexport function mapStore(\n value: unknown,\n record: (value: unknown) => Record<string, unknown>,\n text: (value: unknown) => string,\n list: (value: unknown) => unknown[],\n hours: (value: unknown) => OpeningTime[],\n mapMoney: (value: unknown) => Money,\n money: (amountMinor: number, currency: Currency) => Money,\n opt: Optional,\n isString: Guard<string>,\n isBoolean: Guard<boolean>,\n): Store {\n const coordinates = (input: unknown) => {\n const coordinates = record(input ?? {});\n return typeof coordinates.lat === \"number\" &&\n typeof coordinates.lng === \"number\"\n ? { lat: coordinates.lat, lng: coordinates.lng }\n : undefined;\n };\n const fulfilment = (input: unknown): Fulfilment => {\n const value = record(input);\n return {\n pickup: value.pickup === true,\n delivery: value.delivery === true,\n dineIn: (value.dine_in ?? value.dineIn) === true,\n scheduling: (value.scheduling ?? value.scheduled) === true,\n };\n };\n const source = record(value);\n const brand = record(source.brand ?? {});\n const branches: Branch[] = list(source.branches).map((raw) => {\n const branch = record(raw);\n const pickup = record(branch.pickup_address ?? {});\n const pickupCoordinates = coordinates(pickup.coordinates);\n const pickupAddress = {\n ...opt(\"placeId\", pickup.place_id, isString),\n ...(pickupCoordinates ? { coordinates: pickupCoordinates } : {}),\n };\n const address =\n typeof branch.address === \"string\"\n ? branch.address\n : branch.address\n ? Object.values(record(branch.address))\n .filter((entry) => typeof entry === \"string\")\n .join(\", \")\n : undefined;\n const addressFields =\n branch.address && typeof branch.address === \"object\"\n ? record(branch.address)\n : {};\n const branchCoordinates = coordinates(addressFields);\n return {\n id: text(branch.id),\n slug: text(branch.slug ?? branch.id),\n name: text(branch.name),\n openingTimes: hours(branch.opening_times ?? branch.hours),\n isOpen: branch.is_open === true,\n fulfilment: fulfilment(branch.fulfilment),\n ...(address !== undefined ? { address } : {}),\n ...(isString(branch.phone) ? { phone: branch.phone.trim() } : {}),\n ...opt(\"timezone\", branch.timezone, isString),\n ...(branchCoordinates ? { coordinates: branchCoordinates } : {}),\n ...opt(\"closedUntil\", branch.closed_until, isString),\n ...opt(\"nextChangeAt\", branch.next_change_at, isString),\n ...opt(\"isDefault\", branch.is_default, isBoolean),\n ...(Object.keys(pickupAddress).length > 0 ? { pickupAddress } : {}),\n ...(branch.social_links !== undefined\n ? {\n socialLinks: list(branch.social_links).flatMap((rawLink) => {\n const link = record(rawLink);\n // Templates render these as links; only http(s) URLs are kept.\n try {\n const url = new URL(text(link.url));\n return isString(link.type) &&\n (url.protocol === \"https:\" || url.protocol === \"http:\")\n ? [{ type: link.type, url: url.href }]\n : [];\n } catch {\n return [];\n }\n }),\n }\n : {}),\n ...(branch.minimum_order\n ? { minimumOrder: mapMoney(branch.minimum_order) }\n : {}),\n ...(branch.special_hours\n ? {\n specialHours: list(branch.special_hours).map((rawHours) => {\n const special = record(rawHours);\n return {\n date: text(special.date),\n closed: special.closed === true,\n ...opt(\"opens\", special.open, isString),\n ...opt(\"closes\", special.close, isString),\n };\n }),\n }\n : {}),\n };\n });\n const allowed = [\n \"card\",\n \"bank_transfer\",\n \"wallet\",\n \"zap\",\n \"apple_pay\",\n \"google_pay\",\n ];\n const paymentMethods = list(source.payment_methods)\n .map(text)\n .filter((method) => {\n if (allowed.includes(method)) {\n return true;\n }\n console.warn(\n `Zappie payment method \"${method}\" is newer than this SDK and was skipped`,\n );\n return false;\n });\n const aggregate = {\n pickup: false,\n delivery: false,\n dineIn: false,\n scheduling: false,\n };\n for (const branch of branches) {\n for (const key of Object.keys(aggregate) as (keyof Fulfilment)[]) {\n aggregate[key] ||= branch.fulfilment[key];\n }\n }\n const accent =\n brand.accent ?? (brand.colors ? record(brand.colors).accent : undefined);\n const templateSettings = record(source.template_settings ?? {}) as Record<\n string,\n string | number | boolean\n >;\n return {\n id: text(source.id),\n slug: text(source.slug),\n name: text(source.name),\n currency: money(0, text(source.currency) as Currency).currency,\n timezone: text(source.timezone),\n ...opt(\"description\", source.description, isString),\n ...(source.template_settings !== undefined ? { templateSettings } : {}),\n brand: {\n ...opt(\"logoUrl\", brand.logo_url, isString),\n ...opt(\"coverImageUrl\", brand.cover_image_url, isString),\n ...(isString(accent) ? { accent } : {}),\n },\n fulfilment: source.fulfilment ? fulfilment(source.fulfilment) : aggregate,\n paymentMethods: paymentMethods as Store[\"paymentMethods\"],\n branches,\n };\n}\n"]}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A URL string, URL object or Request you can parse as a storefront route.
|
|
3
|
+
*/
|
|
4
|
+
type StorefrontUrlInput = string | URL | Request;
|
|
5
|
+
/**
|
|
6
|
+
* The business and optional default branch bound to an installed storefront.
|
|
7
|
+
*/
|
|
8
|
+
type StorefrontInstallation = {
|
|
9
|
+
business: string;
|
|
10
|
+
defaultBranch?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* URL contract, installation and origin settings for parsing and building storefront routes.
|
|
14
|
+
* An installation selects v2 unless you explicitly request v1.
|
|
15
|
+
*/
|
|
16
|
+
type StorefrontUrlOptions = {
|
|
17
|
+
contract?: "v1" | "v2";
|
|
18
|
+
installation?: StorefrontInstallation;
|
|
19
|
+
origin?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Query keys that URL contract v1 keeps. */
|
|
22
|
+
declare const STOREFRONT_V1_QUERY_PARAMETERS: readonly ["ref", "utm_source", "payment_id", "context", "prefetch", "business_tag", "pay_point_id", "dine_in_order_id", "no_context", "payment_context_id", "ws", "preview", "device", "auto_scroll", "pickup", "branch_closed", "order_id", "modal_id", "lightbox", "menu_id", "payment_method", "beacon_id", "menu_group_id", "category_id", "menu_layout", "can_schedule", "refresh", "success", "grant", "portal", "can_download_receipt", "auth_modal_id", "experimental_otp", "branch", "business", "env", "switched_branch", "from", "template", "catalog_rendering", "catalogue_search", "catalogue_categories"];
|
|
23
|
+
/**
|
|
24
|
+
* Recognized storefront query keys, including the v1 keys and checkout return and session keys.
|
|
25
|
+
*/
|
|
26
|
+
declare const STOREFRONT_QUERY_PARAMETERS: readonly ["ref", "utm_source", "payment_id", "context", "prefetch", "business_tag", "pay_point_id", "dine_in_order_id", "no_context", "payment_context_id", "ws", "preview", "device", "auto_scroll", "pickup", "branch_closed", "order_id", "modal_id", "lightbox", "menu_id", "payment_method", "beacon_id", "menu_group_id", "category_id", "menu_layout", "can_schedule", "refresh", "success", "grant", "portal", "can_download_receipt", "auth_modal_id", "experimental_otp", "branch", "business", "env", "switched_branch", "from", "template", "catalog_rendering", "catalogue_search", "catalogue_categories", "return", "session"];
|
|
27
|
+
/**
|
|
28
|
+
* Readonly query parameter names and string values carried by storefront page state.
|
|
29
|
+
*/
|
|
30
|
+
type StorefrontQuery = Readonly<Record<string, string>>;
|
|
31
|
+
/**
|
|
32
|
+
* Query parameters and named UI selections carried alongside a storefront route.
|
|
33
|
+
*/
|
|
34
|
+
type StorefrontPageState = {
|
|
35
|
+
query: StorefrontQuery;
|
|
36
|
+
menuId?: string;
|
|
37
|
+
categoryId?: string;
|
|
38
|
+
menuLayout?: string;
|
|
39
|
+
mode?: "delivery" | "pickup";
|
|
40
|
+
modalId?: string;
|
|
41
|
+
authModalId?: string;
|
|
42
|
+
paymentId?: string;
|
|
43
|
+
lightbox?: string;
|
|
44
|
+
catalogueSearch?: string;
|
|
45
|
+
catalogueCategories?: string;
|
|
46
|
+
};
|
|
47
|
+
type WithState = {
|
|
48
|
+
state: StorefrontPageState;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* A parsed storefront destination with its route identifiers and page state.
|
|
52
|
+
* Unrecognized paths use the unknown variant.
|
|
53
|
+
*/
|
|
54
|
+
type StorefrontRoute = ({
|
|
55
|
+
type: "order-menu";
|
|
56
|
+
business: string;
|
|
57
|
+
branch?: string;
|
|
58
|
+
cataloguePath?: boolean;
|
|
59
|
+
} & WithState) | ({
|
|
60
|
+
type: "item";
|
|
61
|
+
business: string;
|
|
62
|
+
branch?: string;
|
|
63
|
+
item: string;
|
|
64
|
+
} & WithState) | ({
|
|
65
|
+
type: "cart";
|
|
66
|
+
business: string;
|
|
67
|
+
branch?: string;
|
|
68
|
+
} & WithState) | ({
|
|
69
|
+
type: "checkout";
|
|
70
|
+
business: string;
|
|
71
|
+
branch?: string;
|
|
72
|
+
} & WithState) | ({
|
|
73
|
+
type: "checkout-return";
|
|
74
|
+
business: string;
|
|
75
|
+
branch?: string;
|
|
76
|
+
session?: string;
|
|
77
|
+
} & WithState) | ({
|
|
78
|
+
type: "sign-in";
|
|
79
|
+
business: string;
|
|
80
|
+
branch?: string;
|
|
81
|
+
returnTo?: string;
|
|
82
|
+
} & WithState) | ({
|
|
83
|
+
type: "content-page";
|
|
84
|
+
business: string;
|
|
85
|
+
slug: string;
|
|
86
|
+
branch?: string;
|
|
87
|
+
} & WithState) | ({
|
|
88
|
+
type: "dine-in";
|
|
89
|
+
order: string;
|
|
90
|
+
} & WithState) | ({
|
|
91
|
+
type: "dine-in-menus";
|
|
92
|
+
} & WithState) | ({
|
|
93
|
+
type: "self-service-menus";
|
|
94
|
+
} & WithState) | ({
|
|
95
|
+
type: "pay-point";
|
|
96
|
+
payPoint: string;
|
|
97
|
+
} & WithState) | ({
|
|
98
|
+
type: "beacon";
|
|
99
|
+
beacon: string;
|
|
100
|
+
} & WithState) | ({
|
|
101
|
+
type: "link";
|
|
102
|
+
link: string;
|
|
103
|
+
} & WithState) | ({
|
|
104
|
+
type: "collect-payment";
|
|
105
|
+
} & WithState) | ({
|
|
106
|
+
type: "reservation";
|
|
107
|
+
} & WithState) | ({
|
|
108
|
+
type: "pay-session";
|
|
109
|
+
session: string;
|
|
110
|
+
} & WithState) | ({
|
|
111
|
+
type: "payment-step";
|
|
112
|
+
payment: string;
|
|
113
|
+
step: "payment" | "successful" | "failed" | "refunded";
|
|
114
|
+
} & WithState) | ({
|
|
115
|
+
type: "payment-card";
|
|
116
|
+
transaction: string;
|
|
117
|
+
} & WithState) | ({
|
|
118
|
+
type: "profile";
|
|
119
|
+
page: "add-store-credit" | "edit" | "orders" | "payment-methods" | "transactions";
|
|
120
|
+
order?: string;
|
|
121
|
+
} & WithState) | ({
|
|
122
|
+
type: "explore";
|
|
123
|
+
home?: boolean;
|
|
124
|
+
} & WithState) | ({
|
|
125
|
+
type: "unknown";
|
|
126
|
+
pathname: string;
|
|
127
|
+
} & WithState);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Build a storefront URL from a route and its page state.
|
|
131
|
+
* Uses v2 when installation metadata is present unless you select v1 explicitly.
|
|
132
|
+
*
|
|
133
|
+
* @param route - The destination and UI state to encode.
|
|
134
|
+
* @param options - Contract, installation and optional origin for an absolute URL.
|
|
135
|
+
* @returns The built path, or an absolute URL when the origin resolves successfully.
|
|
136
|
+
*/
|
|
137
|
+
declare const buildStorefrontUrl: (route: StorefrontRoute, options?: StorefrontUrlOptions) => string;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Parse a storefront URL into a route and its page state.
|
|
141
|
+
* Uses v2 when installation metadata is present unless you select v1 explicitly.
|
|
142
|
+
*
|
|
143
|
+
* @param input - A URL string, URL object or Request.
|
|
144
|
+
* @param options - Contract, installation and origin settings.
|
|
145
|
+
* @returns A recognized route or an unknown route retaining the pathname.
|
|
146
|
+
*/
|
|
147
|
+
declare const parseStorefrontUrl: (input: StorefrontUrlInput, options?: StorefrontUrlOptions) => StorefrontRoute;
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Find the canonical v2 URL for a recognized storefront route.
|
|
151
|
+
* Compares normalized paths and sorted query parameters to avoid unnecessary redirects.
|
|
152
|
+
*
|
|
153
|
+
* @returns A redirect target, or null for v1, an unknown route, a parse/build failure or an equivalent URL.
|
|
154
|
+
*/
|
|
155
|
+
declare const storefrontRedirect: (input: StorefrontUrlInput, options?: StorefrontUrlOptions) => string | null;
|
|
156
|
+
|
|
157
|
+
export { STOREFRONT_QUERY_PARAMETERS, STOREFRONT_V1_QUERY_PARAMETERS, type StorefrontInstallation, type StorefrontPageState, type StorefrontQuery, type StorefrontRoute, type StorefrontUrlInput, type StorefrontUrlOptions, buildStorefrontUrl, parseStorefrontUrl, storefrontRedirect };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var u="review-menu",m="payment",E="send-otp",R=new Set([E,"verify-otp","update-profile"]),h=t=>t.contract!=="v1"&&t.installation!==void 0,k=t=>({type:"order-menu",business:t.business,...t.branch!==void 0?{branch:t.branch}:{},state:t.state});var S=["ref","utm_source","payment_id","context","prefetch","business_tag","pay_point_id","dine_in_order_id","no_context","payment_context_id","ws","preview","device","auto_scroll","pickup","branch_closed","order_id","modal_id","lightbox","menu_id","payment_method","beacon_id","menu_group_id","category_id","menu_layout","can_schedule","refresh","success","grant","portal","can_download_receipt","auth_modal_id","experimental_otp","branch","business","env","switched_branch","from","template","catalog_rendering","catalogue_search","catalogue_categories"],b=[...S,"return","session"];var Y="https://storefront.invalid",l="product_",v=t=>{try{return decodeURIComponent(t)}catch{return t}},a=t=>encodeURIComponent(t),d=t=>{if(t instanceof URL)return new URL(t.toString());let e=typeof t=="string"?t:t.url;return new URL(e,Y)},G=(t,e)=>{let r={};return t.forEach((o,s)=>{(e==="v2"?b:S).includes(s)&&(r[s]=o);}),r},I=(t,e="v2")=>{let r=G(t.searchParams,e),o=t.searchParams.get("pickup");return {query:r,...t.searchParams.has("menu_id")?{menuId:t.searchParams.get("menu_id")??""}:{},...t.searchParams.has("category_id")?{categoryId:t.searchParams.get("category_id")??""}:{},...t.searchParams.has("menu_layout")?{menuLayout:t.searchParams.get("menu_layout")??""}:{},...o==="true"?{mode:"pickup"}:o==="false"?{mode:"delivery"}:{},...t.searchParams.has("modal_id")?{modalId:t.searchParams.get("modal_id")??""}:{},...t.searchParams.has("auth_modal_id")?{authModalId:t.searchParams.get("auth_modal_id")??""}:{},...t.searchParams.has("payment_id")?{paymentId:t.searchParams.get("payment_id")??""}:{},...t.searchParams.has("lightbox")?{lightbox:t.searchParams.get("lightbox")??""}:{},...t.searchParams.has("catalogue_search")?{catalogueSearch:t.searchParams.get("catalogue_search")??""}:{},...t.searchParams.has("catalogue_categories")?{catalogueCategories:t.searchParams.get("catalogue_categories")??""}:{}}};var y=t=>t.replace(/\/+$/,"")||"/",A=(t,e)=>{if(!e)return t;let r=`/order/${a(e.business)}`;if(t==="/")return r;if(t==="/order")return e.defaultBranch?`${r}/${a(e.defaultBranch)}`:r;if(t.startsWith("/pages/"))return `${r}${t}`;if(!t.startsWith("/order/")||t===r||t.startsWith(`${r}/`))return t;let o=t.slice(6);return e.defaultBranch&&(o==="/products"||o.startsWith("/products/")||o.startsWith("/pages/"))?`${r}/${a(e.defaultBranch)}${o}`:`${r}${o}`},M=(t,e,r)=>{if(!r||!("business"in e)||e.business!==r.business)return t;if(e.type==="content-page"&&!e.branch)return `/pages/${a(e.slug)}`;if(e.type==="order-menu"&&!e.branch)return "/";let o=`/order/${a(e.business)}/${a(e.branch??"")}`,s=t.slice(o.length);return e.branch===r.defaultBranch?`/order${s}`:`/order/${a(e.branch??"")}${s}`},p=(t,e)=>v(t[e]??"");var L=t=>{let e=new URLSearchParams(t.state.query),r=t.state;return [["menu_id",r.menuId],["category_id",r.categoryId],["menu_layout",r.menuLayout],["pickup",r.mode?String(r.mode==="pickup"):void 0],["modal_id",r.modalId],["auth_modal_id",r.authModalId],["payment_id",r.paymentId],["lightbox",r.lightbox],["catalogue_search",r.catalogueSearch],["catalogue_categories",r.catalogueCategories]].forEach(([s,n])=>{n!==void 0&&e.set(s,n);}),e},W=t=>{let e=L(t);return t.type==="item"?e.delete("modal_id"):t.type==="cart"?e.set("modal_id",u):t.type==="checkout"?e.set("modal_id",m):t.type==="sign-in"?(e.set("auth_modal_id",E),t.returnTo!==void 0&&e.set("return",t.returnTo)):t.type==="checkout-return"&&t.session!==void 0&&e.set("session",t.session),e.sort(),e},U=(t,e)=>{let r=L(t);return (t.type==="order-menu"||t.type==="item"||t.type==="cart"||t.type==="checkout"||t.type==="checkout-return"||t.type==="sign-in"||t.type==="content-page")&&(t.branch&&t.branch!==e.defaultBranch?r.set("branch",t.branch):r.delete("branch")),(t.type==="item"||t.type==="cart"||t.type==="checkout"||t.type==="checkout-return")&&r.delete("modal_id"),t.type==="sign-in"&&(r.delete("auth_modal_id"),t.returnTo!==void 0&&r.set("return",t.returnTo)),t.type==="checkout-return"&&t.session!==void 0&&r.set("session",t.session),r.sort(),r};var P=(t,e={})=>{switch(t.type){case "order-menu":return `/order/${a(t.business)}${t.branch?`/${a(t.branch)}`:""}${t.cataloguePath?"/products":""}`;case "item":{let r=t.branch??e.installation?.defaultBranch;return r?`/order/${a(t.business)}/${a(r)}/products/${a(t.item)}`:`/order/${a(t.business)}`}case "cart":case "checkout":case "checkout-return":case "sign-in":return P(k(t),e);case "content-page":return `/order/${a(t.business)}${t.branch?`/${a(t.branch)}`:""}/pages/${a(t.slug)}`;case "dine-in":return `/dine-in/${a(t.order)}`;case "dine-in-menus":return "/dine-in/menus";case "self-service-menus":return "/self-service/menus";case "pay-point":return `/pay-point/${a(t.payPoint)}`;case "beacon":return `/beacons/${a(t.beacon)}`;case "link":return `/links/${a(t.link)}`;case "collect-payment":return "/collect-payment";case "reservation":return "/reservation";case "pay-session":return `/pay/${a(t.session)}`;case "payment-step":return `/payment/${a(t.payment)}${t.step==="payment"?"":`/${t.step}`}`;case "payment-card":return `/payment/card/${a(t.transaction)}`;case "profile":return `/profile/${t.page}${t.order?`/${a(t.order)}`:""}`;case "explore":return t.home?"/":"/explore";case "unknown":return t.pathname||"/"}},w=(t,e={})=>{let r=P(t,e),o=t.type==="item"&&t.branch===void 0&&e.installation?.defaultBranch?{...t,branch:e.installation.defaultBranch}:t,s=M(r,o,e.installation),n=W(t).toString(),c=`${s}${n?`?${n}`:""}`;if(!e.origin)return c;try{return new URL(c,e.origin).toString()}catch{return c}};var O=(t,e)=>{let r=U(t,e);r.delete("auth_modal_id");let o=r.toString();return {type:"sign-in",business:t.business,state:{query:{}},returnTo:`/${o?`?${o}`:""}`}};var K=(t,e)=>{if(t.type!=="order-menu")return t;let r={business:t.business,...t.branch!==void 0?{branch:t.branch}:{},state:t.state};return t.state.authModalId&&R.has(t.state.authModalId)?O(t,e):t.state.modalId?.startsWith(l)?{type:"item",...r,item:t.state.modalId.slice(l.length)}:t.state.modalId===u?{type:"cart",...r}:t.state.modalId===m?{type:"checkout",...r}:t},X=t=>t.page==="orders"?`/orders${t.order?`/${a(t.order)}`:""}`:t.page==="edit"?"/account":`/account/${t.page==="add-store-credit"?"store-credit":t.page}`,z=(t,e)=>{switch(t.type){case "order-menu":return "/";case "item":return `/item/${a(t.item)}`;case "cart":return "/cart";case "checkout":return "/checkout";case "checkout-return":return "/checkout/return";case "sign-in":return "/sign-in";case "content-page":return `/pages/${a(t.slug)}`;case "profile":return X(t);default:return P(t,e)}},N=(t,e)=>{let r=e.installation;if(!r)return "";let o=K(t,r),s=z(o,e),n=U(o,r).toString();return `${s}${n?`?${n}`:""}`};var x=(t,e={})=>{let r=h(e)?N(t,e):w(t,e);if(!e.origin)return r;try{return new URL(r,e.origin).toString()}catch{return r}};var V={"/dine-in/menus":"dine-in-menus","/self-service/menus":"self-service-menus","/collect-payment":"collect-payment","/reservation":"reservation"},D={"dine-in":(t,e)=>({type:"dine-in",order:t,state:e}),"pay-point":(t,e)=>({type:"pay-point",payPoint:t,state:e}),beacons:(t,e)=>({type:"beacon",beacon:t,state:e}),links:(t,e)=>({type:"link",link:t,state:e}),pay:(t,e)=>({type:"pay-session",session:t,state:e})},C=(t,e)=>Object.hasOwn(t,e),_=(t,e={})=>{try{let r=d(t),o=I(r,"v1"),s=A(y(r.pathname),e.installation),n=s.split("/").filter(Boolean);if(n[0]==="order"&&n[1]){let i=p(n,1);if(n[2]==="pages"&&n.length===4)return {type:"content-page",business:i,slug:p(n,3),state:o};let f=n[2]?p(n,2):void 0;if(f&&n[3]==="pages"&&n.length===5)return {type:"content-page",business:i,branch:f,slug:p(n,4),state:o};if(f&&n[3]==="products"&&n[4]&&n.length===5)return {type:"item",business:i,branch:f,item:p(n,4),state:o};if(n.length<=3||n.length===4&&n[3]==="products"){let T=o.modalId?.startsWith(l)?o.modalId.slice(l.length):"";return f&&T?{type:"item",business:i,branch:f,item:T,state:o}:{type:"order-menu",business:i,...f?{branch:f}:{},...n[3]==="products"?{cataloguePath:!0}:{},state:o}}}if(C(V,s))return {type:V[s],state:o};let[c="",g]=n;if(n.length===2&&g&&C(D,c))return D[c](p(n,1),o);if(n[0]==="payment"&&n[1]==="card"&&n[2]&&n.length===3)return {type:"payment-card",transaction:p(n,2),state:o};if(n[0]==="payment"&&n[1]&&n.length<=3){let i=n[2];if(!i||i==="successful"||i==="failed"||i==="refunded")return {type:"payment-step",payment:p(n,1),step:i==="successful"||i==="failed"||i==="refunded"?i:"payment",state:o}}if(n[0]==="orders"&&n.length<=2)return {type:"profile",page:"orders",...n[1]?{order:p(n,1)}:{},state:o};if(n[0]==="profile"&&n[1]&&n.length<=3){let i=n[1];if(i==="add-store-credit"||i==="edit"||i==="payment-methods"||i==="transactions")return {type:"profile",page:i,state:o};if(i==="orders")return {type:"profile",page:i,...n[2]?{order:p(n,2)}:{},state:o}}return s==="/"||s==="/explore"?{type:"explore",...s==="/"?{home:!0}:{},state:o}:{type:"unknown",pathname:s,state:o}}catch{return {type:"unknown",pathname:"",state:{query:{}}}}};var H=t=>t.searchParams.has("branch")?{branch:t.searchParams.get("branch")??""}:{},j=(t,e,r)=>{let o=y(t.pathname),s=o.split("/").filter(Boolean),n=H(t);if(o==="/")return {type:"order-menu",business:r,...n,state:e};if(s[0]==="item"&&s[1]&&s.length===2)return {type:"item",business:r,...n,item:p(s,1),state:e};if(o==="/cart"||o==="/checkout")return {type:o==="/cart"?"cart":"checkout",business:r,...n,state:e};if(o==="/checkout/return"){let c=t.searchParams.get("session");return {type:"checkout-return",business:r,...n,...c!==null?{session:c}:{},state:e}}if(o==="/sign-in"){let c=t.searchParams.get("return");return {type:"sign-in",business:r,...n,...c!==null?{returnTo:c}:{},state:e}}if(s[0]==="pages"&&s[1]&&s.length===2)return {type:"content-page",business:r,...n,slug:p(s,1),state:e};if(s[0]==="orders"&&s.length<=2)return {type:"profile",page:"orders",...s[1]?{order:p(s,1)}:{},state:e};if(s[0]==="account"&&s.length<=2){let c={"payment-methods":"payment-methods",transactions:"transactions","store-credit":"add-store-credit"};if(s.length===1)return {type:"profile",page:"edit",state:e};let g=s[1];if(g&&Object.hasOwn(c,g))return {type:"profile",page:c[g],state:e}}return null},F=(t,e)=>{if(t.type!=="order-menu")return t;let{authModalId:r,modalId:o}=t.state;return r&&R.has(r)?O(t,e):o?.startsWith(l)?{type:"item",business:t.business,...t.branch!==void 0?{branch:t.branch}:{},item:o.slice(l.length),state:t.state}:o===u||o===m?{type:o===u?"cart":"checkout",business:t.business,...t.branch!==void 0?{branch:t.branch}:{},state:t.state}:t},B=(t,e)=>{try{let r=d(t),o=I(r),s=e.installation;if(!s)return _(t,e);let n=j(r,o,s.business);return n?n.type==="order-menu"?F(n,s):n:F(_(t,{...e,contract:"v1"}),s)}catch{return {type:"unknown",pathname:"",state:{query:{}}}}};var $=(t,e={})=>h(e)?B(t,e):_(t,e);var Q=t=>{let e=d(t);return e.searchParams.sort(),`${y(e.pathname)}${e.search}`},q=(t,e={})=>{if(!h(e))return null;try{let r=$(t,e);if(r.type==="unknown")return null;let o=x(r,e);return Q(d(t))===Q(o)?null:o}catch{return null}};
|
|
2
|
+
export{b as STOREFRONT_QUERY_PARAMETERS,S as STOREFRONT_V1_QUERY_PARAMETERS,x as buildStorefrontUrl,$ as parseStorefrontUrl,q as storefrontRedirect};//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/server/storefront-url/contract.ts","../../src/server/storefront-url/types.ts","../../src/server/storefront-url/url.ts","../../src/server/storefront-url/installation.ts","../../src/server/storefront-url/params.ts","../../src/server/storefront-url/build-v1.ts","../../src/server/storefront-url/sign-in.ts","../../src/server/storefront-url/build-v2.ts","../../src/server/storefront-url/build.ts","../../src/server/storefront-url/parse-v1.ts","../../src/server/storefront-url/parse-v2.ts","../../src/server/storefront-url/parse.ts","../../src/server/storefront-url/redirect.ts"],"names":["CART_MODAL","CHECKOUT_MODAL","SIGN_IN_MODAL","SIGN_IN_MODALS","usesV2","options","menuRoute","route","STOREFRONT_V1_QUERY_PARAMETERS","STOREFRONT_QUERY_PARAMETERS","FALLBACK_ORIGIN","ITEM_MODAL_PREFIX","decode","value","encode","inputUrl","input","queryRecord","params","contract","query","key","pageState","url","pickup","normalizedPath","pathname","installationPath","installation","business","suffix","publicInstallationPath","branchPrefix","segment","parts","index","stateParams","state","v1Params","v2Params","routePathV1","branch","buildV1","internal","publicRoute","signInFromOverlay","search","canonicalRoute","common","profilePath","routePathV2","buildV2","canonical","buildStorefrontUrl","FIXED_ROUTES","ID_ROUTES","order","payPoint","beacon","link","session","isKeyOf","table","parseV1","modalItem","prefix","id","step","page","scoped","returnTo","pages","overlay","authModalId","modalId","parseV2","parseStorefrontUrl","comparable","storefrontRedirect","target"],"mappings":"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","file":"index.js","sourcesContent":["import type { StorefrontRoute, StorefrontUrlOptions } from \"./types\";\n\nexport const CART_MODAL = \"review-menu\";\nexport const CHECKOUT_MODAL = \"payment\";\nexport const SIGN_IN_MODAL = \"send-otp\";\nexport const SIGN_IN_MODALS = new Set([\n SIGN_IN_MODAL,\n \"verify-otp\",\n \"update-profile\",\n]);\n\nexport const usesV2 = (options: StorefrontUrlOptions) =>\n options.contract !== \"v1\" && options.installation !== undefined;\n\nexport const menuRoute = (\n route: Extract<\n StorefrontRoute,\n { type: \"cart\" | \"checkout\" | \"checkout-return\" | \"sign-in\" }\n >,\n): Extract<StorefrontRoute, { type: \"order-menu\" }> => ({\n type: \"order-menu\",\n business: route.business,\n ...(route.branch !== undefined ? { branch: route.branch } : {}),\n state: route.state,\n});\n","/**\n * A URL string, URL object or Request you can parse as a storefront route.\n */\nexport type StorefrontUrlInput = string | URL | Request;\n\n/**\n * The business and optional default branch bound to an installed storefront.\n */\nexport type StorefrontInstallation = {\n business: string;\n defaultBranch?: string;\n};\n\n/**\n * URL contract, installation and origin settings for parsing and building storefront routes.\n * An installation selects v2 unless you explicitly request v1.\n */\nexport type StorefrontUrlOptions = {\n contract?: \"v1\" | \"v2\";\n installation?: StorefrontInstallation;\n origin?: string;\n};\n\n/** Query keys that URL contract v1 keeps. */\nexport const STOREFRONT_V1_QUERY_PARAMETERS = [\n \"ref\",\n \"utm_source\",\n \"payment_id\",\n \"context\",\n \"prefetch\",\n \"business_tag\",\n \"pay_point_id\",\n \"dine_in_order_id\",\n \"no_context\",\n \"payment_context_id\",\n \"ws\",\n \"preview\",\n \"device\",\n \"auto_scroll\",\n \"pickup\",\n \"branch_closed\",\n \"order_id\",\n \"modal_id\",\n \"lightbox\",\n \"menu_id\",\n \"payment_method\",\n \"beacon_id\",\n \"menu_group_id\",\n \"category_id\",\n \"menu_layout\",\n \"can_schedule\",\n \"refresh\",\n \"success\",\n \"grant\",\n \"portal\",\n \"can_download_receipt\",\n \"auth_modal_id\",\n \"experimental_otp\",\n \"branch\",\n \"business\",\n \"env\",\n \"switched_branch\",\n \"from\",\n \"template\",\n \"catalog_rendering\",\n \"catalogue_search\",\n \"catalogue_categories\",\n] as const;\n\n/**\n * Recognized storefront query keys, including the v1 keys and checkout return and session keys.\n */\nexport const STOREFRONT_QUERY_PARAMETERS = [\n ...STOREFRONT_V1_QUERY_PARAMETERS,\n \"return\",\n \"session\",\n] as const;\n\n/**\n * Readonly query parameter names and string values carried by storefront page state.\n */\nexport type StorefrontQuery = Readonly<Record<string, string>>;\n\n/**\n * Query parameters and named UI selections carried alongside a storefront route.\n */\nexport type StorefrontPageState = {\n query: StorefrontQuery;\n menuId?: string;\n categoryId?: string;\n menuLayout?: string;\n mode?: \"delivery\" | \"pickup\";\n modalId?: string;\n authModalId?: string;\n paymentId?: string;\n lightbox?: string;\n catalogueSearch?: string;\n catalogueCategories?: string;\n};\n\nexport type WithState = { state: StorefrontPageState };\n\n/**\n * A parsed storefront destination with its route identifiers and page state.\n * Unrecognized paths use the unknown variant.\n */\nexport type StorefrontRoute =\n | ({\n type: \"order-menu\";\n business: string;\n branch?: string;\n cataloguePath?: boolean;\n } & WithState)\n | ({\n type: \"item\";\n business: string;\n branch?: string;\n item: string;\n } & WithState)\n | ({ type: \"cart\"; business: string; branch?: string } & WithState)\n | ({ type: \"checkout\"; business: string; branch?: string } & WithState)\n | ({\n type: \"checkout-return\";\n business: string;\n branch?: string;\n session?: string;\n } & WithState)\n | ({\n type: \"sign-in\";\n business: string;\n branch?: string;\n returnTo?: string;\n } & WithState)\n | ({\n type: \"content-page\";\n business: string;\n slug: string;\n branch?: string;\n } & WithState)\n | ({ type: \"dine-in\"; order: string } & WithState)\n | ({ type: \"dine-in-menus\" } & WithState)\n | ({ type: \"self-service-menus\" } & WithState)\n | ({ type: \"pay-point\"; payPoint: string } & WithState)\n | ({ type: \"beacon\"; beacon: string } & WithState)\n | ({ type: \"link\"; link: string } & WithState)\n | ({ type: \"collect-payment\" } & WithState)\n | ({ type: \"reservation\" } & WithState)\n | ({ type: \"pay-session\"; session: string } & WithState)\n | ({\n type: \"payment-step\";\n payment: string;\n step: \"payment\" | \"successful\" | \"failed\" | \"refunded\";\n } & WithState)\n | ({\n type: \"payment-card\";\n transaction: string;\n } & WithState)\n | ({\n type: \"profile\";\n page:\n | \"add-store-credit\"\n | \"edit\"\n | \"orders\"\n | \"payment-methods\"\n | \"transactions\";\n order?: string;\n } & WithState)\n | ({ type: \"explore\"; home?: boolean } & WithState)\n | ({ type: \"unknown\"; pathname: string } & WithState);\n","import {\n STOREFRONT_QUERY_PARAMETERS,\n STOREFRONT_V1_QUERY_PARAMETERS,\n type StorefrontPageState,\n type StorefrontUrlInput,\n} from \"./types\";\n\nexport const FALLBACK_ORIGIN = \"https://storefront.invalid\";\nexport const ITEM_MODAL_PREFIX = \"product_\";\n\nexport const decode = (value: string) => {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\n\nexport const encode = (value: string) => encodeURIComponent(value);\n\nexport const inputUrl = (input: StorefrontUrlInput) => {\n if (input instanceof URL) {\n return new URL(input.toString());\n }\n const value = typeof input === \"string\" ? input : input.url;\n return new URL(value, FALLBACK_ORIGIN);\n};\n\nexport const queryRecord = (params: URLSearchParams, contract: \"v1\" | \"v2\") => {\n const query: Record<string, string> = {};\n params.forEach((value, key) => {\n const allowed: readonly string[] =\n contract === \"v2\"\n ? STOREFRONT_QUERY_PARAMETERS\n : STOREFRONT_V1_QUERY_PARAMETERS;\n if (allowed.includes(key)) {\n query[key] = value;\n }\n });\n return query;\n};\n\nexport const pageState = (\n url: URL,\n contract: \"v1\" | \"v2\" = \"v2\",\n): StorefrontPageState => {\n const query = queryRecord(url.searchParams, contract);\n const pickup = url.searchParams.get(\"pickup\");\n return {\n query,\n ...(url.searchParams.has(\"menu_id\")\n ? { menuId: url.searchParams.get(\"menu_id\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"category_id\")\n ? { categoryId: url.searchParams.get(\"category_id\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"menu_layout\")\n ? { menuLayout: url.searchParams.get(\"menu_layout\") ?? \"\" }\n : {}),\n ...(pickup === \"true\"\n ? { mode: \"pickup\" as const }\n : pickup === \"false\"\n ? { mode: \"delivery\" as const }\n : {}),\n ...(url.searchParams.has(\"modal_id\")\n ? { modalId: url.searchParams.get(\"modal_id\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"auth_modal_id\")\n ? { authModalId: url.searchParams.get(\"auth_modal_id\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"payment_id\")\n ? { paymentId: url.searchParams.get(\"payment_id\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"lightbox\")\n ? { lightbox: url.searchParams.get(\"lightbox\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"catalogue_search\")\n ? { catalogueSearch: url.searchParams.get(\"catalogue_search\") ?? \"\" }\n : {}),\n ...(url.searchParams.has(\"catalogue_categories\")\n ? {\n catalogueCategories:\n url.searchParams.get(\"catalogue_categories\") ?? \"\",\n }\n : {}),\n };\n};\n","import { type StorefrontInstallation, type StorefrontRoute } from \"./types\";\nimport { decode, encode } from \"./url\";\n\nexport const normalizedPath = (pathname: string) => {\n const trimmed = pathname.replace(/\\/+$/, \"\");\n return trimmed || \"/\";\n};\n\nexport const installationPath = (\n pathname: string,\n installation?: StorefrontInstallation,\n) => {\n if (!installation) {\n return pathname;\n }\n const business = `/order/${encode(installation.business)}`;\n if (pathname === \"/\") {\n return business;\n }\n if (pathname === \"/order\") {\n return installation.defaultBranch\n ? `${business}/${encode(installation.defaultBranch)}`\n : business;\n }\n if (pathname.startsWith(\"/pages/\")) {\n return `${business}${pathname}`;\n }\n if (\n !pathname.startsWith(\"/order/\") ||\n pathname === business ||\n pathname.startsWith(`${business}/`)\n ) {\n return pathname;\n }\n const suffix = pathname.slice(\"/order\".length);\n if (\n installation.defaultBranch &&\n (suffix === \"/products\" ||\n suffix.startsWith(\"/products/\") ||\n suffix.startsWith(\"/pages/\"))\n ) {\n return `${business}/${encode(installation.defaultBranch)}${suffix}`;\n }\n return `${business}${suffix}`;\n};\n\nexport const publicInstallationPath = (\n pathname: string,\n route: StorefrontRoute,\n installation?: StorefrontInstallation,\n) => {\n if (!installation || !(\"business\" in route)) {\n return pathname;\n }\n if (route.business !== installation.business) {\n return pathname;\n }\n if (route.type === \"content-page\" && !route.branch) {\n return `/pages/${encode(route.slug)}`;\n }\n if (route.type === \"order-menu\" && !route.branch) {\n return \"/\";\n }\n const branchPrefix = `/order/${encode(route.business)}/${encode(route.branch ?? \"\")}`;\n const suffix = pathname.slice(branchPrefix.length);\n if (route.branch === installation.defaultBranch) {\n return `/order${suffix}`;\n }\n return `/order/${encode(route.branch ?? \"\")}${suffix}`;\n};\n\nexport const segment = (parts: string[], index: number) =>\n decode(parts[index] ?? \"\");\n","import { CART_MODAL, CHECKOUT_MODAL, SIGN_IN_MODAL } from \"./contract\";\nimport type { StorefrontInstallation, StorefrontRoute } from \"./types\";\n\nconst stateParams = (route: StorefrontRoute) => {\n const params = new URLSearchParams(route.state.query);\n const state = route.state;\n const values: ReadonlyArray<[string, string | undefined]> = [\n [\"menu_id\", state.menuId],\n [\"category_id\", state.categoryId],\n [\"menu_layout\", state.menuLayout],\n [\"pickup\", state.mode ? String(state.mode === \"pickup\") : undefined],\n [\"modal_id\", state.modalId],\n [\"auth_modal_id\", state.authModalId],\n [\"payment_id\", state.paymentId],\n [\"lightbox\", state.lightbox],\n [\"catalogue_search\", state.catalogueSearch],\n [\"catalogue_categories\", state.catalogueCategories],\n ];\n values.forEach(([key, value]) => {\n if (value !== undefined) {\n params.set(key, value);\n }\n });\n return params;\n};\n\nexport const v1Params = (route: StorefrontRoute) => {\n const params = stateParams(route);\n if (route.type === \"item\") {\n params.delete(\"modal_id\");\n } else if (route.type === \"cart\") {\n params.set(\"modal_id\", CART_MODAL);\n } else if (route.type === \"checkout\") {\n params.set(\"modal_id\", CHECKOUT_MODAL);\n } else if (route.type === \"sign-in\") {\n params.set(\"auth_modal_id\", SIGN_IN_MODAL);\n if (route.returnTo !== undefined) {\n params.set(\"return\", route.returnTo);\n }\n } else if (route.type === \"checkout-return\" && route.session !== undefined) {\n params.set(\"session\", route.session);\n }\n params.sort();\n return params;\n};\n\nexport const v2Params = (\n route: StorefrontRoute,\n installation: StorefrontInstallation,\n) => {\n const params = stateParams(route);\n if (\n route.type === \"order-menu\" ||\n route.type === \"item\" ||\n route.type === \"cart\" ||\n route.type === \"checkout\" ||\n route.type === \"checkout-return\" ||\n route.type === \"sign-in\" ||\n route.type === \"content-page\"\n ) {\n if (route.branch && route.branch !== installation.defaultBranch) {\n params.set(\"branch\", route.branch);\n } else {\n params.delete(\"branch\");\n }\n }\n if (\n route.type === \"item\" ||\n route.type === \"cart\" ||\n route.type === \"checkout\" ||\n route.type === \"checkout-return\"\n ) {\n params.delete(\"modal_id\");\n }\n if (route.type === \"sign-in\") {\n params.delete(\"auth_modal_id\");\n if (route.returnTo !== undefined) {\n params.set(\"return\", route.returnTo);\n }\n }\n if (route.type === \"checkout-return\" && route.session !== undefined) {\n params.set(\"session\", route.session);\n }\n params.sort();\n return params;\n};\n","import { menuRoute } from \"./contract\";\nimport { publicInstallationPath } from \"./installation\";\nimport { v1Params } from \"./params\";\nimport { type StorefrontRoute, type StorefrontUrlOptions } from \"./types\";\nimport { encode } from \"./url\";\n\nexport const routePathV1 = (\n route: StorefrontRoute,\n options: StorefrontUrlOptions = {},\n): string => {\n switch (route.type) {\n case \"order-menu\":\n return `/order/${encode(route.business)}${route.branch ? `/${encode(route.branch)}` : \"\"}${route.cataloguePath ? \"/products\" : \"\"}`;\n case \"item\": {\n const branch = route.branch ?? options.installation?.defaultBranch;\n return branch\n ? `/order/${encode(route.business)}/${encode(branch)}/products/${encode(route.item)}`\n : `/order/${encode(route.business)}`;\n }\n case \"cart\":\n case \"checkout\":\n case \"checkout-return\":\n case \"sign-in\":\n return routePathV1(menuRoute(route), options);\n case \"content-page\":\n return `/order/${encode(route.business)}${route.branch ? `/${encode(route.branch)}` : \"\"}/pages/${encode(route.slug)}`;\n case \"dine-in\":\n return `/dine-in/${encode(route.order)}`;\n case \"dine-in-menus\":\n return \"/dine-in/menus\";\n case \"self-service-menus\":\n return \"/self-service/menus\";\n case \"pay-point\":\n return `/pay-point/${encode(route.payPoint)}`;\n case \"beacon\":\n return `/beacons/${encode(route.beacon)}`;\n case \"link\":\n return `/links/${encode(route.link)}`;\n case \"collect-payment\":\n return \"/collect-payment\";\n case \"reservation\":\n return \"/reservation\";\n case \"pay-session\":\n return `/pay/${encode(route.session)}`;\n case \"payment-step\":\n return `/payment/${encode(route.payment)}${route.step === \"payment\" ? \"\" : `/${route.step}`}`;\n case \"payment-card\":\n return `/payment/card/${encode(route.transaction)}`;\n case \"profile\":\n return `/profile/${route.page}${route.order ? `/${encode(route.order)}` : \"\"}`;\n case \"explore\":\n return route.home ? \"/\" : \"/explore\";\n case \"unknown\":\n return route.pathname || \"/\";\n }\n};\n\nexport const buildV1 = (\n route: StorefrontRoute,\n options: StorefrontUrlOptions = {},\n) => {\n const internal = routePathV1(route, options);\n const publicRoute =\n route.type === \"item\" &&\n route.branch === undefined &&\n options.installation?.defaultBranch\n ? { ...route, branch: options.installation.defaultBranch }\n : route;\n const pathname = publicInstallationPath(\n internal,\n publicRoute,\n options.installation,\n );\n const query = v1Params(route).toString();\n const value = `${pathname}${query ? `?${query}` : \"\"}`;\n if (!options.origin) {\n return value;\n }\n try {\n return new URL(value, options.origin).toString();\n } catch {\n return value;\n }\n};\n","import { v2Params } from \"./params\";\nimport type { StorefrontInstallation, StorefrontRoute } from \"./types\";\n\nexport const signInFromOverlay = (\n route: Extract<StorefrontRoute, { type: \"order-menu\" }>,\n installation: StorefrontInstallation,\n): Extract<StorefrontRoute, { type: \"sign-in\" }> => {\n const params = v2Params(route, installation);\n params.delete(\"auth_modal_id\");\n const search = params.toString();\n return {\n type: \"sign-in\",\n business: route.business,\n state: { query: {} },\n returnTo: `/${search ? `?${search}` : \"\"}`,\n };\n};\n","import { routePathV1 } from \"./build-v1\";\nimport { CART_MODAL, CHECKOUT_MODAL, SIGN_IN_MODALS } from \"./contract\";\nimport { v2Params } from \"./params\";\nimport { signInFromOverlay } from \"./sign-in\";\nimport type {\n StorefrontInstallation,\n StorefrontRoute,\n StorefrontUrlOptions,\n} from \"./types\";\nimport { encode, ITEM_MODAL_PREFIX } from \"./url\";\n\nconst canonicalRoute = (\n route: StorefrontRoute,\n installation: StorefrontInstallation,\n): StorefrontRoute => {\n if (route.type !== \"order-menu\") {\n return route;\n }\n const common = {\n business: route.business,\n ...(route.branch !== undefined ? { branch: route.branch } : {}),\n state: route.state,\n };\n if (route.state.authModalId && SIGN_IN_MODALS.has(route.state.authModalId)) {\n return signInFromOverlay(route, installation);\n }\n if (route.state.modalId?.startsWith(ITEM_MODAL_PREFIX)) {\n return {\n type: \"item\",\n ...common,\n item: route.state.modalId.slice(ITEM_MODAL_PREFIX.length),\n };\n }\n if (route.state.modalId === CART_MODAL) {\n return { type: \"cart\", ...common };\n }\n if (route.state.modalId === CHECKOUT_MODAL) {\n return { type: \"checkout\", ...common };\n }\n return route;\n};\n\nconst profilePath = (route: Extract<StorefrontRoute, { type: \"profile\" }>) => {\n if (route.page === \"orders\") {\n return `/orders${route.order ? `/${encode(route.order)}` : \"\"}`;\n }\n if (route.page === \"edit\") {\n return \"/account\";\n }\n const page = route.page === \"add-store-credit\" ? \"store-credit\" : route.page;\n return `/account/${page}`;\n};\n\nconst routePathV2 = (route: StorefrontRoute, options: StorefrontUrlOptions) => {\n switch (route.type) {\n case \"order-menu\":\n return \"/\";\n case \"item\":\n return `/item/${encode(route.item)}`;\n case \"cart\":\n return \"/cart\";\n case \"checkout\":\n return \"/checkout\";\n case \"checkout-return\":\n return \"/checkout/return\";\n case \"sign-in\":\n return \"/sign-in\";\n case \"content-page\":\n return `/pages/${encode(route.slug)}`;\n case \"profile\":\n return profilePath(route);\n default:\n return routePathV1(route, options);\n }\n};\n\nexport const buildV2 = (\n route: StorefrontRoute,\n options: StorefrontUrlOptions,\n) => {\n const installation = options.installation;\n if (!installation) {\n return \"\";\n }\n const canonical = canonicalRoute(route, installation);\n const pathname = routePathV2(canonical, options);\n const query = v2Params(canonical, installation).toString();\n return `${pathname}${query ? `?${query}` : \"\"}`;\n};\n","import { buildV1 } from \"./build-v1\";\nimport { buildV2 } from \"./build-v2\";\nimport { usesV2 } from \"./contract\";\nimport type { StorefrontRoute, StorefrontUrlOptions } from \"./types\";\n\n/**\n * Build a storefront URL from a route and its page state.\n * Uses v2 when installation metadata is present unless you select v1 explicitly.\n *\n * @param route - The destination and UI state to encode.\n * @param options - Contract, installation and optional origin for an absolute URL.\n * @returns The built path, or an absolute URL when the origin resolves successfully.\n */\nexport const buildStorefrontUrl = (\n route: StorefrontRoute,\n options: StorefrontUrlOptions = {},\n) => {\n const value = usesV2(options)\n ? buildV2(route, options)\n : buildV1(route, options);\n if (!options.origin) {\n return value;\n }\n try {\n return new URL(value, options.origin).toString();\n } catch {\n return value;\n }\n};\n","import { installationPath, normalizedPath, segment } from \"./installation\";\nimport {\n type StorefrontPageState,\n type StorefrontRoute,\n type StorefrontUrlInput,\n type StorefrontUrlOptions,\n} from \"./types\";\nimport { ITEM_MODAL_PREFIX, inputUrl, pageState } from \"./url\";\n\n/** Paths with no variable segment. Checked before ID_ROUTES: `/dine-in/menus` is not a dine-in order. */\nconst FIXED_ROUTES = {\n \"/dine-in/menus\": \"dine-in-menus\",\n \"/self-service/menus\": \"self-service-menus\",\n \"/collect-payment\": \"collect-payment\",\n \"/reservation\": \"reservation\",\n} as const;\n\n/** `/<prefix>/<id>` routes, where the one segment after the prefix names the resource. */\nconst ID_ROUTES = {\n \"dine-in\": (order, state) => ({ type: \"dine-in\", order, state }),\n \"pay-point\": (payPoint, state) => ({ type: \"pay-point\", payPoint, state }),\n beacons: (beacon, state) => ({ type: \"beacon\", beacon, state }),\n links: (link, state) => ({ type: \"link\", link, state }),\n pay: (session, state) => ({ type: \"pay-session\", session, state }),\n} satisfies Record<\n string,\n (id: string, state: StorefrontPageState) => StorefrontRoute\n>;\n\nconst isKeyOf = <T extends object>(\n table: T,\n key: string,\n): key is Extract<keyof T, string> => Object.hasOwn(table, key);\n\nexport const parseV1 = (\n input: StorefrontUrlInput,\n options: StorefrontUrlOptions = {},\n): StorefrontRoute => {\n try {\n const url = inputUrl(input);\n const state = pageState(url, \"v1\");\n const pathname = installationPath(\n normalizedPath(url.pathname),\n options.installation,\n );\n const parts = pathname.split(\"/\").filter(Boolean);\n\n if (parts[0] === \"order\" && parts[1]) {\n const business = segment(parts, 1);\n if (parts[2] === \"pages\" && parts.length === 4) {\n return {\n type: \"content-page\",\n business,\n slug: segment(parts, 3),\n state,\n };\n }\n const branch = parts[2] ? segment(parts, 2) : undefined;\n if (branch && parts[3] === \"pages\" && parts.length === 5) {\n return {\n type: \"content-page\",\n business,\n branch,\n slug: segment(parts, 4),\n state,\n };\n }\n if (branch && parts[3] === \"products\" && parts[4] && parts.length === 5) {\n return {\n type: \"item\",\n business,\n branch,\n item: segment(parts, 4),\n state,\n };\n }\n if (\n parts.length <= 3 ||\n (parts.length === 4 && parts[3] === \"products\")\n ) {\n const modalItem = state.modalId?.startsWith(ITEM_MODAL_PREFIX)\n ? state.modalId.slice(ITEM_MODAL_PREFIX.length)\n : \"\";\n if (branch && modalItem) {\n return {\n type: \"item\",\n business,\n branch,\n item: modalItem,\n state,\n };\n }\n return {\n type: \"order-menu\",\n business,\n ...(branch ? { branch } : {}),\n ...(parts[3] === \"products\" ? { cataloguePath: true } : {}),\n state,\n };\n }\n }\n\n if (isKeyOf(FIXED_ROUTES, pathname)) {\n return { type: FIXED_ROUTES[pathname], state };\n }\n const [prefix = \"\", id] = parts;\n if (parts.length === 2 && id && isKeyOf(ID_ROUTES, prefix)) {\n return ID_ROUTES[prefix](segment(parts, 1), state);\n }\n if (\n parts[0] === \"payment\" &&\n parts[1] === \"card\" &&\n parts[2] &&\n parts.length === 3\n ) {\n return { type: \"payment-card\", transaction: segment(parts, 2), state };\n }\n if (parts[0] === \"payment\" && parts[1] && parts.length <= 3) {\n const step = parts[2];\n if (\n !step ||\n step === \"successful\" ||\n step === \"failed\" ||\n step === \"refunded\"\n ) {\n return {\n type: \"payment-step\",\n payment: segment(parts, 1),\n step:\n step === \"successful\" || step === \"failed\" || step === \"refunded\"\n ? step\n : \"payment\",\n state,\n };\n }\n }\n if (parts[0] === \"orders\" && parts.length <= 2) {\n return {\n type: \"profile\",\n page: \"orders\",\n ...(parts[1] ? { order: segment(parts, 1) } : {}),\n state,\n };\n }\n if (parts[0] === \"profile\" && parts[1] && parts.length <= 3) {\n const page = parts[1];\n if (\n page === \"add-store-credit\" ||\n page === \"edit\" ||\n page === \"payment-methods\" ||\n page === \"transactions\"\n ) {\n return { type: \"profile\", page, state };\n }\n if (page === \"orders\") {\n return {\n type: \"profile\",\n page,\n ...(parts[2] ? { order: segment(parts, 2) } : {}),\n state,\n };\n }\n }\n if (pathname === \"/\" || pathname === \"/explore\") {\n return {\n type: \"explore\",\n ...(pathname === \"/\" ? { home: true } : {}),\n state,\n };\n }\n return { type: \"unknown\", pathname, state };\n } catch {\n return { type: \"unknown\", pathname: \"\", state: { query: {} } };\n }\n};\n","import { CART_MODAL, CHECKOUT_MODAL, SIGN_IN_MODALS } from \"./contract\";\nimport { normalizedPath, segment } from \"./installation\";\nimport { parseV1 } from \"./parse-v1\";\nimport { signInFromOverlay } from \"./sign-in\";\nimport type {\n StorefrontPageState,\n StorefrontRoute,\n StorefrontUrlInput,\n StorefrontUrlOptions,\n} from \"./types\";\nimport { ITEM_MODAL_PREFIX, inputUrl, pageState } from \"./url\";\n\nconst branch = (url: URL) =>\n url.searchParams.has(\"branch\")\n ? { branch: url.searchParams.get(\"branch\") ?? \"\" }\n : {};\n\nconst canonical = (\n url: URL,\n state: StorefrontPageState,\n business: string,\n): StorefrontRoute | null => {\n const pathname = normalizedPath(url.pathname);\n const parts = pathname.split(\"/\").filter(Boolean);\n const scoped = branch(url);\n if (pathname === \"/\") {\n return { type: \"order-menu\", business, ...scoped, state };\n }\n if (parts[0] === \"item\" && parts[1] && parts.length === 2) {\n return {\n type: \"item\",\n business,\n ...scoped,\n item: segment(parts, 1),\n state,\n };\n }\n if (pathname === \"/cart\" || pathname === \"/checkout\") {\n return {\n type: pathname === \"/cart\" ? \"cart\" : \"checkout\",\n business,\n ...scoped,\n state,\n };\n }\n if (pathname === \"/checkout/return\") {\n const session = url.searchParams.get(\"session\");\n return {\n type: \"checkout-return\",\n business,\n ...scoped,\n ...(session !== null ? { session } : {}),\n state,\n };\n }\n if (pathname === \"/sign-in\") {\n const returnTo = url.searchParams.get(\"return\");\n return {\n type: \"sign-in\",\n business,\n ...scoped,\n ...(returnTo !== null ? { returnTo } : {}),\n state,\n };\n }\n if (parts[0] === \"pages\" && parts[1] && parts.length === 2) {\n return {\n type: \"content-page\",\n business,\n ...scoped,\n slug: segment(parts, 1),\n state,\n };\n }\n if (parts[0] === \"orders\" && parts.length <= 2) {\n return {\n type: \"profile\",\n page: \"orders\",\n ...(parts[1] ? { order: segment(parts, 1) } : {}),\n state,\n };\n }\n if (parts[0] === \"account\" && parts.length <= 2) {\n const pages = {\n \"payment-methods\": \"payment-methods\",\n transactions: \"transactions\",\n \"store-credit\": \"add-store-credit\",\n } as const;\n if (parts.length === 1) {\n return { type: \"profile\", page: \"edit\", state };\n }\n const page = parts[1];\n if (page && Object.hasOwn(pages, page)) {\n return {\n type: \"profile\",\n page: pages[page as keyof typeof pages],\n state,\n };\n }\n }\n return null;\n};\n\nconst overlay = (\n route: StorefrontRoute,\n installation: NonNullable<StorefrontUrlOptions[\"installation\"]>,\n): StorefrontRoute => {\n if (route.type !== \"order-menu\") {\n return route;\n }\n const { authModalId, modalId } = route.state;\n if (authModalId && SIGN_IN_MODALS.has(authModalId)) {\n return signInFromOverlay(route, installation);\n }\n if (modalId?.startsWith(ITEM_MODAL_PREFIX)) {\n return {\n type: \"item\",\n business: route.business,\n ...(route.branch !== undefined ? { branch: route.branch } : {}),\n item: modalId.slice(ITEM_MODAL_PREFIX.length),\n state: route.state,\n };\n }\n if (modalId === CART_MODAL || modalId === CHECKOUT_MODAL) {\n return {\n type: modalId === CART_MODAL ? \"cart\" : \"checkout\",\n business: route.business,\n ...(route.branch !== undefined ? { branch: route.branch } : {}),\n state: route.state,\n };\n }\n return route;\n};\n\nexport const parseV2 = (\n input: StorefrontUrlInput,\n options: StorefrontUrlOptions,\n): StorefrontRoute => {\n try {\n const url = inputUrl(input);\n const state = pageState(url);\n const installation = options.installation;\n if (!installation) {\n return parseV1(input, options);\n }\n const route = canonical(url, state, installation.business);\n if (route) {\n return route.type === \"order-menu\" ? overlay(route, installation) : route;\n }\n return overlay(\n parseV1(input, { ...options, contract: \"v1\" }),\n installation,\n );\n } catch {\n return { type: \"unknown\", pathname: \"\", state: { query: {} } };\n }\n};\n","import { usesV2 } from \"./contract\";\nimport { parseV1 } from \"./parse-v1\";\nimport { parseV2 } from \"./parse-v2\";\nimport type {\n StorefrontRoute,\n StorefrontUrlInput,\n StorefrontUrlOptions,\n} from \"./types\";\n\n/**\n * Parse a storefront URL into a route and its page state.\n * Uses v2 when installation metadata is present unless you select v1 explicitly.\n *\n * @param input - A URL string, URL object or Request.\n * @param options - Contract, installation and origin settings.\n * @returns A recognized route or an unknown route retaining the pathname.\n */\nexport const parseStorefrontUrl = (\n input: StorefrontUrlInput,\n options: StorefrontUrlOptions = {},\n): StorefrontRoute =>\n usesV2(options) ? parseV2(input, options) : parseV1(input, options);\n","import { buildStorefrontUrl } from \"./build\";\nimport { usesV2 } from \"./contract\";\nimport { normalizedPath } from \"./installation\";\nimport { parseStorefrontUrl } from \"./parse\";\nimport type { StorefrontUrlInput, StorefrontUrlOptions } from \"./types\";\nimport { inputUrl } from \"./url\";\n\nconst comparable = (value: string | URL) => {\n const url = inputUrl(value);\n url.searchParams.sort();\n return `${normalizedPath(url.pathname)}${url.search}`;\n};\n\n/**\n * Find the canonical v2 URL for a recognized storefront route.\n * Compares normalized paths and sorted query parameters to avoid unnecessary redirects.\n *\n * @returns A redirect target, or null for v1, an unknown route, a parse/build failure or an equivalent URL.\n */\nexport const storefrontRedirect = (\n input: StorefrontUrlInput,\n options: StorefrontUrlOptions = {},\n): string | null => {\n if (!usesV2(options)) {\n return null;\n }\n try {\n const route = parseStorefrontUrl(input, options);\n if (route.type === \"unknown\") {\n return null;\n }\n const target = buildStorefrontUrl(route, options);\n return comparable(inputUrl(input)) === comparable(target) ? null : target;\n } catch {\n return null;\n }\n};\n"]}
|