dynamodb-reactive 0.1.0 → 0.1.3
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/dist/chunk-HZ6JHAJJ.js +131 -0
- package/dist/chunk-HZ6JHAJJ.js.map +1 -0
- package/dist/chunk-IPEBRXIL.js +658 -0
- package/dist/chunk-IPEBRXIL.js.map +1 -0
- package/dist/client.d.ts +55 -2
- package/dist/client.js +2 -17
- package/dist/client.js.map +1 -1
- package/dist/core.d.ts +4 -2
- package/dist/core.js +2 -17
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +171 -2
- package/dist/index.js +2 -17
- package/dist/index.js.map +1 -1
- package/dist/infra.d.ts +189 -2
- package/dist/infra.js +358 -15
- package/dist/infra.js.map +1 -1
- package/dist/react-BMZQ8Mth.d.ts +371 -0
- package/dist/react.d.ts +3 -2
- package/dist/react.js +2 -17
- package/dist/react.js.map +1 -1
- package/dist/server.d.ts +631 -2
- package/dist/server.js +1696 -16
- package/dist/server.js.map +1 -1
- package/dist/table-CfIWxbuJ.d.ts +85 -0
- package/dist/types-DeshTSf5.d.ts +141 -0
- package/package.json +10 -6
- package/dist/client.d.ts.map +0 -1
- package/dist/core.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/infra.d.ts.map +0 -1
- package/dist/react.d.ts.map +0 -1
- package/dist/server.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../client/src/patcher.ts","../../client/src/websocket.ts","../../client/src/client.ts","../../client/src/react.tsx"],"names":[],"mappings":";;;;;AAIA,IAAM,EAAE,YAAW,GAAI,SAAA;AAKhB,SAAS,YAAA,CAAgB,UAAa,OAAA,EAAyB;AACpE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAA0B,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,KAAU;AACrD,IAAA,MAAM,EAAA,GAAgB;AAAA,MACpB,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,MAAM,KAAA,CAAM;AAAA,KACd;AAEA,IAAA,IAAI,OAAA,IAAW,KAAA,IAAS,KAAA,CAAM,KAAA,KAAU,MAAA,EAAW;AACjD,MAAC,EAAA,CAA0B,QAAQ,KAAA,CAAM,KAAA;AAAA,IAC3C;AACA,IAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,EAAW;AAC/C,MAAC,EAAA,CAAwB,OAAO,KAAA,CAAM,IAAA;AAAA,IACxC;AAEA,IAAA,OAAO,EAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,UAAA;AAAA,MACb,gBAAgB,QAAQ,CAAA;AAAA,MACxB,UAAA;AAAA,MACA,IAAA;AAAA;AAAA,MACA;AAAA;AAAA,KACF;AAEA,IAAA,OAAO,MAAA,CAAO,WAAA;AAAA,EAChB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,4BAA4B,KAAK,CAAA;AAC/C,IAAA,MAAM,KAAA;AAAA,EACR;AACF;;;AChCO,IAAM,mBAAN,MAAuB;AAAA,EACpB,MAAA;AAAA,EAOA,EAAA,GAAuB,IAAA;AAAA,EACvB,KAAA,GAAyB,cAAA;AAAA,EACzB,iBAAA,GAAoB,CAAA;AAAA,EACpB,cAAA,GAAuD,IAAA;AAAA,EACvD,eAAgC,EAAC;AAAA,EACjC,eAAA,uBAAsB,GAAA,EAAsC;AAAA,EAC5D,aAAA,uBAAoB,GAAA,EAAsC;AAAA,EAElE,YAAY,MAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,aAAA,EAAe,IAAA;AAAA,MACf,cAAA,EAAgB,GAAA;AAAA,MAChB,oBAAA,EAAsB,EAAA;AAAA,MACtB,GAAG;AAAA,KACL;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAA4B;AAC1B,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,WAAA,IAAe,IAAA,CAAK,UAAU,YAAA,EAAc;AAC7D,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,QAAA,EAAS;AAChC,MAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,GAAG,CAAA;AAE3B,MAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AACrB,QAAA,IAAA,CAAK,SAAS,WAAW,CAAA;AACzB,QAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AACzB,QAAA,IAAA,CAAK,iBAAA,EAAkB;AACvB,QAAA,IAAA,CAAK,OAAO,SAAA,IAAY;AAAA,MAC1B,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AAC3B,QAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,QAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAC5B,QAAA,IAAA,CAAK,OAAO,YAAA,IAAe;AAE3B,QAAA,IAAI,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,CAAC,MAAM,QAAA,EAAU;AAChD,UAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,QACzB;AAAA,MACF,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,iBAAiB,CAAA;AACzC,QAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,MAC7B,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAAU;AAC7B,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AACrC,UAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AAAA,QAC5B,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAK,CAAA;AAAA,QAC3D;AAAA,MACF,CAAA;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAC5B,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,QACV,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,OAC1D;AAEA,MAAA,IAAI,IAAA,CAAK,OAAO,aAAA,EAAe;AAC7B,QAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,YAAA,CAAa,KAAK,cAAc,CAAA;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAEA,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,EAAA,CAAG,KAAA,CAAM,GAAA,EAAM,mBAAmB,CAAA;AACvC,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AAAA,IACZ;AAEA,IAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,OAAA,EAA8B;AAEjC,IAAA,IAAI,KAAK,KAAA,KAAU,WAAA,IAAe,KAAK,EAAA,EAAI,UAAA,KAAe,UAAU,IAAA,EAAM;AACxE,MAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACtC,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,OAAO,CAAA;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAAA,EAAuD;AAC/D,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,OAAO,CAAA;AAChC,IAAA,OAAO,MAAM,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,OAAA,EAAuD;AACnE,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAC9B,IAAA,OAAO,MAAM,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA;AAAA,EAChD;AAAA,EAEA,MAAc,QAAA,GAA4B;AACxC,IAAA,IAAI,GAAA,GAAM,KAAK,MAAA,CAAO,GAAA;AAEtB,IAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM;AACpB,MAAA,MAAM,KAAA,GACJ,OAAO,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,UAAA,GACxB,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK,GACvB,IAAA,CAAK,MAAA,CAAO,IAAA;AAElB,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,QAAA,CAAS,GAAG,IAAI,GAAA,GAAM,GAAA;AAC5C,MAAA,GAAA,GAAM,GAAG,GAAG,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,SAAS,KAAA,EAA8B;AAC7C,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,aAAA,EAAe;AACxC,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,cAAc,OAAA,EAA8B;AAClD,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,eAAA,EAAiB;AAC1C,MAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAsB;AAC9D,MAAA,OAAA,CAAQ,MAAM,mCAAmC,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAC5B,IAAA,IAAA,CAAK,iBAAA,EAAA;AAGL,IAAA,MAAM,QACJ,IAAA,CAAK,GAAA;AAAA,MACH,IAAA,CAAK,OAAO,cAAA,GAAiB,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAAA,MACnE;AAAA;AAAA,KACF,IACC,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,CAAA;AAEzB,IAAA,IAAA,CAAK,cAAA,GAAiB,WAAW,MAAM;AACrC,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AACtB,MAAA,KAAK,KAAK,OAAA,EAAQ;AAAA,IACpB,GAAG,KAAK,CAAA;AAAA,EACV;AAAA,EAEQ,iBAAA,GAA0B;AAChC,IAAA,MAAM,QAAQ,IAAA,CAAK,YAAA;AACnB,IAAA,IAAA,CAAK,eAAe,EAAC;AAErB,IAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,MAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,IACnB;AAAA,EACF;AACF;;;AC/LA,SAAS,UAAA,GAAqB;AAC5B,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACpE;AA2BO,IAAM,iBAAN,MAAqB;AAAA,EAClB,SAAA;AAAA,EACA,aAAA,uBAAoB,GAAA,EAAwC;AAAA,EAC5D,YAAA,uBAAmB,GAAA,EAAyB;AAAA,EAC5C,eAAA,GAAmC,cAAA;AAAA,EACnC,cAAA,uBAAqB,GAAA,EAAsC;AAAA,EAEnE,YAAY,MAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,MAAM,CAAA;AAG5C,IAAA,IAAA,CAAK,UAAU,SAAA,CAAU,CAAC,YAAY,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AAGjE,IAAA,IAAA,CAAK,SAAA,CAAU,aAAA,CAAc,CAAC,KAAA,KAAU;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,KAAA;AACvB,MAAA,IAAA,CAAK,oBAAA,EAAqB;AAE1B,MAAA,IAAI,UAAU,WAAA,EAAa;AACzB,QAAA,IAAA,CAAK,cAAA,EAAe;AAAA,MACtB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,IAAA,CAAK,UAAU,OAAA,EAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,UAAU,UAAA,EAAW;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAAsC;AACpC,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,wBACE,QAAA,EACY;AACZ,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,QAAQ,CAAA;AAChC,IAAA,OAAO,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,QAAQ,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,CACE,IAAA,EACA,OAAA,GAAwC,EAAC,EACpB;AACrB,IAAA,MAAM,KAAK,UAAA,EAAW;AAEtB,IAAA,MAAM,KAAA,GAAkC;AAAA,MACtC,EAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,sBAAe,GAAA,EAAI;AAAA,MACnB;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAA,EAAI,KAAmC,CAAA;AAG9D,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,MAClB,IAAA,EAAM,WAAA;AAAA,MACN,cAAA,EAAgB,EAAA;AAAA,MAChB,IAAA;AAAA,MACA,OAAO,OAAA,CAAQ;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,YAAA,GAAoC;AAAA,MACxC,IAAI,IAAA,GAAO;AACT,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACf,CAAA;AAAA,MACA,IAAI,OAAA,GAAU;AACZ,QAAA,OAAO,KAAA,CAAM,OAAA;AAAA,MACf,CAAA;AAAA,MACA,IAAI,KAAA,GAAQ;AACV,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf,CAAA;AAAA,MACA,WAAA,EAAa,MAAM,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAAA,MACtC,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,EAAE;AAAA,KAChC;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,CAAsB,IAAA,EAAc,KAAA,EAAiC;AACzE,IAAA,MAAM,SAAS,UAAA,EAAW;AAE1B,IAAA,OAAO,IAAI,OAAA,CAAiB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC/C,MAAA,IAAA,CAAK,YAAA,CAAa,IAAI,MAAA,EAAQ;AAAA,QAC5B,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,QAClB,IAAA,EAAM,MAAA;AAAA,QACN,MAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAGD,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAI,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA,EAAG;AACjC,UAAA,IAAA,CAAK,YAAA,CAAa,OAAO,MAAM,CAAA;AAC/B,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,cAAc,CAAC,CAAA;AAAA,QAClC;AAAA,MACF,GAAG,GAAK,CAAA;AAAA,IACV,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,EAAA,EAAkB;AACpC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACvC,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAE5B,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,MAClB,IAAA,EAAM,aAAA;AAAA,MACN,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,QAAQ,EAAA,EAA2B;AAC/C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACvC,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,IAAA,IAAA,CAAK,4BAA4B,EAAE,CAAA;AAGnC,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,MAClB,IAAA,EAAM,WAAA;AAAA,MACN,cAAA,EAAgB,EAAA;AAAA,MAChB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM;AAAA,KACd,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,OAAA,EAA8B;AAClD,IAAA,QAAQ,QAAQ,IAAA;AAAM,MACpB,KAAK,UAAA;AACH,QAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,cAAA,EAAgB,OAAA,CAAQ,IAAI,CAAA;AACxD,QAAA;AAAA,MAEF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,WAAA,CAAY,OAAA,CAAQ,cAAA,EAAgB,OAAA,CAAQ,OAAO,CAAA;AACxD,QAAA;AAAA,MAEF,KAAK,QAAA;AACH,QAAA,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA;AAC9C,QAAA;AAAA,MAEF,KAAK,OAAA;AACH,QAAA,IAAA,CAAK,YAAY,OAAO,CAAA;AACxB,QAAA;AAAA;AACJ,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,gBAAwB,IAAA,EAAqB;AAClE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,IAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAChB,IAAA,KAAA,CAAM,KAAA,GAAQ,MAAA;AAEd,IAAA,IAAA,CAAK,4BAA4B,cAAc,CAAA;AAC/C,IAAA,KAAA,CAAM,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,gBAAwB,OAAA,EAA4B;AACtE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA;AACnD,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,EAAW;AAExC,IAAA,IAAI;AACF,MAAA,KAAA,CAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,IAAA,EAAM,OAAO,CAAA;AAC7C,MAAA,IAAA,CAAK,4BAA4B,cAAc,CAAA;AAC/C,MAAA,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,KAAA,CAAM,IAAI,CAAA;AAAA,IACnC,SAAS,KAAA,EAAO;AACd,MAAA,KAAA,CAAM,KAAA,GAAQ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACtE,MAAA,IAAA,CAAK,4BAA4B,cAAc,CAAA;AAC/C,MAAA,KAAA,CAAM,OAAA,CAAQ,OAAA,GAAU,KAAA,CAAM,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,QAAgB,IAAA,EAAqB;AACxD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,MAAM,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAA,CAAK,YAAA,CAAa,OAAO,MAAM,CAAA;AAC/B,IAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAA,EAIX;AACP,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAEvC,IAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,QAAQ,cAAc,CAAA;AAC3D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,QAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAChB,QAAA,IAAA,CAAK,2BAAA,CAA4B,QAAQ,cAAc,CAAA;AACvD,QAAA,KAAA,CAAM,OAAA,CAAQ,UAAU,KAAK,CAAA;AAAA,MAC/B;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,QAAQ,MAAM,CAAA;AACpD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACvC,QAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAuB;AAC7B,IAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,KAAK,aAAA,EAAe;AAC5C,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,sBAAA,KAA2B,KAAA,EAAO;AAClD,QAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,QAAA,IAAA,CAAK,4BAA4B,EAAE,CAAA;AAEnC,QAAA,IAAA,CAAK,UAAU,IAAA,CAAK;AAAA,UAClB,IAAA,EAAM,WAAA;AAAA,UACN,cAAA,EAAgB,EAAA;AAAA,UAChB,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,OAAO,KAAA,CAAM;AAAA,SACd,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,4BAA4B,EAAA,EAAkB;AACpD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACvC,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,KAAA,MAAW,QAAA,IAAY,MAAM,SAAA,EAAW;AACtC,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAA,GAA6B;AACnC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,cAAA,EAAgB;AAC1C,MAAA,QAAA,CAAS,KAAK,eAAe,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAA,CAAwB,IAAY,QAAA,EAAkC;AACpE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AACvC,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,MAAM;AAAA,IAAC,CAAA;AAE1B,IAAA,KAAA,CAAM,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC5B,IAAA,OAAO,MAAM,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBACE,EAAA,EACsC;AACtC,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA;AAAA,EAClC;AACF;AAKO,SAAS,qBACd,MAAA,EAC8B;AAC9B,EAAA,MAAM,MAAA,GAAS,IAAI,cAAA,CAAe,MAAM,CAAA;AACxC,EAAA,OAAO,gBAAA,CAAiB,MAAA,EAAQ,EAAE,CAAA;AACpC;AA2BA,SAAS,gBAAA,CAAiB,QAAwB,IAAA,EAAyB;AACzE,EAAA,OAAO,IAAI,KAAA;AAAA,IACT,EAAC;AAAA,IACD;AAAA,MACE,GAAA,CAAI,SAAS,IAAA,EAAM;AACjB,QAAA,IAAI,IAAA,KAAS,WAAW,OAAO,MAAA;AAC/B,QAAA,IAAI,IAAA,KAAS,SAAA,EAAW,OAAO,MAAM,OAAO,OAAA,EAAQ;AACpD,QAAA,IAAI,IAAA,KAAS,YAAA,EAAc,OAAO,MAAM,OAAO,UAAA,EAAW;AAE1D,QAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,MAAA;AAErC,QAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,EAAM,IAAI,CAAA;AAG9B,QAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,UAAA,OAAO,CAAC,OAAiB,OAAA,KAA2C;AAClE,YAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAChC,YAAA,OAAO,OAAO,SAAA,CAAU,UAAA,EAAY,EAAE,GAAG,OAAA,EAAS,OAAO,CAAA;AAAA,UAC3D,CAAA;AAAA,QACF;AAEA,QAAA,IAAI,SAAS,QAAA,EAAU;AACrB,UAAA,OAAO,OAAO,KAAA,KAAmB;AAC/B,YAAA,MAAM,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAChC,YAAA,OAAO,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA;AAAA,UACtC,CAAA;AAAA,QACF;AAEA,QAAA,OAAO,gBAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,MACzC;AAAA;AACF,GACF;AACF;AC5ZA,IAAM,qBAAA,GAAwB,cAAqC,IAAI,CAAA;AAQhE,SAAS,sBAAA,CAAuB;AAAA,EACrC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,EAAQ;AACV,CAAA,EAIG;AAED,EAAA,MAAM,MAAM,MAAA,EAAQ,GAAA;AACpB,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAG,CAAA;AAI1B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA;AAAA,IAC1B,cAAA,IAAkB;AAAA,GACpB;AAGA,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,cAAA,IAAkB,CAAC,GAAA,EAAK;AAG5B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,YAAY,IAAI,cAAA,CAAe,EAAE,GAAG,MAAA,EAAQ,KAAK,CAAA;AACvD,MAAA,SAAA,CAAU,SAAS,CAAA;AAAA,IACrB;AAAA,EAEF,CAAA,EAAG,CAAC,GAAA,EAAK,cAAc,CAAC,CAAA;AAGxB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,KAAK,OAAO,OAAA,EAAQ;AAEpB,IAAA,OAAO,MAAM;AACX,MAAA,MAAA,CAAO,UAAA,EAAW;AAAA,IACpB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,EAAe;AACrD,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,2BACG,qBAAA,CAAsB,QAAA,EAAtB,EAA+B,KAAA,EAAO,QACpC,QAAA,EACH,CAAA;AAEJ;AAMO,SAAS,iBAAA,GAA2C;AACzD,EAAA,OAAO,WAAW,qBAAqB,CAAA;AACzC;AAKO,SAAS,wBAAA,GAA2C;AACzD,EAAA,MAAM,MAAA,GAAS,WAAW,qBAAqB,CAAA;AAC/C,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAMO,SAAS,kBAAA,GAAmD;AACjE,EAAA,MAAM,SAAS,iBAAA,EAAkB;AAEjC,EAAA,OAAO,oBAAA;AAAA,IACL,CAAC,QAAA,KAAa;AACZ,MAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,MAAM;AAAA,MAAC,CAAA;AAC3B,MAAA,OAAO,MAAA,CAAO,wBAAwB,QAAQ,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,MAAO,MAAA,GAAS,MAAA,CAAO,kBAAA,EAAmB,GAAI,UAAA;AAAA,IAC9C,MAAM;AAAA,GACR;AACF;AAMO,SAAS,eAAA,CACd,IAAA,EACA,OAAA,GAAwC,EAAC,EAOzC;AACA,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,MAAM,eAAA,GAAkB,OAAmC,IAAI,CAAA;AAC/D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAIvB;AAAA,IACD,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,CAAC,MAAA,GAAS,KAAA,GAAQ,IAAA;AAAA,IAC3B,KAAA,EAAO;AAAA,GACR,CAAA;AAGD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AAE7C,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA;AACzC,EAAA,SAAA,CAAU,UAAU,OAAA,CAAQ,MAAA;AAC5B,EAAA,UAAA,CAAW,UAAU,OAAA,CAAQ,OAAA;AAE7B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,MAAA,EAAQ;AAGb,IAAA,MAAM,KAAA,GAAQ,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,GAAI,MAAA;AAEhD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,SAAA,CAAiB,IAAA,EAAM;AAAA,MACjD,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChB,QAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,UAClB,GAAG,IAAA;AAAA,UACH,IAAA;AAAA,UACA,OAAA,EAAS,KAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT,CAAE,CAAA;AACF,QAAA,SAAA,CAAU,UAAU,IAAI,CAAA;AAAA,MAC1B,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,QAAA,CAAS,CAAC,IAAA,MAAU;AAAA,UAClB,GAAG,IAAA;AAAA,UACH,KAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACX,CAAE,CAAA;AACF,QAAA,UAAA,CAAW,UAAU,KAAK,CAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AAED,IAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAG1B,IAAA,QAAA,CAAS;AAAA,MACP,MAAM,YAAA,CAAa,IAAA;AAAA,MACnB,SAAS,YAAA,CAAa,OAAA;AAAA,MACtB,OAAO,YAAA,CAAa;AAAA,KACrB,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,WAAA,EAAY;AACzB,MAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAAA,IAC5B,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAC,CAAA;AAE3B,EAAA,MAAM,UAAU,YAAY;AAC1B,IAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,MAAA,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,MAAK,CAAE,CAAA;AAC/C,MAAA,MAAM,eAAA,CAAgB,QAAQ,OAAA,EAAQ;AAAA,IACxC;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAU,CAAC,MAAA;AAAA,IACX;AAAA,GACF;AACF;AAMO,SAAS,YACd,IAAA,EAQA;AACA,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAIvB;AAAA,IACD,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,OAAO,KAAA,KAAoC;AACxD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IACrE;AAEA,IAAA,QAAA,CAAS,CAAC,UAAU,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,MAAA,EAAU,CAAE,CAAA;AAEjE,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,IAAA,CAAsB,MAAM,KAAK,CAAA;AAC7D,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,KAAA,EAAO,KAAA,EAAO,QAAW,CAAA;AAC3D,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,GAAA,GAAM,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpE,MAAA,QAAA,CAAS,CAAC,UAAU,EAAE,GAAG,MAAM,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAA,EAAI,CAAE,CAAA;AAC5D,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,EAAW,SAAS,KAAA,EAAO,KAAA,EAAO,QAAW,CAAA;AAAA,EAChE,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,GAAG,KAAA;AAAA,IACH,UAAU,CAAC,MAAA;AAAA,IACX;AAAA,GACF;AACF;AAKO,SAAS,mBAAA,GAAsB;AACpC,EAAA,OAAO;AAAA,IACL,iBAAiB,CACf,IAAA,EACA,OAAA,KACG,eAAA,CAAuB,MAAM,OAAO,CAAA;AAAA,IAEzC,WAAA,EAAa,CACX,IAAA,KACG,WAAA,CAA6B,IAAI,CAAA;AAAA,IAEtC,kBAAA;AAAA,IACA;AAAA,GACF;AACF;AAKO,SAAS,qBAAsC,IAAA,EAAc;AAClE,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,CACf,KAAA,EACA,OAAA,KACG,eAAA,CAAyB,MAAM,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,IAEzD,WAAA,EAAa,MAAM,WAAA,CAA6B,IAAI;AAAA,GACtD;AACF","file":"chunk-IPEBRXIL.js","sourcesContent":["import jsonpatch, { type Operation } from 'fast-json-patch';\n\nimport type { JsonPatch } from './types.js';\n\nconst { applyPatch } = jsonpatch;\n\n/**\n * Apply JSON patches to a document\n */\nexport function applyPatches<T>(document: T, patches: JsonPatch[]): T {\n if (patches.length === 0) {\n return document;\n }\n\n const operations: Operation[] = patches.map((patch) => {\n const op: Operation = {\n op: patch.op,\n path: patch.path,\n } as Operation;\n\n if ('value' in patch && patch.value !== undefined) {\n (op as { value: unknown }).value = patch.value;\n }\n if ('from' in patch && patch.from !== undefined) {\n (op as { from: string }).from = patch.from;\n }\n\n return op;\n });\n\n try {\n const result = applyPatch(\n structuredClone(document),\n operations,\n true, // Validate operations\n false, // Don't mutate the original\n );\n\n return result.newDocument as T;\n } catch (error) {\n console.error('Failed to apply patches:', error);\n throw error;\n }\n}\n","/* eslint-disable no-console */\nimport type {\n ClientMessage,\n ConnectionState,\n ReactiveClientConfig,\n ServerMessage,\n} from './types.js';\n\n/**\n * WebSocket manager with automatic reconnection\n */\nexport class WebSocketManager {\n private config: Required<\n Omit<\n ReactiveClientConfig,\n 'auth' | 'onConnect' | 'onDisconnect' | 'onError'\n >\n > &\n ReactiveClientConfig;\n private ws: WebSocket | null = null;\n private state: ConnectionState = 'disconnected';\n private reconnectAttempts = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private messageQueue: ClientMessage[] = [];\n private messageHandlers = new Set<(message: ServerMessage) => void>();\n private stateHandlers = new Set<(state: ConnectionState) => void>();\n\n constructor(config: ReactiveClientConfig) {\n this.config = {\n autoReconnect: true,\n reconnectDelay: 1000,\n maxReconnectAttempts: 10,\n ...config,\n };\n }\n\n /**\n * Get current connection state\n */\n getState(): ConnectionState {\n return this.state;\n }\n\n /**\n * Connect to the WebSocket server\n */\n async connect(): Promise<void> {\n if (this.state === 'connected' || this.state === 'connecting') {\n return;\n }\n\n this.setState('connecting');\n\n try {\n const url = await this.buildUrl();\n this.ws = new WebSocket(url);\n\n this.ws.onopen = () => {\n this.setState('connected');\n this.reconnectAttempts = 0;\n this.flushMessageQueue();\n this.config.onConnect?.();\n };\n\n this.ws.onclose = (event) => {\n this.ws = null;\n this.setState('disconnected');\n this.config.onDisconnect?.();\n\n if (this.config.autoReconnect && !event.wasClean) {\n this.scheduleReconnect();\n }\n };\n\n this.ws.onerror = () => {\n const error = new Error('WebSocket error');\n this.config.onError?.(error);\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data) as ServerMessage;\n this.handleMessage(message);\n } catch (error) {\n console.error('Failed to parse WebSocket message:', error);\n }\n };\n } catch (error) {\n this.setState('disconnected');\n this.config.onError?.(\n error instanceof Error ? error : new Error(String(error)),\n );\n\n if (this.config.autoReconnect) {\n this.scheduleReconnect();\n }\n }\n }\n\n /**\n * Disconnect from the WebSocket server\n */\n disconnect(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (this.ws) {\n this.ws.close(1000, 'Client disconnect');\n this.ws = null;\n }\n\n this.setState('disconnected');\n }\n\n /**\n * Send a message to the server\n */\n send(message: ClientMessage): void {\n // Check both our state and the actual WebSocket readyState\n if (this.state === 'connected' && this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify(message));\n } else {\n // Queue message for when we reconnect\n this.messageQueue.push(message);\n }\n }\n\n /**\n * Subscribe to incoming messages\n */\n onMessage(handler: (message: ServerMessage) => void): () => void {\n this.messageHandlers.add(handler);\n return () => this.messageHandlers.delete(handler);\n }\n\n /**\n * Subscribe to connection state changes\n */\n onStateChange(handler: (state: ConnectionState) => void): () => void {\n this.stateHandlers.add(handler);\n return () => this.stateHandlers.delete(handler);\n }\n\n private async buildUrl(): Promise<string> {\n let url = this.config.url;\n\n if (this.config.auth) {\n const token =\n typeof this.config.auth === 'function'\n ? await this.config.auth()\n : this.config.auth;\n\n const separator = url.includes('?') ? '&' : '?';\n url = `${url}${separator}token=${encodeURIComponent(token)}`;\n }\n\n return url;\n }\n\n private setState(state: ConnectionState): void {\n this.state = state;\n for (const handler of this.stateHandlers) {\n handler(state);\n }\n }\n\n private handleMessage(message: ServerMessage): void {\n for (const handler of this.messageHandlers) {\n handler(message);\n }\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n console.error('Max reconnection attempts reached');\n return;\n }\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n\n // Exponential backoff with jitter\n const delay =\n Math.min(\n this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1),\n 30000, // Max 30 seconds\n ) *\n (0.5 + Math.random() * 0.5);\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n void this.connect();\n }, delay);\n }\n\n private flushMessageQueue(): void {\n const queue = this.messageQueue;\n this.messageQueue = [];\n\n for (const message of queue) {\n this.send(message);\n }\n }\n}\n","import { applyPatches } from './patcher.js';\nimport type {\n ConnectionState,\n JsonPatch,\n ReactiveClientConfig,\n ServerMessage,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\nimport { WebSocketManager } from './websocket.js';\n\n/**\n * Generate a unique subscription ID\n */\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * Internal subscription state\n */\ninterface SubscriptionState<TData> {\n id: string;\n path: string;\n input: unknown;\n data: TData | undefined;\n loading: boolean;\n error: Error | undefined;\n listeners: Set<() => void>;\n options: SubscriptionOptions<unknown>;\n}\n\n/**\n * Pending call state\n */\ninterface PendingCall {\n resolve: (data: unknown) => void;\n reject: (error: Error) => void;\n}\n\n/**\n * Reactive client for type-safe subscriptions\n */\nexport class ReactiveClient {\n private wsManager: WebSocketManager;\n private subscriptions = new Map<string, SubscriptionState<unknown>>();\n private pendingCalls = new Map<string, PendingCall>();\n private connectionState: ConnectionState = 'disconnected';\n private stateListeners = new Set<(state: ConnectionState) => void>();\n\n constructor(config: ReactiveClientConfig) {\n this.wsManager = new WebSocketManager(config);\n\n // Handle incoming messages\n this.wsManager.onMessage((message) => this.handleMessage(message));\n\n // Handle connection state changes\n this.wsManager.onStateChange((state) => {\n this.connectionState = state;\n this.notifyStateListeners();\n\n if (state === 'connected') {\n this.resubscribeAll();\n }\n });\n }\n\n /**\n * Connect to the server\n */\n async connect(): Promise<void> {\n await this.wsManager.connect();\n }\n\n /**\n * Disconnect from the server\n */\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Get current connection state\n */\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n\n /**\n * Subscribe to connection state changes\n */\n onConnectionStateChange(\n listener: (state: ConnectionState) => void,\n ): () => void {\n this.stateListeners.add(listener);\n return () => this.stateListeners.delete(listener);\n }\n\n /**\n * Subscribe to a procedure\n */\n subscribe<TData>(\n path: string,\n options: SubscriptionOptions<unknown> = {},\n ): Subscription<TData> {\n const id = generateId();\n\n const state: SubscriptionState<TData> = {\n id,\n path,\n input: options.input,\n data: undefined,\n loading: true,\n error: undefined,\n listeners: new Set(),\n options,\n };\n\n this.subscriptions.set(id, state as SubscriptionState<unknown>);\n\n // Send subscribe message\n this.wsManager.send({\n type: 'subscribe',\n subscriptionId: id,\n path,\n input: options.input,\n });\n\n const subscription: Subscription<TData> = {\n get data() {\n return state.data;\n },\n get loading() {\n return state.loading;\n },\n get error() {\n return state.error;\n },\n unsubscribe: () => this.unsubscribe(id),\n refetch: () => this.refetch(id),\n };\n\n return subscription;\n }\n\n /**\n * Call a mutation procedure\n */\n async call<TInput, TOutput>(path: string, input: TInput): Promise<TOutput> {\n const callId = generateId();\n\n return new Promise<TOutput>((resolve, reject) => {\n this.pendingCalls.set(callId, {\n resolve: resolve as (data: unknown) => void,\n reject,\n });\n\n this.wsManager.send({\n type: 'call',\n callId,\n path,\n input,\n });\n\n // Timeout after 30 seconds\n setTimeout(() => {\n if (this.pendingCalls.has(callId)) {\n this.pendingCalls.delete(callId);\n reject(new Error('Call timeout'));\n }\n }, 30000);\n });\n }\n\n /**\n * Unsubscribe from a subscription\n */\n private unsubscribe(id: string): void {\n const state = this.subscriptions.get(id);\n if (!state) return;\n\n this.subscriptions.delete(id);\n\n this.wsManager.send({\n type: 'unsubscribe',\n subscriptionId: id,\n });\n }\n\n /**\n * Refetch a subscription\n */\n private async refetch(id: string): Promise<void> {\n const state = this.subscriptions.get(id);\n if (!state) return;\n\n state.loading = true;\n this.notifySubscriptionListeners(id);\n\n // Re-send subscribe message to get fresh data\n this.wsManager.send({\n type: 'subscribe',\n subscriptionId: id,\n path: state.path,\n input: state.input,\n });\n }\n\n /**\n * Handle incoming server messages\n */\n private handleMessage(message: ServerMessage): void {\n switch (message.type) {\n case 'snapshot':\n this.handleSnapshot(message.subscriptionId, message.data);\n break;\n\n case 'patch':\n this.handlePatch(message.subscriptionId, message.patches);\n break;\n\n case 'result':\n this.handleResult(message.callId, message.data);\n break;\n\n case 'error':\n this.handleError(message);\n break;\n }\n }\n\n /**\n * Handle a snapshot message\n */\n private handleSnapshot(subscriptionId: string, data: unknown): void {\n const state = this.subscriptions.get(subscriptionId);\n if (!state) return;\n\n state.data = data;\n state.loading = false;\n state.error = undefined;\n\n this.notifySubscriptionListeners(subscriptionId);\n state.options.onData?.(data);\n }\n\n /**\n * Handle a patch message\n */\n private handlePatch(subscriptionId: string, patches: JsonPatch[]): void {\n const state = this.subscriptions.get(subscriptionId);\n if (!state || state.data === undefined) return;\n\n try {\n state.data = applyPatches(state.data, patches);\n this.notifySubscriptionListeners(subscriptionId);\n state.options.onData?.(state.data);\n } catch (error) {\n state.error = error instanceof Error ? error : new Error(String(error));\n this.notifySubscriptionListeners(subscriptionId);\n state.options.onError?.(state.error);\n }\n }\n\n /**\n * Handle a result message\n */\n private handleResult(callId: string, data: unknown): void {\n const pending = this.pendingCalls.get(callId);\n if (!pending) return;\n\n this.pendingCalls.delete(callId);\n pending.resolve(data);\n }\n\n /**\n * Handle an error message\n */\n private handleError(message: {\n message: string;\n subscriptionId?: string;\n callId?: string;\n }): void {\n const error = new Error(message.message);\n\n if (message.subscriptionId) {\n const state = this.subscriptions.get(message.subscriptionId);\n if (state) {\n state.error = error;\n state.loading = false;\n this.notifySubscriptionListeners(message.subscriptionId);\n state.options.onError?.(error);\n }\n }\n\n if (message.callId) {\n const pending = this.pendingCalls.get(message.callId);\n if (pending) {\n this.pendingCalls.delete(message.callId);\n pending.reject(error);\n }\n }\n }\n\n /**\n * Resubscribe to all subscriptions after reconnect\n */\n private resubscribeAll(): void {\n for (const [id, state] of this.subscriptions) {\n if (state.options.resubscribeOnReconnect !== false) {\n state.loading = true;\n this.notifySubscriptionListeners(id);\n\n this.wsManager.send({\n type: 'subscribe',\n subscriptionId: id,\n path: state.path,\n input: state.input,\n });\n }\n }\n }\n\n /**\n * Notify subscription listeners of state changes\n */\n private notifySubscriptionListeners(id: string): void {\n const state = this.subscriptions.get(id);\n if (!state) return;\n\n for (const listener of state.listeners) {\n listener();\n }\n }\n\n /**\n * Notify connection state listeners\n */\n private notifyStateListeners(): void {\n for (const listener of this.stateListeners) {\n listener(this.connectionState);\n }\n }\n\n /**\n * Add a listener for subscription state changes\n * Used internally by React hooks\n */\n addSubscriptionListener(id: string, listener: () => void): () => void {\n const state = this.subscriptions.get(id);\n if (!state) return () => {};\n\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n }\n\n /**\n * Get subscription state\n * Used internally by React hooks\n */\n getSubscriptionState<TData>(\n id: string,\n ): SubscriptionState<TData> | undefined {\n return this.subscriptions.get(id) as SubscriptionState<TData> | undefined;\n }\n}\n\n/**\n * Create a type-safe reactive client\n */\nexport function createReactiveClient<TRouter>(\n config: ReactiveClientConfig,\n): TypedReactiveClient<TRouter> {\n const client = new ReactiveClient(config);\n return createTypedProxy(client, []) as TypedReactiveClient<TRouter>;\n}\n\n/**\n * Type-safe client proxy type\n */\nexport type TypedReactiveClient<TRouter> = {\n [K in keyof TRouter]: TRouter[K] extends { query: any }\n ? {\n useSubscription: <TData = unknown>(\n input?: unknown,\n options?: Omit<SubscriptionOptions<unknown>, 'input'>,\n ) => Subscription<TData>;\n }\n : TRouter[K] extends { mutation: any }\n ? {\n mutate: <TInput, TOutput>(input: TInput) => Promise<TOutput>;\n }\n : TypedReactiveClient<TRouter[K]>;\n} & {\n _client: ReactiveClient;\n connect: () => Promise<void>;\n disconnect: () => void;\n};\n\n/**\n * Create a typed proxy for path-based access\n */\nfunction createTypedProxy(client: ReactiveClient, path: string[]): unknown {\n return new Proxy(\n {},\n {\n get(_target, prop) {\n if (prop === '_client') return client;\n if (prop === 'connect') return () => client.connect();\n if (prop === 'disconnect') return () => client.disconnect();\n\n if (typeof prop !== 'string') return undefined;\n\n const newPath = [...path, prop];\n\n // Check if this is a subscription or mutation\n if (prop === 'useSubscription') {\n return (input?: unknown, options?: SubscriptionOptions<unknown>) => {\n const parentPath = path.join('.');\n return client.subscribe(parentPath, { ...options, input });\n };\n }\n\n if (prop === 'mutate') {\n return async (input: unknown) => {\n const parentPath = path.join('.');\n return client.call(parentPath, input);\n };\n }\n\n return createTypedProxy(client, newPath);\n },\n },\n );\n}\n","/* eslint-disable no-console */\nimport {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\n\nimport { ReactiveClient } from './client.js';\nimport type {\n ConnectionState,\n ReactiveClientConfig,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\n\n/**\n * Context for the reactive client\n */\nconst ReactiveClientContext = createContext<ReactiveClient | null>(null);\n\n/**\n * Provider component for the reactive client\n *\n * If no config.url or client is provided, WebSocket features are disabled\n * and children are rendered without the reactive context.\n */\nexport function ReactiveClientProvider({\n children,\n config,\n client: externalClient,\n}: {\n children: ReactNode;\n config?: ReactiveClientConfig;\n client?: ReactiveClient;\n}) {\n // Extract URL for stable dependency\n const url = config?.url;\n const hasUrl = Boolean(url);\n\n // Always start with null to avoid hydration mismatch\n // Client will be created in useEffect after hydration\n const [client, setClient] = useState<ReactiveClient | null>(\n externalClient ?? null,\n );\n\n // Create client after mount (avoids hydration mismatch)\n useEffect(() => {\n // Skip if we have an external client or no URL\n if (externalClient || !url) return;\n\n // Create client if we don't have one\n if (!client) {\n const newClient = new ReactiveClient({ ...config, url });\n setClient(newClient);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, externalClient]);\n\n // Connect/disconnect effect\n useEffect(() => {\n if (!client) return;\n\n void client.connect();\n\n return () => {\n client.disconnect();\n };\n }, [client]);\n\n // Log warning if no URL configured (only once in dev)\n useEffect(() => {\n if (!hasUrl && process.env.NODE_ENV === 'development') {\n console.warn(\n '[dynamodb-reactive] WebSocket URL not configured, real-time features disabled',\n );\n }\n }, [hasUrl]);\n\n // Always render with context provider - hooks will handle null client\n return (\n <ReactiveClientContext.Provider value={client}>\n {children}\n </ReactiveClientContext.Provider>\n );\n}\n\n/**\n * Hook to get the reactive client\n * Returns null if WebSocket is not configured\n */\nexport function useReactiveClient(): ReactiveClient | null {\n return useContext(ReactiveClientContext);\n}\n\n/**\n * Hook to get the reactive client, throwing if not available\n */\nexport function useReactiveClientOrThrow(): ReactiveClient {\n const client = useContext(ReactiveClientContext);\n if (!client) {\n throw new Error(\n 'useReactiveClientOrThrow must be used within a ReactiveClientProvider with a configured URL',\n );\n }\n return client;\n}\n\n/**\n * Hook to get the connection state\n * Returns 'disabled' if WebSocket is not configured\n */\nexport function useConnectionState(): ConnectionState | 'disabled' {\n const client = useReactiveClient();\n\n return useSyncExternalStore(\n (callback) => {\n if (!client) return () => {};\n return client.onConnectionStateChange(callback);\n },\n () => (client ? client.getConnectionState() : 'disabled'),\n () => 'disabled' as const,\n );\n}\n\n/**\n * Hook for reactive subscriptions\n * Returns disabled state if WebSocket is not configured\n */\nexport function useSubscription<TData>(\n path: string,\n options: SubscriptionOptions<unknown> = {},\n): {\n data: TData | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n refetch: () => Promise<void>;\n} {\n const client = useReactiveClient();\n const subscriptionRef = useRef<Subscription<TData> | null>(null);\n const [state, setState] = useState<{\n data: TData | undefined;\n loading: boolean;\n error: Error | undefined;\n }>({\n data: undefined,\n loading: !client ? false : true,\n error: undefined,\n });\n\n // Serialize options for dependency comparison\n const inputKey = JSON.stringify(options.input);\n // Store callbacks in refs to avoid re-subscribing when they change\n const onDataRef = useRef(options.onData);\n const onErrorRef = useRef(options.onError);\n onDataRef.current = options.onData;\n onErrorRef.current = options.onError;\n\n useEffect(() => {\n if (!client) return;\n\n // Parse input from inputKey to ensure we use the serialized value\n const input = inputKey ? JSON.parse(inputKey) : undefined;\n\n const subscription = client.subscribe<TData>(path, {\n input,\n onData: (data) => {\n setState((prev) => ({\n ...prev,\n data: data as TData,\n loading: false,\n error: undefined,\n }));\n onDataRef.current?.(data);\n },\n onError: (error) => {\n setState((prev) => ({\n ...prev,\n error,\n loading: false,\n }));\n onErrorRef.current?.(error);\n },\n });\n\n subscriptionRef.current = subscription;\n\n // Update state from subscription\n setState({\n data: subscription.data,\n loading: subscription.loading,\n error: subscription.error,\n });\n\n return () => {\n subscription.unsubscribe();\n subscriptionRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, path, inputKey]);\n\n const refetch = async () => {\n if (subscriptionRef.current) {\n setState((prev) => ({ ...prev, loading: true }));\n await subscriptionRef.current.refetch();\n }\n };\n\n return {\n ...state,\n disabled: !client,\n refetch,\n };\n}\n\n/**\n * Hook for mutations\n * Throws if called when WebSocket is not configured\n */\nexport function useMutation<TInput, TOutput>(\n path: string,\n): {\n mutate: (input: TInput) => Promise<TOutput>;\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n reset: () => void;\n} {\n const client = useReactiveClient();\n const [state, setState] = useState<{\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n }>({\n data: undefined,\n loading: false,\n error: undefined,\n });\n\n const mutate = async (input: TInput): Promise<TOutput> => {\n if (!client) {\n throw new Error('WebSocket not configured - mutations are disabled');\n }\n\n setState((prev) => ({ ...prev, loading: true, error: undefined }));\n\n try {\n const result = await client.call<TInput, TOutput>(path, input);\n setState({ data: result, loading: false, error: undefined });\n return result;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n setState((prev) => ({ ...prev, loading: false, error: err }));\n throw err;\n }\n };\n\n const reset = () => {\n setState({ data: undefined, loading: false, error: undefined });\n };\n\n return {\n mutate,\n ...state,\n disabled: !client,\n reset,\n };\n}\n\n/**\n * Create typed React hooks from a router type\n */\nexport function createReactiveHooks() {\n return {\n useSubscription: <TPath extends string, TData = unknown>(\n path: TPath,\n options?: SubscriptionOptions<unknown>,\n ) => useSubscription<TData>(path, options),\n\n useMutation: <TPath extends string, TInput = unknown, TOutput = unknown>(\n path: TPath,\n ) => useMutation<TInput, TOutput>(path),\n\n useConnectionState,\n useReactiveClient,\n };\n}\n\n/**\n * Type-safe hook creator for a specific procedure path\n */\nexport function createProcedureHooks<TInput, TOutput>(path: string) {\n return {\n useSubscription: (\n input?: TInput,\n options?: Omit<SubscriptionOptions<TInput>, 'input'>,\n ) => useSubscription<TOutput>(path, { ...options, input }),\n\n useMutation: () => useMutation<TInput, TOutput>(path),\n };\n}\n"]}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,2 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { R as ReactiveClientConfig, C as ConnectionState, a as ClientMessage, S as ServerMessage, J as JsonPatch } from './react-BMZQ8Mth.js';
|
|
2
|
+
export { d as CallMessage, E as ErrorMessage, I as InferInput, e as InferOutput, P as PatchMessage, b as ReactiveClient, m as ReactiveClientProvider, f as ResultMessage, g as SnapshotMessage, h as SubscribeMessage, i as Subscription, j as SubscriptionOptions, T as TypedReactiveClient, U as UnsubscribeMessage, k as createProcedureHooks, c as createReactiveClient, l as createReactiveHooks, u as useConnectionState, n as useMutation, o as useReactiveClient, p as useReactiveClientOrThrow, q as useSubscription } from './react-BMZQ8Mth.js';
|
|
3
|
+
import 'react/jsx-runtime';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* WebSocket manager with automatic reconnection
|
|
8
|
+
*/
|
|
9
|
+
declare class WebSocketManager {
|
|
10
|
+
private config;
|
|
11
|
+
private ws;
|
|
12
|
+
private state;
|
|
13
|
+
private reconnectAttempts;
|
|
14
|
+
private reconnectTimer;
|
|
15
|
+
private messageQueue;
|
|
16
|
+
private messageHandlers;
|
|
17
|
+
private stateHandlers;
|
|
18
|
+
constructor(config: ReactiveClientConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Get current connection state
|
|
21
|
+
*/
|
|
22
|
+
getState(): ConnectionState;
|
|
23
|
+
/**
|
|
24
|
+
* Connect to the WebSocket server
|
|
25
|
+
*/
|
|
26
|
+
connect(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Disconnect from the WebSocket server
|
|
29
|
+
*/
|
|
30
|
+
disconnect(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Send a message to the server
|
|
33
|
+
*/
|
|
34
|
+
send(message: ClientMessage): void;
|
|
35
|
+
/**
|
|
36
|
+
* Subscribe to incoming messages
|
|
37
|
+
*/
|
|
38
|
+
onMessage(handler: (message: ServerMessage) => void): () => void;
|
|
39
|
+
/**
|
|
40
|
+
* Subscribe to connection state changes
|
|
41
|
+
*/
|
|
42
|
+
onStateChange(handler: (state: ConnectionState) => void): () => void;
|
|
43
|
+
private buildUrl;
|
|
44
|
+
private setState;
|
|
45
|
+
private handleMessage;
|
|
46
|
+
private scheduleReconnect;
|
|
47
|
+
private flushMessageQueue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Apply JSON patches to a document
|
|
52
|
+
*/
|
|
53
|
+
declare function applyPatches<T>(document: T, patches: JsonPatch[]): T;
|
|
54
|
+
|
|
55
|
+
export { ClientMessage, ConnectionState, JsonPatch, ReactiveClientConfig, ServerMessage, WebSocketManager, applyPatches };
|
package/dist/client.js
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("@dynamodb-reactive/client"), exports);
|
|
1
|
+
export { ReactiveClient, ReactiveClientProvider, WebSocketManager, applyPatches, createProcedureHooks, createReactiveClient, createReactiveHooks, useConnectionState, useMutation, useReactiveClient, useReactiveClientOrThrow, useSubscription } from './chunk-IPEBRXIL.js';
|
|
2
|
+
//# sourceMappingURL=client.js.map
|
|
18
3
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"client.js"}
|
package/dist/core.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export { SystemSchemas, SystemTableNames, defineSchema } from './index.js';
|
|
2
|
+
export { D as DynamoTable, I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-CfIWxbuJ.js';
|
|
3
|
+
export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, I as IndexDefinition, J as JsonPatch, c as QueryEntry, Q as QueryMetadata, S as SubscriptionMessage } from './types-DeshTSf5.js';
|
|
4
|
+
import 'zod';
|
package/dist/core.js
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("@dynamodb-reactive/core"), exports);
|
|
1
|
+
export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-HZ6JHAJJ.js';
|
|
2
|
+
//# sourceMappingURL=core.js.map
|
|
18
3
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"core.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,171 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { D as DynamoTable } from './table-CfIWxbuJ.js';
|
|
2
|
+
export { I as InferSchema, T as TableFields, a as TableIndexes, b as TablePk, c as TableSk } from './table-CfIWxbuJ.js';
|
|
3
|
+
import { I as IndexDefinition } from './types-DeshTSf5.js';
|
|
4
|
+
export { A as AnyDynamoTable, C as ConnectionEntry, b as DependencyEntry, D as DynamoTableConfig, F as FieldRef, a as FilterCondition, J as JsonPatch, c as QueryEntry, Q as QueryMetadata, S as SubscriptionMessage } from './types-DeshTSf5.js';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to define a schema with type inference
|
|
9
|
+
* This provides a cleaner API for defining tables
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const TodoTable = defineSchema({
|
|
14
|
+
* tableName: 'prod-todo-table',
|
|
15
|
+
* schema: z.object({
|
|
16
|
+
* id: z.string(),
|
|
17
|
+
* taskListId: z.string(),
|
|
18
|
+
* text: z.string(),
|
|
19
|
+
* isDone: z.boolean(),
|
|
20
|
+
* }),
|
|
21
|
+
* pk: 'id',
|
|
22
|
+
* indexes: {
|
|
23
|
+
* byTaskId: { name: 'gsi_by_task_id', pk: 'taskListId' }
|
|
24
|
+
* }
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
declare function defineSchema<TSchema extends z.ZodObject<z.ZodRawShape>, TPk extends keyof z.infer<TSchema> & string, TSk extends (keyof z.infer<TSchema> & string) | undefined = undefined, TIndexes extends Record<string, IndexDefinition> = Record<string, IndexDefinition>>(config: {
|
|
29
|
+
tableName: string;
|
|
30
|
+
schema: TSchema;
|
|
31
|
+
pk: TPk;
|
|
32
|
+
sk?: TSk;
|
|
33
|
+
indexes?: TIndexes;
|
|
34
|
+
}): DynamoTable<TSchema, TPk, TSk, TIndexes>;
|
|
35
|
+
/**
|
|
36
|
+
* System table schemas for the reactive engine
|
|
37
|
+
*/
|
|
38
|
+
declare const SystemSchemas: {
|
|
39
|
+
/**
|
|
40
|
+
* ReactiveConnections - Tracks active WebSocket connections
|
|
41
|
+
*/
|
|
42
|
+
connections: z.ZodObject<{
|
|
43
|
+
connectionId: z.ZodString;
|
|
44
|
+
context: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
45
|
+
connectedAt: z.ZodNumber;
|
|
46
|
+
ttl: z.ZodNumber;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
connectionId: string;
|
|
49
|
+
connectedAt: number;
|
|
50
|
+
ttl: number;
|
|
51
|
+
context?: Record<string, unknown> | undefined;
|
|
52
|
+
}, {
|
|
53
|
+
connectionId: string;
|
|
54
|
+
connectedAt: number;
|
|
55
|
+
ttl: number;
|
|
56
|
+
context?: Record<string, unknown> | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* ReactiveDependencies - The inverted index for O(1) lookups
|
|
60
|
+
*/
|
|
61
|
+
dependencies: z.ZodObject<{
|
|
62
|
+
pk: z.ZodString;
|
|
63
|
+
sk: z.ZodString;
|
|
64
|
+
connectionId: z.ZodString;
|
|
65
|
+
subscriptionId: z.ZodString;
|
|
66
|
+
tableName: z.ZodString;
|
|
67
|
+
fieldName: z.ZodString;
|
|
68
|
+
fieldValue: z.ZodString;
|
|
69
|
+
ttl: z.ZodNumber;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
connectionId: string;
|
|
72
|
+
ttl: number;
|
|
73
|
+
pk: string;
|
|
74
|
+
sk: string;
|
|
75
|
+
subscriptionId: string;
|
|
76
|
+
tableName: string;
|
|
77
|
+
fieldName: string;
|
|
78
|
+
fieldValue: string;
|
|
79
|
+
}, {
|
|
80
|
+
connectionId: string;
|
|
81
|
+
ttl: number;
|
|
82
|
+
pk: string;
|
|
83
|
+
sk: string;
|
|
84
|
+
subscriptionId: string;
|
|
85
|
+
tableName: string;
|
|
86
|
+
fieldName: string;
|
|
87
|
+
fieldValue: string;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* ReactiveConnectionQueries - Stores subscription state for diffing
|
|
91
|
+
*/
|
|
92
|
+
queries: z.ZodObject<{
|
|
93
|
+
pk: z.ZodString;
|
|
94
|
+
sk: z.ZodString;
|
|
95
|
+
connectionId: z.ZodString;
|
|
96
|
+
subscriptionId: z.ZodString;
|
|
97
|
+
queryMetadata: z.ZodObject<{
|
|
98
|
+
tableName: z.ZodString;
|
|
99
|
+
indexName: z.ZodOptional<z.ZodString>;
|
|
100
|
+
filterConditions: z.ZodArray<z.ZodUnknown, "many">;
|
|
101
|
+
sortField: z.ZodOptional<z.ZodString>;
|
|
102
|
+
sortOrder: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
|
|
103
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
|
105
|
+
tableName: string;
|
|
106
|
+
filterConditions: unknown[];
|
|
107
|
+
indexName?: string | undefined;
|
|
108
|
+
sortField?: string | undefined;
|
|
109
|
+
sortOrder?: "asc" | "desc" | undefined;
|
|
110
|
+
limit?: number | undefined;
|
|
111
|
+
}, {
|
|
112
|
+
tableName: string;
|
|
113
|
+
filterConditions: unknown[];
|
|
114
|
+
indexName?: string | undefined;
|
|
115
|
+
sortField?: string | undefined;
|
|
116
|
+
sortOrder?: "asc" | "desc" | undefined;
|
|
117
|
+
limit?: number | undefined;
|
|
118
|
+
}>;
|
|
119
|
+
lastResult: z.ZodArray<z.ZodUnknown, "many">;
|
|
120
|
+
dependencies: z.ZodArray<z.ZodString, "many">;
|
|
121
|
+
createdAt: z.ZodNumber;
|
|
122
|
+
updatedAt: z.ZodNumber;
|
|
123
|
+
ttl: z.ZodNumber;
|
|
124
|
+
}, "strip", z.ZodTypeAny, {
|
|
125
|
+
connectionId: string;
|
|
126
|
+
ttl: number;
|
|
127
|
+
pk: string;
|
|
128
|
+
sk: string;
|
|
129
|
+
subscriptionId: string;
|
|
130
|
+
queryMetadata: {
|
|
131
|
+
tableName: string;
|
|
132
|
+
filterConditions: unknown[];
|
|
133
|
+
indexName?: string | undefined;
|
|
134
|
+
sortField?: string | undefined;
|
|
135
|
+
sortOrder?: "asc" | "desc" | undefined;
|
|
136
|
+
limit?: number | undefined;
|
|
137
|
+
};
|
|
138
|
+
lastResult: unknown[];
|
|
139
|
+
dependencies: string[];
|
|
140
|
+
createdAt: number;
|
|
141
|
+
updatedAt: number;
|
|
142
|
+
}, {
|
|
143
|
+
connectionId: string;
|
|
144
|
+
ttl: number;
|
|
145
|
+
pk: string;
|
|
146
|
+
sk: string;
|
|
147
|
+
subscriptionId: string;
|
|
148
|
+
queryMetadata: {
|
|
149
|
+
tableName: string;
|
|
150
|
+
filterConditions: unknown[];
|
|
151
|
+
indexName?: string | undefined;
|
|
152
|
+
sortField?: string | undefined;
|
|
153
|
+
sortOrder?: "asc" | "desc" | undefined;
|
|
154
|
+
limit?: number | undefined;
|
|
155
|
+
};
|
|
156
|
+
lastResult: unknown[];
|
|
157
|
+
dependencies: string[];
|
|
158
|
+
createdAt: number;
|
|
159
|
+
updatedAt: number;
|
|
160
|
+
}>;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* System table names
|
|
164
|
+
*/
|
|
165
|
+
declare const SystemTableNames: {
|
|
166
|
+
readonly connections: "ReactiveConnections";
|
|
167
|
+
readonly dependencies: "ReactiveDependencies";
|
|
168
|
+
readonly queries: "ReactiveConnectionQueries";
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export { DynamoTable, IndexDefinition, SystemSchemas, SystemTableNames, defineSchema };
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("@dynamodb-reactive/core"), exports);
|
|
1
|
+
export { DynamoTable, SystemSchemas, SystemTableNames, defineSchema } from './chunk-HZ6JHAJJ.js';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
18
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/infra.d.ts
CHANGED
|
@@ -1,2 +1,189 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { A as AnyDynamoTable } from './types-DeshTSf5.js';
|
|
2
|
+
import * as cdk from 'aws-cdk-lib';
|
|
3
|
+
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
|
|
4
|
+
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
|
|
5
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
6
|
+
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
7
|
+
import { Construct } from 'constructs';
|
|
8
|
+
import 'zod';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Props for ReactiveSystemTables
|
|
12
|
+
*/
|
|
13
|
+
interface ReactiveSystemTablesProps {
|
|
14
|
+
/**
|
|
15
|
+
* Prefix for table names
|
|
16
|
+
* @default - no prefix
|
|
17
|
+
*/
|
|
18
|
+
tablePrefix?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Removal policy for tables
|
|
21
|
+
* @default - cdk.RemovalPolicy.RETAIN
|
|
22
|
+
*/
|
|
23
|
+
removalPolicy?: cdk.RemovalPolicy;
|
|
24
|
+
/**
|
|
25
|
+
* Enable point-in-time recovery
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
pointInTimeRecovery?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates the three system tables for the reactive engine
|
|
32
|
+
*/
|
|
33
|
+
declare class ReactiveSystemTables extends Construct {
|
|
34
|
+
/**
|
|
35
|
+
* ReactiveConnections table - tracks WebSocket connections
|
|
36
|
+
*/
|
|
37
|
+
readonly connectionsTable: dynamodb.Table;
|
|
38
|
+
/**
|
|
39
|
+
* ReactiveDependencies table - the inverted index
|
|
40
|
+
*/
|
|
41
|
+
readonly dependenciesTable: dynamodb.Table;
|
|
42
|
+
/**
|
|
43
|
+
* ReactiveConnectionQueries table - stores subscription state
|
|
44
|
+
*/
|
|
45
|
+
readonly queriesTable: dynamodb.Table;
|
|
46
|
+
constructor(scope: Construct, id: string, props?: ReactiveSystemTablesProps);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Props for ReactiveEngine construct
|
|
51
|
+
*/
|
|
52
|
+
interface ReactiveEngineProps {
|
|
53
|
+
/**
|
|
54
|
+
* User-defined DynamoDB tables to enable reactive updates on
|
|
55
|
+
*/
|
|
56
|
+
tables: AnyDynamoTable[];
|
|
57
|
+
/**
|
|
58
|
+
* Prefix for all resource names
|
|
59
|
+
* @default - no prefix
|
|
60
|
+
*/
|
|
61
|
+
resourcePrefix?: string;
|
|
62
|
+
/**
|
|
63
|
+
* System tables configuration
|
|
64
|
+
*/
|
|
65
|
+
systemTablesProps?: ReactiveSystemTablesProps;
|
|
66
|
+
/**
|
|
67
|
+
* Lambda function memory size in MB
|
|
68
|
+
* @default 256
|
|
69
|
+
*/
|
|
70
|
+
memorySize?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Lambda function timeout
|
|
73
|
+
* @default Duration.seconds(30)
|
|
74
|
+
*/
|
|
75
|
+
timeout?: cdk.Duration;
|
|
76
|
+
/**
|
|
77
|
+
* Log retention period
|
|
78
|
+
* @default logs.RetentionDays.ONE_WEEK
|
|
79
|
+
*/
|
|
80
|
+
logRetention?: logs.RetentionDays;
|
|
81
|
+
/**
|
|
82
|
+
* Environment variables for Lambda functions
|
|
83
|
+
*/
|
|
84
|
+
environment?: Record<string, string>;
|
|
85
|
+
/**
|
|
86
|
+
* Enable tracing with X-Ray
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
tracing?: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* ReactiveEngine - Main CDK construct for the reactive DynamoDB system
|
|
93
|
+
*/
|
|
94
|
+
declare class ReactiveEngine extends Construct {
|
|
95
|
+
readonly systemTables: ReactiveSystemTables;
|
|
96
|
+
readonly webSocketApi: apigatewayv2.WebSocketApi;
|
|
97
|
+
readonly webSocketStage: apigatewayv2.WebSocketStage;
|
|
98
|
+
readonly connectHandler: lambda.Function;
|
|
99
|
+
readonly disconnectHandler: lambda.Function;
|
|
100
|
+
readonly messageHandler: lambda.Function;
|
|
101
|
+
readonly streamHandler: lambda.Function;
|
|
102
|
+
readonly webSocketUrl: string;
|
|
103
|
+
readonly callbackUrl: string;
|
|
104
|
+
constructor(scope: Construct, id: string, props: ReactiveEngineProps);
|
|
105
|
+
private setupStreamProcessing;
|
|
106
|
+
addTable(table: dynamodb.ITable): void;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Props for DynamoDBStreamSource
|
|
111
|
+
*/
|
|
112
|
+
interface DynamoDBStreamSourceProps {
|
|
113
|
+
/**
|
|
114
|
+
* The DynamoDB table to create a stream source for
|
|
115
|
+
*/
|
|
116
|
+
table: dynamodb.ITable;
|
|
117
|
+
/**
|
|
118
|
+
* The Lambda function to receive stream events
|
|
119
|
+
*/
|
|
120
|
+
target: lambda.IFunction;
|
|
121
|
+
/**
|
|
122
|
+
* Batch size for stream processing
|
|
123
|
+
* @default 100
|
|
124
|
+
*/
|
|
125
|
+
batchSize?: number;
|
|
126
|
+
/**
|
|
127
|
+
* Maximum batching window
|
|
128
|
+
* @default Duration.seconds(5)
|
|
129
|
+
*/
|
|
130
|
+
maxBatchingWindow?: cdk.Duration;
|
|
131
|
+
/**
|
|
132
|
+
* Starting position for reading the stream
|
|
133
|
+
* @default TRIM_HORIZON
|
|
134
|
+
*/
|
|
135
|
+
startingPosition?: lambda.StartingPosition;
|
|
136
|
+
/**
|
|
137
|
+
* Enable parallel processing with multiple batches
|
|
138
|
+
* @default 1
|
|
139
|
+
*/
|
|
140
|
+
parallelizationFactor?: number;
|
|
141
|
+
/**
|
|
142
|
+
* Maximum record age to process
|
|
143
|
+
* @default Duration.days(1)
|
|
144
|
+
*/
|
|
145
|
+
maxRecordAge?: cdk.Duration;
|
|
146
|
+
/**
|
|
147
|
+
* Number of retries on failure
|
|
148
|
+
* @default 3
|
|
149
|
+
*/
|
|
150
|
+
retryAttempts?: number;
|
|
151
|
+
/**
|
|
152
|
+
* Filter patterns for the event source
|
|
153
|
+
*/
|
|
154
|
+
filters?: lambda.FilterCriteria[];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Helper construct for setting up DynamoDB stream event sources
|
|
158
|
+
*/
|
|
159
|
+
declare class DynamoDBStreamSource extends Construct {
|
|
160
|
+
readonly eventSourceMapping: lambda.EventSourceMapping;
|
|
161
|
+
constructor(scope: Construct, id: string, props: DynamoDBStreamSourceProps);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Create a filter criteria for DynamoDB streams
|
|
165
|
+
*/
|
|
166
|
+
declare function createStreamFilter(options: {
|
|
167
|
+
/**
|
|
168
|
+
* Filter by event name (INSERT, MODIFY, REMOVE)
|
|
169
|
+
*/
|
|
170
|
+
eventName?: ('INSERT' | 'MODIFY' | 'REMOVE')[];
|
|
171
|
+
/**
|
|
172
|
+
* Custom filter patterns
|
|
173
|
+
*/
|
|
174
|
+
patterns?: Record<string, unknown>[];
|
|
175
|
+
}): lambda.FilterCriteria[];
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Entry point code generator for the reactive Lambda handlers.
|
|
179
|
+
*
|
|
180
|
+
* No user code is imported - the handlers use only environment variables
|
|
181
|
+
* and stored query metadata for all operations.
|
|
182
|
+
*/
|
|
183
|
+
/**
|
|
184
|
+
* Generate the entry point code for Lambda functions.
|
|
185
|
+
* This is called by the CDK construct to create the bundled entry file.
|
|
186
|
+
*/
|
|
187
|
+
declare function generateEntryPointCode(): string;
|
|
188
|
+
|
|
189
|
+
export { DynamoDBStreamSource, type DynamoDBStreamSourceProps, ReactiveEngine, type ReactiveEngineProps, ReactiveSystemTables, type ReactiveSystemTablesProps, createStreamFilter, generateEntryPointCode };
|