@dee-wan/cache 2.0.0 → 2.0.2
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-A4WV6RY4.js → chunk-27P3CVHP.js} +18 -9
- package/dist/chunk-27P3CVHP.js.map +1 -0
- package/dist/{chunk-WJNCFFF3.js → chunk-2V6MG4YX.js} +25 -10
- package/dist/chunk-2V6MG4YX.js.map +1 -0
- package/dist/{chunk-LAXBP5DQ.js → chunk-6VWIKYUQ.js} +3 -3
- package/dist/{chunk-LAXBP5DQ.js.map → chunk-6VWIKYUQ.js.map} +1 -1
- package/dist/{chunk-O3KHMFHX.js → chunk-STPV6MO7.js} +4 -4
- package/dist/{chunk-O3KHMFHX.js.map → chunk-STPV6MO7.js.map} +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/d1/index.js +4 -4
- package/dist/d1/response-lease.js +5 -5
- package/dist/response-lease.js +3 -3
- package/docs/cache-contract.md +9 -0
- package/package.json +1 -1
- package/dist/chunk-A4WV6RY4.js.map +0 -1
- package/dist/chunk-WJNCFFF3.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/d1/env.ts","../src/d1/read.ts"],"names":["runtimes"],"mappings":";;;;;;;;;;;AAeA,IAAM,IAAA,GAAO,iEAAA;AACb,IAAM,KAAA,mBAAQ,IAAI,GAAA,CAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,IAAI,CAAC,CAAA;AACxF,IAAM,OAAA,uBAAc,OAAA,EAA8D;AAElF,IAAM,QAAA,uBAAe,OAAA,EAAgC;AAC9C,IAAM,cAAA,GAAiB,CAAC,QAAA,KAAiD,QAAA,CAAS,IAAI,QAAQ;AAC9F,SAAS,oBAAA,CAAqB,UAAsB,OAAA,EAAwN;AACjR,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAY,OAAA,EAAS,YAAA,GAAe,MAAK,GAAI,OAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,OAAA,CAAQ,KAAK,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,cAAc,QAAA,EAAU,EAAE,OAAO,UAAA,EAAY,MAAA,EAAQ,SAAS,CAAA;AAC7E,EAAA,sBAAA,CAAuB,QAAQ,QAAQ,CAAA;AACvC,EAAA,QAAA,CAAS,GAAA,CAAI,QAAQ,EAAE,KAAA,EAAO,YAAY,UAAA,EAAY,YAAA,EAAc,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,mBAAA,EAAqB,QAAQ,mBAAA,IAAuB,OAAA,CAAQ,OAAO,eAAA,EAAiB,OAAA,CAAQ,mBAAmB,EAAA,EAAI,gBAAA,EAAkB,OAAA,CAAQ,gBAAA,EAAkB,CAAA;AACnQ,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,UAAA,CAA6B,KAAQ,OAAA,EAA4B;AAC/E,EAAA,MAAM,KAAA,GAAQ,CAAC,MAAA,KAA4B,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAC5F,EAAA,MAAM,OAAA,GAAU,MAAM,SAAS,CAAA;AAC/B,EAAA,IAAI,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,OAAA,EAAS,OAAO,GAAA;AACzD,EAAA,IAAI,OAAA,KAAY,QAAQ,MAAM,IAAI,MAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,QAAA,CAAU,CAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,MAAM,eAAe,CAAA;AACnC,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,cAAA,CAAgB,CAAA;AAC9H,EAAA,MAAM,eAAe,KAAA,KAAU,OAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,MAAM,aAAa,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,MAAM,cAAc,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,MAAM,YAAY,CAAA;AACrC,EAAA,IAAI,CAAC,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,IAAY,OAAO,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,YAAY,CAAA,KAAM,UAAA,IAAc,OAAO,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,KAAK,CAAA,KAAM,UAAA,IAAc,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,UAAA,KAAe,QAAA,IAAY,CAAC,UAAA,CAAW,IAAA,EAAK;AACvP,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,yDAAA,CAA2D,CAAA;AACjG,EAAA,IAAI,UAAA,CAAW,SAAS,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,WAAA,CAAa,CAAA;AACtF,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AAAE,IAAA,GAAA,GAAM,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,aAAA,CAAe,CAAA;AAAA,EAAG;AACxG,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,YAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,QAAS,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,aAAA,CAAe,CAAA;AACtH,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAC,GAAA,EAAK,EAAE,CAAA,KAAM,CAAC,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,IAAK,OAAO,EAAA,KAAO,QAAA,IAAY,CAAC,IAAA,CAAK,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,iCAAiC,CAAA;AAC1J,EAAA,MAAM,YAAA,GAAe,KAAA,CAAM,eAAe,CAAA,IAAK,MAAA;AAC/C,EAAA,IAAI,OAAO,YAAA,KAAiB,QAAA,IAAY,CAAC,MAAM,GAAA,CAAI,YAAY,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,SAAS,CAAA,cAAA,CAAgB,CAAA;AAC9H,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,GAAG,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,YAAA,EAAc,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,IAAI,GAAG,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAA;AACzH,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AACjD,IAAA,IAAI,OAAA,CAAQ,gBAAgB,IAAA,CAAK,CAAC,WAAW,GAAA,CAAI,UAAA,CAAW,MAAM,CAAC,CAAA,IAAK,CAAC,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAE,CAAA;AACvJ,IAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA,EAAG;AACpC,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,IAAI,OAAO,EAAA,KAAO,QAAA,IAAY,CAAC,YAAY,OAAO,QAAA,CAAS,OAAA,KAAY,UAAA,EAAY,MAAM,IAAI,KAAA,CAAM,CAAA,sCAAA,EAAyC,GAAG,CAAA,CAAE,CAAA;AACjJ,IAAA,MAAM,UAAA,GAAa,GAAG,WAAA,EAAY;AAClC,IAAA,MAAM,QAAA,GAAW,KAAK,SAAA,CAAU,CAAC,YAAY,UAAA,EAAY,YAAA,EAAc,YAAA,EAAc,OAAO,CAAC,CAAA;AAC7F,IAAA,IAAI,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AACrC,IAAA,IAAI,CAAC,SAAA,EAAW;AAAE,MAAA,SAAA,uBAAgB,OAAA,EAAQ;AAAG,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,SAAS,CAAA;AAAA,IAAG;AAChF,IAAA,IAAI,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AACrC,IAAA,IAAI,CAAC,QAAA,EAAU;AAAE,MAAA,QAAA,uBAAe,GAAA,EAAI;AAAG,MAAA,SAAA,CAAU,GAAA,CAAI,UAAU,QAAQ,CAAA;AAAA,IAAG;AAC1E,IAAA,IAAI,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAClC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,OAAA,CAAQ,qBAAqB,GAAG,UAAU,CAAA,CAAA;AACrE,MAAA,MAAM,QAAQ,wBAAA,CAAyB,SAAA,EAAuD,EAAE,IAAA,EAAM,eAAA,EAAiB,cAAuD,CAAA;AAC9K,MAAA,MAAA,GAAS,qBAAqB,QAAA,EAAU,EAAE,OAAO,UAAA,EAAY,UAAA,EAAY,cAAc,OAAA,EAAS,mBAAA,EAAqB,SAAA,EAAW,eAAA,EAAiB,kBAAmB,SAAA,CAAuD,UAAA,CAAW,eAAe,CAAA,CAAE,QAAA,IAAY,CAAA;AACnQ,MAAA,QAAA,CAAS,GAAA,CAAI,UAAU,MAAM,CAAA;AAAA,IAC/B;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,MAAM,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CAA0D,SAA+D,OAAA,EAA+E;AACtN,EAAA,OAAO,CAAC,KAAA,EAAO,GAAA,EAAK,OAAA,KAAY,OAAA,CAAQ,OAAO,UAAA,CAAW,GAAA,EAAK,OAAO,CAAA,EAAG,OAAO,CAAA;AAClF;AAUO,SAAS,sBAAA,CAAuB,QAAA,EAAkB,MAAA,EAA8B,gBAAA,EAA8D,UAAA,EAAsF;AACzO,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AACrC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,OAAO,MAAA;AAC9C,EAAA,MAAM,OAAA,GAAU,OAAO,gBAAA,KAAqB,UAAA,GAAa,MAAA,GAAY,gBAAA;AACrE,EAAA,MAAM,OAAA,GAAU,OAAO,gBAAA,KAAqB,UAAA,GAAa,gBAAA,GAAmB,UAAA;AAC5E,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,UAAU,CAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,EAAE,GAAG,MAAA,EAAQ,gBAAA,EAAkB,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,OAAO,CAAA,KAAM,CAAC,KAAA,EAAO,OAAA,IAAW,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAC,CAAC,CAAC,CAAA,EAAE;AAClL,EAAA,MAAM,MAAA,GAAS,EAAE,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,sBAAA,EAAwB,OAAA,CAAQ,UAAA,EAAY,GAAI,OAAA,GAAU,EAAE,OAAA,EAAQ,GAAI,EAAC,EAAI,GAAI,OAAA,EAAS,OAAA,GAAU,EAAE,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ,GAAI,EAAC,EAAG;AACpO,EAAA,MAAM,IAAA,GAAO,qBAAqB,EAAE,GAAG,QAAQ,KAAA,EAAO,OAAA,CAAQ,YAAY,CAAA;AAC1E,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,cAAA;AACxC,EAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,EAAE,UAAA,EAAY,EAAE,cAAA,CAAe,MAAA,EAAyC;AAC7G,IAAA,OAAO,sBAAA,KAA2B,MAAA,CAAO,KAAA,CAAM,OAAO,IAAI,CAAA,GAAI,UAAU,MAAM,CAAA;AAAA,EAChF,CAAA,IAAI,EAAE;AACN,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,OAAO,EAAE,UAAA,EAAY,EAAE,MAAM,eAAe,MAAA,EAAyC;AACnF,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,IAAS,CAAC,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAC,YAAA,EAAc,mBAAA,EAAqB,aAAa,kBAAA,EAAoB,UAAA,EAAY,OAAA,EAAS,WAAA,EAAa,SAAS,CAAA,CAAE,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG,OAAO,SAAA,CAAU,MAAM,CAAA;AACzN,MAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,IAAQ,OAAA,CAAQ,UAAU,MAAA,IAAa,CAAC,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,KAAA,EAAQ,IAAI,CAAA,IAAA,CAAM,OAAA,CAAQ,cAAc,MAAA,IAAU,CAAA,IAAK,IAAI,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AACpL,MAAA,MAAM,eAAe,kBAAA,CAAmB,QAAA,EAAU,OAAA,CAAQ,YAAA,IAAgB,EAAE,CAAA;AAC5E,MAAA,IAAI,CAAC,YAAA,EAAc,OAAO,MAAA,CAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAClD,MAAA,MAAM,WAAW,MAAA,CAAO,gBAAA;AACxB,MAAA,MAAM,WAAW,QAAA,IAAY,OAAO,aAAa,QAAA,IAAY,KAAA,CAAM,QAAQ,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,UAAU,CAAC,CAAA,GAAI,OAAA,CAAQ,IAAI,QAAA,EAAU,UAAU,IAAI,EAAC;AACrJ,MAAA,MAAM,WAAA,GAAuB,YAAY,OAAO,QAAA,KAAa,WAAW,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,aAAa,CAAA,GAAI,MAAA;AAC/G,MAAA,MAAM,OAAA,GAAU,CAAC,CAAC,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,MAAM,CAAA,KAAM,OAAA;AACzG,MAAA,IAAI,QAAA,GAA0B,IAAA;AAC9B,MAAA,IAAI,cAAA;AACJ,MAAA,IAAI,UAAA,GAAa,KAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,aAAa,CAAC,OAAA,EAAS,GAAG,YAAY,CAAA,CAAE,IAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,YAAY,IAAA,CAAK,UAAA,EAAY,KAAK,eAAA,EAAiB,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAC3I,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,GAAiB,WAAA,CAAY,MAAA,CAAO,eAAe,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA,CAAA;AACxG,QAAA,MAAM,iBAAiB,CAAC,OAAA,CAAQ,kBAAmB,CAAC,CAAC,WAAW,CAAC,GAAG,QAAQ,MAAM,CAAA,CAAE,MAAM,CAAC,KAAA,KAAU,QAAQ,cAAA,EAAgB,QAAA,CAAS,KAAK,CAAC,CAAA;AAC5I,QAAA,IAAI,QAAQ,aAAA,IAAiB,OAAA,CAAQ,gBAAgB,CAAA,IAAK,OAAA,CAAQ,iBAAiB,GAAA,IAAQ,CAAC,OAAA,IAAW,cAAA,IAAkB,WAAW,KAAA,CAAM,CAAC,SAAS,IAAA,CAAK,CAAC,CAAC,CAAA,EAAG;AAC5J,UAAA,cAAA,GAAiB,QAAQ,OAAA,GAAU,OAAA,CAAQ,QAAQ,MAAA,CAAO,IAAI,IAAI,MAAA,CAAO,IAAA;AACzE,UAAA,UAAA,GAAa,IAAA;AACb,UAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,eAAA,CAAgB,MAAM,CAAC,CAAA;AAC5D,UAAA,QAAA,GAAW,MAAM,YAAY,OAAA,CAAQ,aAAA,EAAe,CAAC,QAAA,EAAU,sBAAA,EAAuB,GAAI,YAAA,GAAe,IAAA,EAAM,OAAA,CAAQ,eAAe,UAAA,EAAY,YAAA,EAAc,OAAA,CAAQ,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,OAAO,SAAA,EAAW,QAAA,EAAU,cAAA,IAAkB,IAAI,CAAC,CAAA;AAAA,QAClP;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAAsD;AAC9D,MAAA,MAAM,MAAM,MAAM,YAAA,CAAa,QAAA,EAAU,OAAA,CAAQ,eAAe,OAAO,CAAA;AACvE,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,GAAA,CAAI,KAAA,EAAO,CAAC,OAAA,EAAS,GAAG,YAAY,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAU,CAAC,CAAA;AAC7G,QAAA,IAAI,MAAA,EAAQ;AAAE,UAAA,IAAI,MAAA,CAAO,SAAA,EAAW,yBAAA,CAA0B,MAAA,CAAO,SAAS,CAAA;AAAG,UAAA,sBAAA,CAAuB,IAAI,OAAO,CAAA;AAAG,UAAA,OAAO,MAAA,CAAO,KAAA;AAAA,QAAO;AAAA,MAC7I;AACA,MAAA,IAAI,OAAA,GAAU,KAAK,GAAA,EAAI;AACvB,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,YAAY,CAAA;AAC3C,MAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAA,CAAO,KAAA,CAAM,OAAO,IAAI,CAAA;AAC9C,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI;AACF,QAAA,KAAA,GAAQ,eAAA,CAAgB,CAAC,sBAAA,EAAuB,GAAI,YAAA,GAAe,IAAA,EAAM,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,KAAA,EAAO,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,OAAA,EAAS,UAAA,EAAY,KAAA,EAAM,KAAM,CAAC,UAAA,CAAW,UAAA,EAAY,UAAA,CAAW,UAAA,EAAY,KAAK,CAAC,CAAC,CAAC,CAAA;AACxO,QAAA,IAAI,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,UAAA,GAAa,KAAA,EAAQ,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MAC1F,CAAA,CAAA,MAAQ;AAAE,QAAA,OAAO,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MAAG;AAC5C,MAAA,IAAI,WAAA,GAAc,KAAA;AAClB,MAAA,IAAI,YAAA;AACJ,MAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,MAAA,IAAI,OAAA,GAAU,KAAA;AACd,MAAA,MAAM,KAAA,GAAoB;AAAA,QAAE,GAAG,OAAA,CAAQ,KAAA;AAAA,QACrC,MAAM,MAAM,OAAA,EAAS;AACnB,UAAA,MAAM,KAAA,GAAQ,sBAAA,EAAuB,GAAI,IAAA,CAAK,SAAA,CAAU,wBAAwB,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,OAAA,CAAQ,KAAA;AAC1G,UAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAC9D,UAAA,aAAA,GAAgB,MAAA,CAAO,EAAA;AACvB,UAAA,OAAO,MAAA;AAAA,QACT,CAAA;AAAA,QACA,MAAM,KAAK,OAAA,EAAS;AACpB,UAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAK,OAAO,CAAA;AAC/C,UAAA,IAAI,MAAA,CAAO,SAAS,KAAA,IAAS,CAAC,cAAc,QAAA,EAAU,MAAM,OAAA,CAAQ,YAAY,CAAC,CAAA,SAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,eAAe,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK;AACtL,UAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,IAAS,sBAAA,EAAuB,EAAG;AACrD,YAAA,IAAI,MAAA;AACJ,YAAA,IAAI;AAAE,cAAA,MAAA,GAAS,0BAA0B,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAK,GAAG,CAAC,OAAA,EAAS,GAAG,YAAY,EAAE,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,YAAG,CAAA,CAAA,MAAQ;AAAE,cAAA,MAAA,GAAS,IAAA;AAAA,YAAM;AACxJ,YAAA,IAAI,CAAC,MAAA,IAAU,OAAO,OAAO,KAAA,KAAU,QAAA,SAAiB,EAAE,IAAA,EAAK,MAAA,EAAQ,MAAA,EAAO,OAAO,MAAA,EAAQ,aAAA,EAAc,MAAM,SAAA,EAAU,IAAA,EAAM,SAAQ,IAAA,EAAK;AAC9I,YAAA,YAAA,GAAe,MAAA,CAAO,SAAA;AACtB,YAAA,WAAA,GAAc,IAAA;AACd,YAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAM,OAAO,KAAA,EAAM;AAAA,UACzC;AACA,UAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,EAAO,WAAA,GAAc,IAAA;AACzC,UAAA,OAAO,MAAA;AAAA,QACT;AAAA,OAAE;AACF,MAAA,MAAM,SAAS,oBAAA,CAAqB,EAAE,GAAG,MAAA,EAAQ,OAAO,KAAA,EAAO,GAAI,UAAA,GAAa,EAAE,SAAS,MAAM,cAAA,EAAe,GAAI,IAAK,CAAA;AACzH,MAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,CAAqB,YAAY;AACrD,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,cAAA,CAAe,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAO,OAAO,IAAA,KAAS;AAC7F,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,OAAA,GAAU,KAAK,GAAA,EAAI;AACnB,UAAA,OAAO,yBAAA,CAA0B,MAAM,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,QAC3D,GAAG,CAAA;AACH,QAAA,IAAI,CAAC,OAAA,IAAW,WAAA,IAAe,YAAA,4BAAwC,YAAY,CAAA;AACnF,QAAA,OAAO,KAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,IAAI,QAAA,KAAc,CAAC,OAAA,IAAW,WAAA,IAAgB,kBAAkB,aAAA,CAAc,QAAA,EAAU,MAAM,OAAA,CAAQ,YAAY,CAAC,GAAG,MAAM,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,aAAA,EAAe,OAAA,EAAS,wBAAwB,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC7O,MAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,IACjB,GAAE;AAAE,GACN;AACF;AAEO,SAAS,iBAAA,CAAyC,MAAA,EAAgB,QAAA,EAAkB,MAAA,EAA8B,kBAA8D,UAAA,EAAyC;AAC9N,EAAA,MAAM,SAAA,GAAY,sBAAA,CAAuB,QAAA,EAAU,MAAA,EAAQ,kBAAkB,UAAU,CAAA;AACvF,EAAA,IAAI,CAAC,WAAW,OAAO,MAAA;AACvB,EAAA,MAAM,MAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,YAAY,MAAM,CAAA;AAC9D,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,MAAM,IAAI,UAAU,qCAAqC,CAAA;AAC3F,EAAA,MAAM,WAAoB,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AACnE,EAAA,IAAI,CAAC,YAAY,OAAO,QAAA,KAAa,UAAU,MAAM,IAAI,UAAU,qCAAqC,CAAA;AACxG,EAAA,OAAO,IAAI,MAAM,MAAA,EAAQ;AAAA,IACvB,GAAA,CAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAM,MAAA,GAAS,QAAA,KAAa,KAAA,GAAQ,MAAA,GAAS,QAAA;AAC7C,MAAA,MAAM,MAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,UAAU,MAAM,CAAA;AAC5D,MAAA,OAAO,OAAO,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA;AAAA,IAC9D;AAAA,GACD,CAAA;AACH;;;AC1LA,IAAM,MAAA,GAAS,CAAC,GAAG,CAAA;AACnB,IAAM,cAAA,GAAiB,GAAA;AACvB,IAAM,UAAA,GAAa,GAAA;AACnB,IAAM,kBAAA,GAAqB,KAAA;AAC3B,IAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,IAAA,EAAW,eAAe,CAAA;AAcnD,SAAS,mBAAA,CAAoB,MAAc,KAAA,EAAwB;AACxE,EAAA,MAAM,CAAA,GAAI,eAAe,IAAI,CAAA;AAC7B,EAAA,MAAM,CAAA,GAAI,eAAe,KAAK,CAAA;AAC9B,EAAA,OAAO,CAAC,CAAC,CAAA,IAAK,CAAC,CAAC,CAAA,IAAK,CAAA,CAAE,eAAe,CAAA,CAAE,UAAA,IAAc,EAAE,UAAA,KAAe,CAAA,CAAE,cAAc,CAAA,CAAE,mBAAA,KAAwB,EAAE,mBAAA,IAAuB,CAAA,CAAE,oBAAoB,CAAA,CAAE,eAAA;AACpK;AACA,eAAsB,aAAa,QAAA,EAA0C;AAC3E,EAAA,MAAM,OAAA,GAAU,eAAe,QAAQ,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,OAAO,IAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAC,OAAO,CAAC,CAAA;AACxC,EAAA,IAAI,CAAC,QAAA,GAAW,CAAC,CAAA,EAAG,OAAO,IAAA;AAC3B,EAAA,OAAO,eAAA,CAAgB,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,YAAY,QAAA,CAAS,CAAC,CAAA,CAAE,KAAK,CAAC,CAAA;AACpF;AACA,eAAsB,QAAQA,SAAAA,EAAiE;AAC7F,EAAA,IAAIA,SAAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,IAAIA,SAAAA,CAAS,GAAA,CAAI,OAAO,OAAA,KAAY;AAC/D,MAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,aAAA,EAAe,OAAO,IAAA;AACzC,MAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,CAAA;AAClG,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAA;AAC3B,MAAA,IAAI,KAAA,CAAM,OAAA,KAAY,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAAK,KAAA,GAAQ,GAAG,OAAO,IAAA;AAC9G,MAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,IAC1B,CAAC,CAAC,CAAA;AACF,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,KAAU,IAAI,CAAA,GAAI,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAA6B,UAAU,IAAI,CAAA;AAAA,EACnH,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AACzB;AAEO,IAAM,gBAAgB,CAAC,CAAA,EAAwB,CAAA,KACpD,CAAA,KAAM,QAAQ,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,EAAE,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,KAAK,OAAA,CAAQ,UAAA,KAAe,CAAA,CAAE,KAAK,GAAG,OAAA,CAAQ,UAAA,IAAc,IAAA,CAAK,OAAA,CAAQ,eAAe,CAAA,CAAE,KAAK,CAAA,EAAG,OAAA,CAAQ,cAAc,IAAA,CAAK,KAAA,KAAU,CAAA,CAAE,KAAK,GAAG,KAAK,CAAA;AAEjN,SAAS,kBAAA,CAAmB,UAAkB,YAAA,EAA0D;AAC7G,EAAA,IAAI,YAAA,CAAa,MAAA,GAAS,EAAA,EAAI,OAAO,IAAA;AACrC,EAAA,MAAM,OAAA,GAAU,eAAe,QAAQ,CAAA;AACvC,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,OAAO,IAAA;AAC9C,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA4B;AAC7C,EAAA,KAAA,MAAW,cAAc,YAAA,EAAc;AACrC,IAAA,MAAM,OAAA,GAAU,eAAe,UAAU,CAAA;AACzC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,OAAO,IAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,QAAQ,UAAA,KAAe,OAAA,CAAQ,aAAa,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,UAAU,CAAA;AAC/F,IAAA,IAAI,KAAA,KAAU,KAAA,CAAM,UAAA,KAAe,OAAA,CAAQ,UAAA,IAAc,KAAA,CAAM,mBAAA,KAAwB,OAAA,CAAQ,mBAAA,IAAuB,KAAA,CAAM,eAAA,KAAoB,OAAA,CAAQ,kBAAkB,OAAO,IAAA;AACjL,IAAA,IAAI,OAAA,CAAQ,UAAA,KAAe,OAAA,CAAQ,UAAA,EAAY;AAC/C,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,aAAA,EAAe,OAAO,IAAA;AACzC,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,KAAA,IAAS,OAAO,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AACnF;AAEA,eAAsB,WAAA,CAAe,QAAA,EAAsB,OAAA,EAA2B,IAAA,EAAoC;AACxH,EAAA,MAAM,OAAA,GAAU,eAAe,QAAQ,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,QAAQ,KAAA,IAAS,cAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,gBAAgB,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,KAAK,GAAA,IAAO,CAAA,IAAK,GAAA,GAAM,UAAA,IAAc,QAAQ,KAAA,KAAU,MAAA,IAAa,OAAA,CAAQ,KAAA,KAAU,QAAQ,CAAC,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,oBAAoB,IAAI,CAAA,IAAK,CAAC,YAAA,CAAa,QAAQ,GAAA,EAAK,kBAAA,EAAoB,IAAI,CAAA,SAAU,IAAA,EAAK;AACvR,EAAA,MAAM,MAAA,GAAS,MAAM,yBAAA,CAA0B,IAAI,CAAA;AACnD,EAAA,MAAMA,YAAW,kBAAA,CAAmB,QAAA,EAAU,OAAA,CAAQ,YAAA,IAAgB,EAAE,CAAA;AACxE,EAAA,IAAI,CAACA,SAAAA,EAAU,OAAO,MAAA,EAAO;AAC7B,EAAA,MAAM,qBAAqB,CAAC,OAAA,EAAS,GAAGA,SAAQ,CAAA,CAAE,IAAI,CAAC,OAAA,KAAY,CAAC,OAAA,CAAQ,YAAY,OAAA,CAAQ,UAAA,EAAY,QAAQ,eAAA,EAAiB,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAC9J,EAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,KAAA,CAAM,CAAC,QAAA,KAAa,QAAA,CAAS,CAAC,CAAC,CAAA,GAC/D,MAAM,WAAA,CAAY,OAAA,CAAQ,aAAA,EAAe,CAAC,SAAA,EAAW,sBAAA,EAAuB,GAAI,YAAA,GAAe,IAAA,EAAM,OAAA,CAAQ,aAAA,EAAe,kBAAA,EAAoB,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAI,IAAA;AACnL,EAAA,MAAM,GAAA,GAAM,MAAM,YAAA,CAAa,QAAA,EAAU,QAAQ,aAAa,CAAA;AAC9D,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,GAAA,CAAI,KAAA,EAAO,CAAC,OAAA,EAAS,GAAGA,SAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,UAAU,CAAC,CAAA;AAC/G,IAAA,IAAI,MAAA,EAAQ;AAAE,MAAA,IAAI,MAAA,CAAO,SAAA,EAAW,yBAAA,CAA0B,MAAA,CAAO,SAAS,CAAA;AAAG,MAAA,sBAAA,CAAuB,IAAI,OAAO,CAAA;AAAG,MAAA,OAAO,MAAA,CAAO,KAAA;AAAA,IAAY;AAAA,EAClJ;AACA,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQA,SAAQ,CAAA;AACvC,EAAA,IAAI,CAAC,QAAA,EAAU,OAAO,MAAA,EAAO;AAC7B,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,eAAA,CAAgB,CAAC,YAAA,EAAc,sBAAA,EAAuB,GAAI,YAAA,GAAe,IAAA,EAAM,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,QAAQ,KAAA,EAAO,OAAA,CAAQ,GAAA,EAAK,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,OAAA,EAAS,OAAM,KAAM,CAAC,OAAA,CAAQ,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAC,CAAC,CAAC,CAAA;AAC1P,IAAA,IAAI,IAAI,aAAY,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,UAAA,GAAa,kBAAA,EAAoB,OAAO,IAAA,EAAK;AACpF,IAAA,GAAA,GAAM,CAAA,GAAA,EAAM,MAAM,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,IAAA,EAAK;AAAA,EAAG;AACzB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AAAE,IAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,EAAE,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,UAAA,EAAY,QAAQ,UAAA,EAAY,MAAA,EAAQ,GAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,EAAG,CAAA,CAAA,MAC5H;AAAE,IAAA,OAAO,MAAA,EAAO;AAAA,EAAG;AACzB,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,MAAe,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AACpD,MAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,GAAA,EAAK,CAAC,OAAA,EAAS,GAAGA,SAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY,OAAA,CAAQ,UAAU,CAAC,CAAA;AACzG,MAAA,MAAM,QAAQ,MAAA,EAAQ,KAAA;AACtB,MAAA,IAAI,MAAA,IAAU,YAAA,CAAa,KAAA,EAAO,cAAA,EAAgB,KAAK,CAAA,IAAK,aAAA,CAAc,QAAA,EAAU,MAAM,OAAA,CAAQA,SAAQ,CAAC,CAAA,EAAG;AAC5G,QAAA,IAAI,MAAA,CAAO,SAAA,EAAW,yBAAA,CAA0B,MAAA,CAAO,SAAS,CAAA;AAChE,QAAA,MAAM,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,aAAA,EAAe,SAAS,GAAG,CAAA;AACjE,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAwD;AAChE,IAAA,OAAO,MAAA,EAAO;AAAA,EAChB;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,OAAA,SAAgB,MAAA,EAAO;AACvD,EAAA,MAAM,YAAY,MAAA,CAAO,SAAA;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,oBAAA,CAAqB,MAAM,CAAA;AACjD,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,KAAA,CAAA,IAAa,YAAA,CAAa,KAAA,EAAO,cAAA,EAAgB,KAAK,CAAA,KAAM,OAAA,CAAQ,SAAA,GAAY,KAAK,KAAK,IAAA,CAAA,EAAO;AAC/H,QAAA,MAAM,WAAA,GAAc,uBAAA,CAAwB,KAAA,EAAO,OAAA,CAAQ,SAAS,CAAA;AACpE,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,WAAW,CAAC,CAAA;AAC/C,QAAA,IAAI,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA,CAAE,UAAA,IAAc,cAAA,IAAkB,aAAA,CAAc,QAAA,EAAU,MAAM,OAAA,CAAQA,SAAQ,CAAC,CAAA,EAAG;AACnH,UAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,EAAE,GAAA,EAAK,SAAA,EAAW,QAAA,EAAU,MAAA,CAAO,QAAQ,KAAA,EAAO,GAAA,EAAK,WAAW,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AAC9H,UAAA,IAAI,YAAY,OAAA,CAAQ,EAAA,IAAM,aAAA,CAAc,QAAA,EAAU,MAAM,OAAA,CAAQA,SAAQ,CAAC,CAAA,QAAS,aAAA,CAAc,QAAA,EAAU,OAAA,CAAQ,aAAA,EAAe,SAAS,WAAW,CAAA;AAAA,QAC3J;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAoE;AAC5E,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,IAAI;AAAE,MAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQ,EAAE,GAAA,EAAK,WAAW,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAA+D;AAAA,EAChI;AACF","file":"chunk-LAXBP5DQ.js","sourcesContent":["import { createDurableObjectStore } from '../cloudflare/store';\nimport type { CoordinatorLocationHint } from '../cloudflare/store-options';\nimport type { CacheCoordinator } from '../cloudflare/coordinator';\nimport { fenceD1Writes } from './adapter';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createCacheExtension } from '../core/extension';\nimport type { CacheStore, DecimalConstructor, GeneratedCacheConfig } from '../core/types';\nimport { sha256Hex, stableStringify } from '../core/codec';\nimport { boundedValue, dependencyRuntimes, inspect, sameSnapshots } from './read';\nimport { boundedD1Store } from './bounded-store';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { readTargets } from '../core/targets';\nimport { registerD1SessionAlias, d1SessionBookmarkFloor, wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst hints = new Set(['wnam', 'enam', 'sam', 'weur', 'eeur', 'apac', 'oc', 'afr', 'me']);\nconst wrapped = new WeakMap<object, WeakMap<D1Database, Map<string, D1Database>>>();\nexport interface D1CacheRuntime { store: CacheStore; generation: string; databaseId: string; readsEnabled: boolean; readModels: readonly string[]; coordinatorIdentity: object; coordinatorName: string; regionalIdentity?: string }\nconst runtimes = new WeakMap<object, D1CacheRuntime>();\nexport const d1CacheRuntime = (database: object): D1CacheRuntime | undefined => runtimes.get(database);\nexport function createD1CacheRuntime(database: D1Database, options: { store: CacheStore; databaseId: string; generation: string; readsEnabled?: boolean; profile: D1CacheProfile; coordinatorIdentity?: object; coordinatorName?: string; regionalIdentity?: string }): D1Database {\n const { generation, databaseId, profile, readsEnabled = true } = options;\n const store = boundedD1Store(options.store);\n const fenced = fenceD1Writes(database, { store, generation, policy: profile });\n registerD1SessionAlias(fenced, database);\n runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? '', regionalIdentity: options.regionalIdentity });\n return fenced;\n}\n\nexport function cacheD1Env<T extends object>(env: T, profile: D1CacheProfile): T {\n const value = (suffix: string): unknown => Reflect.get(env, `${profile.envPrefix}_${suffix}`);\n const enabled = value('ENABLED');\n if (enabled === undefined || enabled === 'false') return env;\n if (enabled !== 'true') throw new Error(`Invalid ${profile.envPrefix}_ENABLED`);\n const reads = value('READS_ENABLED');\n if (reads !== undefined && reads !== 'true' && reads !== 'false') throw new Error(`Invalid ${profile.envPrefix}_READS_ENABLED`);\n const readsEnabled = reads !== 'false';\n const namespace = value('COORDINATOR');\n const rawIds = value('DATABASE_IDS');\n const generation = value('GENERATION');\n if (!namespace || typeof namespace !== 'object' || typeof Reflect.get(namespace, 'idFromName') !== 'function' || typeof Reflect.get(namespace, 'get') !== 'function' || typeof rawIds !== 'string' || typeof generation !== 'string' || !generation.trim())\n throw new Error(`${profile.envPrefix} requires coordinator, database identities and generation`);\n if (generation.length > 256) throw new Error(`Invalid ${profile.envPrefix}_GENERATION`);\n let ids: unknown;\n try { ids = JSON.parse(rawIds); } catch { throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`); }\n if (!ids || typeof ids !== 'object' || Array.isArray(ids)) throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);\n const map = Object.entries(ids);\n if (map.some(([key, id]) => !isD1BindingName(key, profile) || typeof id !== 'string' || !uuid.test(id))) throw new Error('Invalid cache database identity');\n const locationHint = value('LOCATION_HINT') ?? 'weur';\n if (typeof locationHint !== 'string' || !hints.has(locationHint)) throw new Error(`Invalid ${profile.envPrefix}_LOCATION_HINT`);\n const identities = new Map(map);\n const scoped = { ...env };\n for (const name of profile.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Cache missing D1 binding: ${name}`);\n for (const [key, database] of Object.entries(env)) {\n if (profile.bindingPrefixes.some((prefix) => key.startsWith(prefix)) && !isD1BindingName(key, profile)) throw new Error(`Invalid cache binding: ${key}`);\n if (!isD1BindingName(key, profile)) continue;\n const id = identities.get(key);\n if (typeof id !== 'string' || !database || typeof database.prepare !== 'function') throw new Error(`Cache missing D1 identity or binding: ${key}`);\n const databaseId = id.toLowerCase();\n const cacheKey = JSON.stringify([databaseId, generation, locationHint, readsEnabled, profile]);\n let databases = wrapped.get(namespace);\n if (!databases) { databases = new WeakMap(); wrapped.set(namespace, databases); }\n let versions = databases.get(database);\n if (!versions) { versions = new Map(); databases.set(database, versions); }\n let cached = versions.get(cacheKey);\n if (!cached) {\n const coordinatorName = `${profile.coordinatorNamePrefix}${databaseId}`;\n const store = createDurableObjectStore(namespace as DurableObjectNamespace<CacheCoordinator>, { name: coordinatorName, locationHint: locationHint as CoordinatorLocationHint });\n cached = createD1CacheRuntime(database, { store, generation, databaseId, readsEnabled, profile, coordinatorIdentity: namespace, coordinatorName, regionalIdentity: (namespace as DurableObjectNamespace<CacheCoordinator>).idFromName(coordinatorName).toString() });\n versions.set(cacheKey, cached);\n }\n Reflect.set(scoped, key, cached);\n }\n return scoped;\n}\n\nexport function wrapD1Handler<Event, Env extends object, Context, Result>(handler: (event: Event, env: Env, context: Context) => Result, profile: D1CacheProfile): (event: Event, env: Env, context: Context) => Result {\n return (event, env, context) => handler(event, cacheD1Env(env, profile), context);\n}\n\nexport interface D1PrismaCacheOptions {\n scope: unknown;\n dependencies?: readonly D1Database[];\n keyArgs?: (args: unknown) => unknown;\n regionalTtlMs?: number;\n regionalModels?: readonly string[];\n}\n\nexport function d1PrismaCacheExtension(database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): ReturnType<typeof createCacheExtension> | undefined {\n const runtime = runtimes.get(database);\n if (!runtime || !runtime.readsEnabled) return undefined;\n const options = typeof optionsOrDecimal === 'function' ? undefined : optionsOrDecimal;\n const decimal = typeof optionsOrDecimal === 'function' ? optionsOrDecimal : decimalArg;\n const allowed = new Set(runtime.readModels);\n const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };\n const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...(decimal ? { decimal } : {}), ...(options?.keyArgs ? { keyArgs: options.keyArgs } : {}) };\n const base = createCacheExtension({ ...common, scope: runtime.databaseId });\n const operation = base.query.$allModels.$allOperations;\n if (!options) return { ...base, query: { $allModels: { $allOperations(params: Parameters<typeof operation>[0]) {\n return d1SessionBookmarkFloor() ? params.query(params.args) : operation(params);\n } } } };\n return {\n ...base,\n query: { $allModels: { async $allOperations(params: Parameters<typeof operation>[0]) {\n if (!params.model || !allowed.has(params.model) || !['findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow', 'findMany', 'count', 'aggregate', 'groupBy'].includes(params.operation)) return operation(params);\n if (options.scope === null || options.scope === undefined || !boundedValue(options.scope, 32_768, true) || (options.dependencies?.length ?? 0) > 32) return params.query(params.args);\n const dependencies = dependencyRuntimes(database, options.dependencies ?? []);\n if (!dependencies) return params.query(params.args);\n const internal = params.__internalParams;\n const dataPath = internal && typeof internal === 'object' && Array.isArray(Reflect.get(internal, 'dataPath')) ? Reflect.get(internal, 'dataPath') : [];\n const transaction: unknown = internal && typeof internal === 'object' ? Reflect.get(internal, 'transaction') : undefined;\n const inBatch = !!transaction && typeof transaction === 'object' && Reflect.get(transaction, 'kind') === 'batch';\n let regional: string | null = null;\n let normalizedArgs: unknown;\n let normalized = false;\n try {\n const identities = [runtime, ...dependencies].map((item) => [item.databaseId, item.generation, item.coordinatorName, item.regionalIdentity]);\n const targets = options.regionalModels ? readTargets(config.relationGraph, params.model, params.args) : undefined;\n const allowedTargets = !options.regionalModels || (!!targets && [...targets.models].every((model) => options.regionalModels?.includes(model)));\n if (options.regionalTtlMs && options.regionalTtlMs > 0 && options.regionalTtlMs <= 5000 && !inBatch && allowedTargets && identities.every((item) => item[3])) {\n normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;\n normalized = true;\n const configDigest = await sha256Hex(stableStringify(config));\n regional = await regionalKey(options.regionalTtlMs, ['prisma', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);\n }\n } catch { /* Key callbacks use the strict path on failure. */ }\n const hit = await regionalRead(regional, options.regionalTtlMs, decimal);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [runtime, ...dependencies].map((item) => item.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value; }\n }\n let started = Date.now();\n const snapshot = await inspect(dependencies);\n if (!snapshot) return params.query(params.args);\n let scope: string;\n try {\n scope = stableStringify([d1SessionBookmarkFloor() ? 'session-v1' : null, runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);\n if (new TextEncoder().encode(scope).byteLength > 32_768) return params.query(params.args);\n } catch { return params.query(params.args); }\n let verifiedHit = false;\n let hitBookmarks: Record<string, string> | undefined;\n let verifiedWrite = false;\n let queried = false;\n const store: CacheStore = { ...runtime.store,\n async write(request) {\n const value = d1SessionBookmarkFloor() ? JSON.stringify(wrapD1SessionCacheValue(request.value)) : request.value;\n const result = await runtime.store.write({ ...request, value });\n verifiedWrite = result.ok;\n return result;\n },\n async read(request) {\n const result = await runtime.store.read(request);\n if (result.kind === 'hit' && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: 'miss', epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };\n if (result.kind === 'hit' && d1SessionBookmarkFloor()) {\n let cached;\n try { cached = unwrapD1SessionCacheValue(JSON.parse(result.value), [runtime, ...dependencies].map((item) => item.databaseId)); } catch { cached = null; }\n if (!cached || typeof cached.value !== 'string') return { kind:'miss', epochs:result.epochs, lockHeldForMs:null, lockToken:null, pending:true };\n hitBookmarks = cached.bookmarks;\n verifiedHit = true;\n return { ...result, value:cached.value };\n }\n if (result.kind === 'hit') verifiedHit = true;\n return result;\n } };\n const scoped = createCacheExtension({ ...common, store, scope, ...(normalized ? { keyArgs: () => normalizedArgs } : {}) });\n const tracked = await trackD1SessionSource(async () => {\n const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {\n queried = true;\n started = Date.now();\n return runPrimaryD1SessionSource(() => params.query(args));\n } });\n if (!queried && verifiedHit && hitBookmarks) advanceD1SessionBookmarks(hitBookmarks);\n return value;\n });\n if (regional && ((!queried && verifiedHit) || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, wrapD1SessionCacheValue(tracked.value, tracked.bookmarks));\n return tracked.value;\n } } },\n };\n}\n\nexport function withD1PrismaCache<Client extends object>(client: Client, database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): Client {\n const extension = d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg);\n if (!extension) return client;\n const extend: unknown = Reflect.get(client, '$extends', client);\n if (typeof extend !== 'function') throw new TypeError('Prisma client must support $extends');\n const extended: unknown = Reflect.apply(extend, client, [extension]);\n if (!extended || typeof extended !== 'object') throw new TypeError('Prisma extension returned no client');\n return new Proxy(client, {\n get(target, property) {\n const source = property === '$on' ? target : extended;\n const member: unknown = Reflect.get(source, property, source);\n return typeof member === 'function' ? member.bind(source) : member;\n },\n });\n}\n","import { boundedValue } from '../core/bounded-value';\nimport type { D1Database } from '@cloudflare/workers-types';\nimport { decode, encode, sha256Hex, stableStringify } from '../core/codec';\nimport { MAX_VALUE_BYTES } from '../core/limits';\nimport { d1CacheRuntime, type D1CacheRuntime } from './env';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, d1SessionBookmarkFloor, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst FENCES = ['g'];\nconst DEFAULT_TTL_MS = 30_000;\nconst MAX_TTL_MS = 300_000;\nconst MAX_IDENTITY_BYTES = 32_768;\nconst MAX_VALUE_SIZE = Math.min(1_500_000, MAX_VALUE_BYTES);\n\nexport interface D1ReadOptions<T> {\n key: unknown;\n scope: unknown;\n dependencies?: readonly D1Database[];\n ttlMs?: number;\n regionalTtlMs?: number;\n cacheable?: (value: T) => boolean;\n}\n\nexport { boundedValue } from '../core/bounded-value';\n\nexport interface Snapshot { runtime: D1CacheRuntime; epoch: number }\nexport function sameD1CacheDatabase(left: object, right: object): boolean {\n const a = d1CacheRuntime(left);\n const b = d1CacheRuntime(right);\n return !!a && !!b && a.databaseId === b.databaseId && a.generation === b.generation && a.coordinatorIdentity === b.coordinatorIdentity && a.coordinatorName === b.coordinatorName;\n}\nexport async function d1CacheEpoch(database: object): Promise<string | null> {\n const runtime = d1CacheRuntime(database);\n if (!runtime || !runtime.readsEnabled) return null;\n const snapshot = await inspect([runtime]);\n if (!snapshot?.[0]) return null;\n return stableStringify([runtime.databaseId, runtime.generation, snapshot[0].epoch]);\n}\nexport async function inspect(runtimes: readonly D1CacheRuntime[]): Promise<Snapshot[] | null> {\n if (runtimes.length === 0) return [];\n try {\n const states = await Promise.all(runtimes.map(async (runtime) => {\n if (!runtime.store.inspectFences) return null;\n const state = await runtime.store.inspectFences({ fences: FENCES, generation: runtime.generation });\n const epoch = state.epochs.g;\n if (state.pending !== false || typeof epoch !== 'number' || !Number.isSafeInteger(epoch) || epoch < 0) return null;\n return { runtime, epoch };\n }));\n return states.some((state) => state === null) ? null : states.filter((state): state is Snapshot => state !== null);\n } catch { return null; }\n}\n\nexport const sameSnapshots = (a: readonly Snapshot[], b: readonly Snapshot[] | null): boolean =>\n b !== null && a.length === b.length && a.every((item, index) => item.runtime.databaseId === b[index]?.runtime.databaseId && item.runtime.generation === b[index]?.runtime.generation && item.epoch === b[index]?.epoch);\n\nexport function dependencyRuntimes(database: object, dependencies: readonly object[]): D1CacheRuntime[] | null {\n if (dependencies.length > 32) return null;\n const primary = d1CacheRuntime(database);\n if (!primary || !primary.readsEnabled) return null;\n const byId = new Map<string, D1CacheRuntime>();\n for (const dependency of dependencies) {\n const runtime = d1CacheRuntime(dependency);\n if (!runtime || !runtime.readsEnabled) return null;\n const prior = runtime.databaseId === primary.databaseId ? primary : byId.get(runtime.databaseId);\n if (prior && (prior.generation !== runtime.generation || prior.coordinatorIdentity !== runtime.coordinatorIdentity || prior.coordinatorName !== runtime.coordinatorName)) return null;\n if (runtime.databaseId === primary.databaseId) continue;\n if (!runtime.store.inspectFences) return null;\n byId.set(runtime.databaseId, prior ?? runtime);\n }\n return [...byId.values()].sort((a, b) => a.databaseId.localeCompare(b.databaseId));\n}\n\nexport async function cacheD1Read<T>(database: D1Database, options: D1ReadOptions<T>, load: () => Promise<T>): Promise<T> {\n const primary = d1CacheRuntime(database);\n const ttl = options.ttlMs ?? DEFAULT_TTL_MS;\n if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === undefined || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();\n const source = () => runPrimaryD1SessionSource(load);\n const runtimes = dependencyRuntimes(database, options.dependencies ?? []);\n if (!runtimes) return source();\n const regionalIdentities = [primary, ...runtimes].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);\n const regional = regionalIdentities.every((identity) => identity[3])\n ? await regionalKey(options.regionalTtlMs, ['d1-read', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;\n const hit = await regionalRead(regional, options.regionalTtlMs);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value as T; }\n }\n const started = Date.now();\n const snapshot = await inspect(runtimes);\n if (!snapshot) return source();\n let key: string;\n try {\n const identity = stableStringify(['d1-read-v1', d1SessionBookmarkFloor() ? 'session-v1' : null, primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);\n if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();\n key = `d1:${await sha256Hex(identity)}`;\n } catch { return load(); }\n let result;\n try { result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 30_000, refresh: false }); }\n catch { return source(); }\n if (result.kind === 'hit') {\n try {\n const raw: unknown = decode(JSON.parse(result.value));\n const cached = unwrapD1SessionCacheValue(raw, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n const value = cached?.value;\n if (cached && boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes))) {\n if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);\n await regionalWrite(regional, options.regionalTtlMs, started, raw);\n return value as T;\n }\n } catch { /* Invalid cached values are read from the source. */ }\n return source();\n }\n if (!result.lockToken || result.pending) return source();\n const lockToken = result.lockToken;\n try {\n const tracked = await trackD1SessionSource(source);\n const value = tracked.value;\n try {\n if (value !== null && value !== undefined && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {\n const cachedValue = wrapD1SessionCacheValue(value, tracked.bookmarks);\n const text = JSON.stringify(encode(cachedValue));\n if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes))) {\n const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });\n if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes))) await regionalWrite(regional, options.regionalTtlMs, started, cachedValue);\n }\n }\n } catch { /* The source result remains authoritative when caching fails. */ }\n return value;\n } finally {\n try { await primary.store.release({ key, lockToken }); } catch { /* The lock expires if the coordinator cannot be reached. */ }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/d1/env.ts","../src/d1/read.ts"],"names":["runtimes"],"mappings":"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","file":"chunk-6VWIKYUQ.js","sourcesContent":["import { createDurableObjectStore } from '../cloudflare/store';\nimport type { CoordinatorLocationHint } from '../cloudflare/store-options';\nimport type { CacheCoordinator } from '../cloudflare/coordinator';\nimport { fenceD1Writes } from './adapter';\nimport { isD1BindingName, type D1CacheProfile } from './profile';\nimport { createCacheExtension } from '../core/extension';\nimport type { CacheStore, DecimalConstructor, GeneratedCacheConfig } from '../core/types';\nimport { sha256Hex, stableStringify } from '../core/codec';\nimport { boundedValue, dependencyRuntimes, inspect, sameSnapshots } from './read';\nimport { boundedD1Store } from './bounded-store';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { readTargets } from '../core/targets';\nimport { registerD1SessionAlias, d1SessionBookmarkFloor, wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nconst hints = new Set(['wnam', 'enam', 'sam', 'weur', 'eeur', 'apac', 'oc', 'afr', 'me']);\nconst wrapped = new WeakMap<object, WeakMap<D1Database, Map<string, D1Database>>>();\nexport interface D1CacheRuntime { store: CacheStore; generation: string; databaseId: string; readsEnabled: boolean; readModels: readonly string[]; coordinatorIdentity: object; coordinatorName: string; regionalIdentity?: string }\nconst runtimes = new WeakMap<object, D1CacheRuntime>();\nexport const d1CacheRuntime = (database: object): D1CacheRuntime | undefined => runtimes.get(database);\nexport function createD1CacheRuntime(database: D1Database, options: { store: CacheStore; databaseId: string; generation: string; readsEnabled?: boolean; profile: D1CacheProfile; coordinatorIdentity?: object; coordinatorName?: string; regionalIdentity?: string }): D1Database {\n const { generation, databaseId, profile, readsEnabled = true } = options;\n const store = boundedD1Store(options.store);\n const fenced = fenceD1Writes(database, { store, generation, policy: profile });\n registerD1SessionAlias(fenced, database);\n runtimes.set(fenced, { store, generation, databaseId, readsEnabled, readModels: profile.readModels, coordinatorIdentity: options.coordinatorIdentity ?? options.store, coordinatorName: options.coordinatorName ?? '', regionalIdentity: options.regionalIdentity });\n return fenced;\n}\n\nexport function cacheD1Env<T extends object>(env: T, profile: D1CacheProfile): T {\n const value = (suffix: string): unknown => Reflect.get(env, `${profile.envPrefix}_${suffix}`);\n const enabled = value('ENABLED');\n if (enabled === undefined || enabled === 'false') return env;\n if (enabled !== 'true') throw new Error(`Invalid ${profile.envPrefix}_ENABLED`);\n const reads = value('READS_ENABLED');\n if (reads !== undefined && reads !== 'true' && reads !== 'false') throw new Error(`Invalid ${profile.envPrefix}_READS_ENABLED`);\n const readsEnabled = reads !== 'false';\n const namespace = value('COORDINATOR');\n const rawIds = value('DATABASE_IDS');\n const generation = value('GENERATION');\n if (!namespace || typeof namespace !== 'object' || typeof Reflect.get(namespace, 'idFromName') !== 'function' || typeof Reflect.get(namespace, 'get') !== 'function' || typeof rawIds !== 'string' || typeof generation !== 'string' || !generation.trim())\n throw new Error(`${profile.envPrefix} requires coordinator, database identities and generation`);\n if (generation.length > 256) throw new Error(`Invalid ${profile.envPrefix}_GENERATION`);\n let ids: unknown;\n try { ids = JSON.parse(rawIds); } catch { throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`); }\n if (!ids || typeof ids !== 'object' || Array.isArray(ids)) throw new Error(`Invalid ${profile.envPrefix}_DATABASE_IDS`);\n const map = Object.entries(ids);\n if (map.some(([key, id]) => !isD1BindingName(key, profile) || typeof id !== 'string' || !uuid.test(id))) throw new Error('Invalid cache database identity');\n const locationHint = value('LOCATION_HINT') ?? 'weur';\n if (typeof locationHint !== 'string' || !hints.has(locationHint)) throw new Error(`Invalid ${profile.envPrefix}_LOCATION_HINT`);\n const identities = new Map(map);\n const scoped = { ...env };\n for (const name of profile.bindingNames) if (!Reflect.has(env, name)) throw new Error(`Cache missing D1 binding: ${name}`);\n for (const [key, database] of Object.entries(env)) {\n if (profile.bindingPrefixes.some((prefix) => key.startsWith(prefix)) && !isD1BindingName(key, profile)) throw new Error(`Invalid cache binding: ${key}`);\n if (!isD1BindingName(key, profile)) continue;\n const id = identities.get(key);\n if (typeof id !== 'string' || !database || typeof database.prepare !== 'function') throw new Error(`Cache missing D1 identity or binding: ${key}`);\n const databaseId = id.toLowerCase();\n const cacheKey = JSON.stringify([databaseId, generation, locationHint, readsEnabled, profile]);\n let databases = wrapped.get(namespace);\n if (!databases) { databases = new WeakMap(); wrapped.set(namespace, databases); }\n let versions = databases.get(database);\n if (!versions) { versions = new Map(); databases.set(database, versions); }\n let cached = versions.get(cacheKey);\n if (!cached) {\n const coordinatorName = `${profile.coordinatorNamePrefix}${databaseId}`;\n const store = createDurableObjectStore(namespace as DurableObjectNamespace<CacheCoordinator>, { name: coordinatorName, locationHint: locationHint as CoordinatorLocationHint });\n cached = createD1CacheRuntime(database, { store, generation, databaseId, readsEnabled, profile, coordinatorIdentity: namespace, coordinatorName, regionalIdentity: (namespace as DurableObjectNamespace<CacheCoordinator>).idFromName(coordinatorName).toString() });\n versions.set(cacheKey, cached);\n }\n Reflect.set(scoped, key, cached);\n }\n return scoped;\n}\n\nexport function wrapD1Handler<Event, Env extends object, Context, Result>(handler: (event: Event, env: Env, context: Context) => Result, profile: D1CacheProfile): (event: Event, env: Env, context: Context) => Result {\n return (event, env, context) => handler(event, cacheD1Env(env, profile), context);\n}\n\nexport interface D1PrismaCacheOptions {\n scope: unknown;\n dependencies?: readonly D1Database[];\n keyArgs?: (args: unknown) => unknown;\n regionalTtlMs?: number;\n regionalModels?: readonly string[];\n}\n\nexport function d1PrismaCacheExtension(database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): ReturnType<typeof createCacheExtension> | undefined {\n const runtime = runtimes.get(database);\n if (!runtime || !runtime.readsEnabled) return undefined;\n const options = typeof optionsOrDecimal === 'function' ? undefined : optionsOrDecimal;\n const decimal = typeof optionsOrDecimal === 'function' ? optionsOrDecimal : decimalArg;\n const allowed = new Set(runtime.readModels);\n const scopedConfig = { ...config, cacheableByModel: Object.fromEntries(Object.entries(config.cacheableByModel).map(([model, enabled]) => [model, enabled && allowed.has(model)])) };\n const common = { config: scopedConfig, store: runtime.store, generation: runtime.generation, coordinationGeneration: runtime.generation, ...(decimal ? { decimal } : {}), ...(options?.keyArgs ? { keyArgs: options.keyArgs } : {}) };\n const base = createCacheExtension({ ...common, scope: runtime.databaseId });\n const operation = base.query.$allModels.$allOperations;\n if (!options) return { ...base, query: { $allModels: { $allOperations(params: Parameters<typeof operation>[0]) {\n return d1SessionBookmarkFloor() ? params.query(params.args) : operation(params);\n } } } };\n return {\n ...base,\n query: { $allModels: { async $allOperations(params: Parameters<typeof operation>[0]) {\n if (!params.model || !allowed.has(params.model) || !['findUnique', 'findUniqueOrThrow', 'findFirst', 'findFirstOrThrow', 'findMany', 'count', 'aggregate', 'groupBy'].includes(params.operation)) return operation(params);\n if (options.scope === null || options.scope === undefined || !boundedValue(options.scope, 32_768, true) || (options.dependencies?.length ?? 0) > 32) return params.query(params.args);\n const dependencies = dependencyRuntimes(database, options.dependencies ?? []);\n if (!dependencies) return params.query(params.args);\n const internal = params.__internalParams;\n const dataPath = internal && typeof internal === 'object' && Array.isArray(Reflect.get(internal, 'dataPath')) ? Reflect.get(internal, 'dataPath') : [];\n const transaction: unknown = internal && typeof internal === 'object' ? Reflect.get(internal, 'transaction') : undefined;\n const inBatch = !!transaction && typeof transaction === 'object' && Reflect.get(transaction, 'kind') === 'batch';\n let regional: string | null = null;\n let normalizedArgs: unknown;\n let normalized = false;\n try {\n const identities = [runtime, ...dependencies].map((item) => [item.databaseId, item.generation, item.coordinatorName, item.regionalIdentity]);\n const targets = options.regionalModels ? readTargets(config.relationGraph, params.model, params.args) : undefined;\n const allowedTargets = !options.regionalModels || (!!targets && [...targets.models].every((model) => options.regionalModels?.includes(model)));\n if (options.regionalTtlMs && options.regionalTtlMs > 0 && options.regionalTtlMs <= 5000 && !inBatch && allowedTargets && identities.every((item) => item[3])) {\n normalizedArgs = options.keyArgs ? options.keyArgs(params.args) : params.args;\n normalized = true;\n const configDigest = await sha256Hex(stableStringify(config));\n regional = await regionalKey(options.regionalTtlMs, ['prisma', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, identities, configDigest, options.scope, params.model, params.operation, dataPath, normalizedArgs ?? null]);\n }\n } catch { /* Key callbacks use the strict path on failure. */ }\n const hit = await regionalRead(regional, options.regionalTtlMs, decimal);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [runtime, ...dependencies].map((item) => item.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value; }\n }\n let started = Date.now();\n const snapshot = await inspect(dependencies);\n if (!snapshot) return params.query(params.args);\n let scope: string;\n try {\n scope = stableStringify([d1SessionBookmarkFloor() ? 'session-v1' : null, runtime.databaseId, runtime.generation, options.scope, snapshot.map(({ runtime: dependency, epoch }) => [dependency.databaseId, dependency.generation, epoch])]);\n if (new TextEncoder().encode(scope).byteLength > 32_768) return params.query(params.args);\n } catch { return params.query(params.args); }\n let verifiedHit = false;\n let hitBookmarks: Record<string, string> | undefined;\n let verifiedWrite = false;\n let queried = false;\n const store: CacheStore = { ...runtime.store,\n async write(request) {\n const value = d1SessionBookmarkFloor() ? JSON.stringify(wrapD1SessionCacheValue(request.value)) : request.value;\n const result = await runtime.store.write({ ...request, value });\n verifiedWrite = result.ok;\n return result;\n },\n async read(request) {\n const result = await runtime.store.read(request);\n if (result.kind === 'hit' && !sameSnapshots(snapshot, await inspect(dependencies))) return { kind: 'miss', epochs: result.epochs, lockHeldForMs: null, lockToken: null, pending: true };\n if (result.kind === 'hit' && d1SessionBookmarkFloor()) {\n let cached;\n try { cached = unwrapD1SessionCacheValue(JSON.parse(result.value), [runtime, ...dependencies].map((item) => item.databaseId)); } catch { cached = null; }\n if (!cached || typeof cached.value !== 'string') return { kind:'miss', epochs:result.epochs, lockHeldForMs:null, lockToken:null, pending:true };\n hitBookmarks = cached.bookmarks;\n verifiedHit = true;\n return { ...result, value:cached.value };\n }\n if (result.kind === 'hit') verifiedHit = true;\n return result;\n } };\n const scoped = createCacheExtension({ ...common, store, scope, ...(normalized ? { keyArgs: () => normalizedArgs } : {}) });\n const tracked = await trackD1SessionSource(async () => {\n const value = await scoped.query.$allModels.$allOperations({ ...params, query: async (args) => {\n queried = true;\n started = Date.now();\n return runPrimaryD1SessionSource(() => params.query(args));\n } });\n if (!queried && verifiedHit && hitBookmarks) advanceD1SessionBookmarks(hitBookmarks);\n return value;\n });\n if (regional && ((!queried && verifiedHit) || verifiedWrite) && sameSnapshots(snapshot, await inspect(dependencies))) await regionalWrite(regional, options.regionalTtlMs, started, wrapD1SessionCacheValue(tracked.value, tracked.bookmarks));\n return tracked.value;\n } } },\n };\n}\n\nexport function withD1PrismaCache<Client extends object>(client: Client, database: object, config: GeneratedCacheConfig, optionsOrDecimal?: D1PrismaCacheOptions | DecimalConstructor, decimalArg?: DecimalConstructor): Client {\n const extension = d1PrismaCacheExtension(database, config, optionsOrDecimal, decimalArg);\n if (!extension) return client;\n const extend: unknown = Reflect.get(client, '$extends', client);\n if (typeof extend !== 'function') throw new TypeError('Prisma client must support $extends');\n const extended: unknown = Reflect.apply(extend, client, [extension]);\n if (!extended || typeof extended !== 'object') throw new TypeError('Prisma extension returned no client');\n return new Proxy(client, {\n get(target, property) {\n const source = property === '$on' ? target : extended;\n const member: unknown = Reflect.get(source, property, source);\n return typeof member === 'function' ? member.bind(source) : member;\n },\n });\n}\n","import { boundedValue } from '../core/bounded-value';\nimport type { D1Database } from '@cloudflare/workers-types';\nimport { decode, encode, sha256Hex, stableStringify } from '../core/codec';\nimport { MAX_VALUE_BYTES } from '../core/limits';\nimport { d1CacheRuntime, type D1CacheRuntime } from './env';\nimport { regionalKey, regionalRead, regionalWrite } from './regional';\nimport { limitRegionalDataUntil } from './regional-deadline';\nimport { wrapD1SessionCacheValue, unwrapD1SessionCacheValue, advanceD1SessionBookmarks, d1SessionBookmarkFloor, trackD1SessionSource, runPrimaryD1SessionSource } from './session';\n\nconst FENCES = ['g'];\nconst DEFAULT_TTL_MS = 30_000;\nconst MAX_TTL_MS = 300_000;\nconst MAX_IDENTITY_BYTES = 32_768;\nconst MAX_VALUE_SIZE = Math.min(1_500_000, MAX_VALUE_BYTES);\n\nexport interface D1ReadOptions<T> {\n key: unknown;\n scope: unknown;\n dependencies?: readonly D1Database[];\n ttlMs?: number;\n regionalTtlMs?: number;\n cacheable?: (value: T) => boolean;\n}\n\nexport { boundedValue } from '../core/bounded-value';\n\nexport interface Snapshot { runtime: D1CacheRuntime; epoch: number }\nexport function sameD1CacheDatabase(left: object, right: object): boolean {\n const a = d1CacheRuntime(left);\n const b = d1CacheRuntime(right);\n return !!a && !!b && a.databaseId === b.databaseId && a.generation === b.generation && a.coordinatorIdentity === b.coordinatorIdentity && a.coordinatorName === b.coordinatorName;\n}\nexport async function d1CacheEpoch(database: object): Promise<string | null> {\n const runtime = d1CacheRuntime(database);\n if (!runtime || !runtime.readsEnabled) return null;\n const snapshot = await inspect([runtime]);\n if (!snapshot?.[0]) return null;\n return stableStringify([runtime.databaseId, runtime.generation, snapshot[0].epoch]);\n}\nexport async function inspect(runtimes: readonly D1CacheRuntime[]): Promise<Snapshot[] | null> {\n if (runtimes.length === 0) return [];\n try {\n const states = await Promise.all(runtimes.map(async (runtime) => {\n if (!runtime.store.inspectFences) return null;\n const state = await runtime.store.inspectFences({ fences: FENCES, generation: runtime.generation });\n const epoch = state.epochs.g;\n if (state.pending !== false || typeof epoch !== 'number' || !Number.isSafeInteger(epoch) || epoch < 0) return null;\n return { runtime, epoch };\n }));\n return states.some((state) => state === null) ? null : states.filter((state): state is Snapshot => state !== null);\n } catch { return null; }\n}\n\nexport const sameSnapshots = (a: readonly Snapshot[], b: readonly Snapshot[] | null): boolean =>\n b !== null && a.length === b.length && a.every((item, index) => item.runtime.databaseId === b[index]?.runtime.databaseId && item.runtime.generation === b[index]?.runtime.generation && item.epoch === b[index]?.epoch);\n\nexport function dependencyRuntimes(database: object, dependencies: readonly object[]): D1CacheRuntime[] | null {\n if (dependencies.length > 32) return null;\n const primary = d1CacheRuntime(database);\n if (!primary || !primary.readsEnabled) return null;\n const byId = new Map<string, D1CacheRuntime>();\n for (const dependency of dependencies) {\n const runtime = d1CacheRuntime(dependency);\n if (!runtime || !runtime.readsEnabled) return null;\n const prior = runtime.databaseId === primary.databaseId ? primary : byId.get(runtime.databaseId);\n if (prior && (prior.generation !== runtime.generation || prior.coordinatorIdentity !== runtime.coordinatorIdentity || prior.coordinatorName !== runtime.coordinatorName)) return null;\n if (runtime.databaseId === primary.databaseId) continue;\n if (!runtime.store.inspectFences) return null;\n byId.set(runtime.databaseId, prior ?? runtime);\n }\n return [...byId.values()].sort((a, b) => a.databaseId.localeCompare(b.databaseId));\n}\n\nexport async function cacheD1Read<T>(database: D1Database, options: D1ReadOptions<T>, load: () => Promise<T>): Promise<T> {\n const primary = d1CacheRuntime(database);\n const ttl = options.ttlMs ?? DEFAULT_TTL_MS;\n if (!primary || !primary.readsEnabled || !Number.isFinite(ttl) || ttl <= 0 || ttl > MAX_TTL_MS || options.scope === undefined || options.scope === null || !boundedValue(options.scope, MAX_IDENTITY_BYTES, true) || !boundedValue(options.key, MAX_IDENTITY_BYTES, true)) return load();\n const source = () => runPrimaryD1SessionSource(load);\n const runtimes = dependencyRuntimes(database, options.dependencies ?? []);\n if (!runtimes) return source();\n const regionalIdentities = [primary, ...runtimes].map((runtime) => [runtime.databaseId, runtime.generation, runtime.coordinatorName, runtime.regionalIdentity]);\n const regional = regionalIdentities.every((identity) => identity[3])\n ? await regionalKey(options.regionalTtlMs, ['d1-read', d1SessionBookmarkFloor() ? 'session-v1' : null, options.regionalTtlMs, regionalIdentities, options.scope, options.key]) : null;\n const hit = await regionalRead(regional, options.regionalTtlMs);\n if (hit) {\n const cached = unwrapD1SessionCacheValue(hit.value, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n if (cached) { if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks); limitRegionalDataUntil(hit.expires); return cached.value as T; }\n }\n const started = Date.now();\n const snapshot = await inspect(runtimes);\n if (!snapshot) return source();\n let key: string;\n try {\n const identity = stableStringify(['d1-read-v1', d1SessionBookmarkFloor() ? 'session-v1' : null, primary.databaseId, primary.generation, options.scope, options.key, snapshot.map(({ runtime, epoch }) => [runtime.databaseId, runtime.generation, epoch])]);\n if (new TextEncoder().encode(identity).byteLength > MAX_IDENTITY_BYTES) return load();\n key = `d1:${await sha256Hex(identity)}`;\n } catch { return load(); }\n let result;\n try { result = await primary.store.read({ key, fences: FENCES, generation: primary.generation, lockMs: 30_000, refresh: false }); }\n catch { return source(); }\n if (result.kind === 'hit') {\n try {\n const raw: unknown = decode(JSON.parse(result.value));\n const cached = unwrapD1SessionCacheValue(raw, [primary, ...runtimes].map((runtime) => runtime.databaseId));\n const value = cached?.value;\n if (cached && boundedValue(value, MAX_VALUE_SIZE, false) && sameSnapshots(snapshot, await inspect(runtimes))) {\n if (cached.bookmarks) advanceD1SessionBookmarks(cached.bookmarks);\n await regionalWrite(regional, options.regionalTtlMs, started, raw);\n return value as T;\n }\n } catch { /* Invalid cached values are read from the source. */ }\n return source();\n }\n if (!result.lockToken || result.pending) return source();\n const lockToken = result.lockToken;\n try {\n const tracked = await trackD1SessionSource(source);\n const value = tracked.value;\n try {\n if (value !== null && value !== undefined && boundedValue(value, MAX_VALUE_SIZE, false) && (options.cacheable?.(value) ?? true)) {\n const cachedValue = wrapD1SessionCacheValue(value, tracked.bookmarks);\n const text = JSON.stringify(encode(cachedValue));\n if (new TextEncoder().encode(text).byteLength <= MAX_VALUE_SIZE && sameSnapshots(snapshot, await inspect(runtimes))) {\n const written = await primary.store.write({ key, lockToken, snapshot: result.epochs, ttlMs: ttl, softTtlMs: ttl, value: text });\n if (regional && written.ok && sameSnapshots(snapshot, await inspect(runtimes))) await regionalWrite(regional, options.regionalTtlMs, started, cachedValue);\n }\n }\n } catch { /* The source result remains authoritative when caching fails. */ }\n return value;\n } finally {\n try { await primary.store.release({ key, lockToken }); } catch { /* The lock expires if the coordinator cannot be reached. */ }\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isMutation, needsFreshness, matchesPath } from './chunk-JPK2AF7X.js';
|
|
2
|
-
import { createResponseWarmup } from './chunk-
|
|
3
|
-
import { runIsolatedD1Session, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader, d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, hasCacheBypass } from './chunk-
|
|
2
|
+
import { createResponseWarmup } from './chunk-27P3CVHP.js';
|
|
3
|
+
import { runIsolatedD1Session, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader, d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, hasCacheBypass } from './chunk-2V6MG4YX.js';
|
|
4
4
|
import { registerRegionalDeadlineReporter } from './chunk-LHOK33GI.js';
|
|
5
5
|
import { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './chunk-ZBYAKDNZ.js';
|
|
6
6
|
import { responseLeaseKey, MAX_RESPONSE_LEASE_BYTES } from './chunk-E6OZZ5UX.js';
|
|
@@ -421,5 +421,5 @@ async function forwardReadLease(request, service) {
|
|
|
421
421
|
}
|
|
422
422
|
|
|
423
423
|
export { createReadResponseLease, forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin };
|
|
424
|
-
//# sourceMappingURL=chunk-
|
|
425
|
-
//# sourceMappingURL=chunk-
|
|
424
|
+
//# sourceMappingURL=chunk-STPV6MO7.js.map
|
|
425
|
+
//# sourceMappingURL=chunk-STPV6MO7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/response-lease.ts"],"names":["response","source","sourceBookmarks","lease","headers"],"mappings":"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","file":"chunk-O3KHMFHX.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createResponseWarmup, type ReadResponseWarmupOptions } from './response-warmup';\nexport type { ReadResponseWarmupOptions, ReadResponseWarmupTarget, ReadResponseWarmupContext } from './response-warmup';\nimport { registerRegionalDeadlineReporter } from './d1/regional-deadline';\nimport type { D1CacheProfile } from './d1/profile';\nimport { MAX_RESPONSE_LEASE_BYTES, responseLeaseKey } from './d1/regional';\nimport { isMutation, matchesPath, needsFreshness } from './d1/read-freshness-policy';\nimport { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\nimport { d1SessionBookmarkFloor, advanceD1SessionBookmarks, runIsolatedD1Session, trackD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, runPrimaryD1SessionSource } from './d1/session';\nimport { hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader } from './d1/request-freshness';\n\ninterface LeaseScope { deadline?: number; dataDeadline?: number }\nconst scope = new AsyncLocalStorage<LeaseScope>();\nexport function limitReadResponseDataUntil(deadline: number): void { const current = scope.getStore(); if (current) current.dataDeadline = Math.min(current.dataDeadline ?? Infinity, deadline); }\nregisterRegionalDeadlineReporter(limitReadResponseDataUntil);\n\nexport function limitReadResponseLeaseUntil(deadline: number | undefined): void {\n const current = scope.getStore();\n if (!current) return;\n if (deadline === undefined || !Number.isFinite(deadline)) { current.deadline = 0; return; }\n current.deadline = Math.min(current.deadline ?? Infinity, deadline);\n}\n\nconst noCache = (request: Request): Request => {\n const headers = new Headers(request.headers);\n headers.set('cache-control', 'no-cache');\n return new Request(request, { headers });\n};\nconst bypass = (request: Request, ignoreCacheControl: boolean): boolean => request.body !== null || ['range','if-match','if-unmodified-since','if-range'].some((name) => request.headers.has(name)) || (!ignoreCacheControl && hasCacheBypass(request));\n\nfunction entityTags(value: string): string[] | null {\n const tags: string[] = [];\n let index = 0;\n const whitespace = () => { while (value[index] === ' ' || value[index] === '\\t') index++; };\n whitespace();\n while (index < value.length) {\n if (value.slice(index, index + 2) === 'W/') index += 2;\n if (value[index++] !== '\"') return null;\n const start = index;\n while (index < value.length && value[index] !== '\"') {\n const code = value.charCodeAt(index++);\n if (code < 33 || code === 127 || code > 255) return null;\n }\n if (value[index] !== '\"') return null;\n tags.push(value.slice(start, index++));\n whitespace();\n if (index === value.length) break;\n if (value[index++] !== ',') return null;\n whitespace();\n if (index === value.length) return null;\n }\n return tags.length ? tags : null;\n}\n\nfunction httpDate(value: string | null): number {\n if (!value || !/^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \\d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d{4} \\d{2}:\\d{2}:\\d{2} GMT|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \\d{2}-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{2} \\d{2}:\\d{2}:\\d{2} GMT|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ \\d]\\d \\d{2}:\\d{2}:\\d{2} \\d{4})$/.test(value)) return NaN;\n const time = Date.parse(value.endsWith(' GMT') ? value : `${value} GMT`);\n if (!Number.isFinite(time)) return NaN;\n const date = new Date(time);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const day = days[date.getUTCDay()];\n const month = months[date.getUTCMonth()];\n const number = String(date.getUTCDate()).padStart(2, '0');\n const clock = date.toUTCString().slice(17, 25);\n const rfc850 = `${day}, ${number}-${month}-${String(date.getUTCFullYear() % 100).padStart(2, '0')} ${clock} GMT`;\n const asctime = `${day?.slice(0, 3)} ${month} ${String(date.getUTCDate()).padStart(2, ' ')} ${clock} ${date.getUTCFullYear()}`;\n return value === date.toUTCString() || value === rfc850 || value === asctime ? time : NaN;\n}\n\nfunction conditionalHit(request: Request, response: Response): Response {\n const condition = request.headers.get('if-none-match');\n let matches = false;\n if (condition !== null) {\n if (condition.trim() === '*') matches = true;\n else {\n const requested = entityTags(condition);\n const current = entityTags(response.headers.get('etag') ?? '');\n matches = !!requested && !!current && current.length === 1 && requested.includes(current[0] ?? '');\n }\n } else {\n const modified = httpDate(response.headers.get('last-modified'));\n const since = httpDate(request.headers.get('if-modified-since'));\n matches = Number.isFinite(modified) && Number.isFinite(since) && modified <= since;\n }\n if (!matches) return response;\n const headers = new Headers(response.headers);\n headers.delete('content-length');\n void response.body?.cancel().catch(() => undefined);\n return new Response(null, { status:304, headers });\n}\n\nfunction selectedCookies(header: string | null, names: readonly string[]): string | null {\n const selected = (header ?? '').split(';').map((part) => part.trimStart()).filter((part) => {\n const separator = part.indexOf('=');\n return separator > 0 && names.includes(part.slice(0, separator).trim());\n });\n return selected.length ? selected.join(';') : null;\n}\n\nfunction withoutCookie(header: string | null, name: string): string | null {\n if (!header) return null;\n const value = header.split(';').filter((part) => {\n const separator = part.indexOf('=');\n return separator < 0 || part.slice(0, separator).trim() !== name;\n }).join(';').trim();\n return value || null;\n}\n\nconst metadataHeader = 'x-dee-wan-lease-meta';\n\nasync function readLease(key: string, ttl: number, permittedVary: Set<string>): Promise<{ response: Response; expires: number } | null> {\n let cached: Response | undefined;\n let transferred = false;\n try {\n cached = await caches.default.match(key);\n if (!cached || cached.status !== 200 || !eligibleHeaders(cached.headers, permittedVary)) return null;\n const metadata = cached.headers.get(metadataHeader);\n if (!metadata) return null;\n const parsed: unknown = JSON.parse(metadata);\n if (!Array.isArray(parsed) || parsed.length !== 3) return null;\n const [started, expires, control] = parsed;\n const now = Date.now();\n if (!Number.isSafeInteger(started) || !Number.isSafeInteger(expires) || started > now || expires <= now || expires > started + ttl || (control !== null && typeof control !== 'string')) return null;\n const headers = new Headers(cached.headers);\n headers.delete(metadataHeader);\n if (control === null) headers.delete('cache-control');\n else headers.set('cache-control', control);\n const response = new Response(cached.body, { status:cached.status, statusText:cached.statusText, headers });\n transferred = true;\n return { response, expires };\n } catch { return null; }\n finally { if (cached && !transferred) void cached.body?.cancel().catch(() => undefined); }\n}\n\nfunction eligibleHeaders(headers: Headers, permittedVary: Set<string>): boolean {\n if (headers.has('set-cookie') || headers.has('content-encoding') || headers.has('content-disposition') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((name) => permittedVary.has(name.trim().toLowerCase()));\n}\n\nasync function responseEntry(response: Response, permittedVary: Set<string>): Promise<Uint8Array | null> {\n if (response.status !== 200 || response.headers.has(metadataHeader) || !eligibleHeaders(response.headers, permittedVary)) return null;\n const reader = response.clone().body?.getReader();\n if (!reader) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(Error('body timeout')), 5000); });\n for (;;) {\n const part = await Promise.race([reader.read(), timeout]);\n if (part.done) break;\n size += part.value.byteLength;\n if (size > MAX_RESPONSE_LEASE_BYTES) return null;\n chunks.push(part.value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal:true, ignoreBOM:false }).decode(bytes);\n JSON.parse(body);\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== size)) return null;\n return bytes;\n } catch { return null; }\n finally { if (timer !== undefined) clearTimeout(timer); void reader.cancel().catch(() => undefined); }\n}\n\nexport type ReadResponseLeasePolicy = Omit<NonNullable<D1CacheProfile['readResponseLease']>, 'databaseBinding' | 'deploymentEnv'>;\nexport interface ReadResponseLeaseOptions extends ReadResponseLeasePolicy {\n namespace: string;\n deployment: string;\n database: string;\n seconds: number;\n warmup?: ReadResponseWarmupOptions;\n}\ntype LeaseConfig = (NonNullable<D1CacheProfile['readResponseLease']> | ReadResponseLeaseOptions) & { warmup?: ReadResponseWarmupOptions };\ninterface ResolvedLease { config: LeaseConfig; seconds: number; identity: () => unknown[] | null }\nexport function createReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, resolve: (env: Env) => ResolvedLease | null): (request: Request, env: Env, context: Context) => Promise<Response> {\n const pending = new Map<string, { valid: boolean; task: Promise<void> }>();\n let foreground = 0;\n const warming = createResponseWarmup<Env, Context>((request, env, context) => runIsolatedD1Session(request, () => wrapped(request, env, context)), () => foreground === 0);\n const wrapped = async (request: Request, env: Env, context: Context): Promise<Response> => {\n const requestStarted = Date.now();\n const requestGeneration = warming.snapshot();\n const serve = async (input: Request): Promise<Response> => {\n if (input.method !== 'GET' || warming.isInternal(request)) return handler(input, env, context);\n foreground++;\n try { return await handler(input, env, context); }\n finally { foreground--; }\n };\n const resolved = resolve(env);\n if (!resolved) return serve(request);\n const { config, seconds } = resolved;\n const maxSeconds = config.maxSeconds ?? 5;\n const refreshAhead = config.refreshAheadSeconds ?? 0;\n if (!Number.isInteger(refreshAhead) || refreshAhead < 0 || refreshAhead > maxSeconds || !Number.isInteger(maxSeconds) || maxSeconds < 1 || maxSeconds > 300 || !Number.isInteger(seconds) || seconds <= 0 || seconds > maxSeconds || !/^[A-Za-z0-9_-]+$/.test(config.freshnessCookie)) return serve(request);\n if (config.cookieNames !== undefined && (!Array.isArray(config.cookieNames) || config.cookieNames.length === 0 || !config.cookieNames.every((name) => typeof name === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) || new Set(config.cookieNames).size !== config.cookieNames.length || !config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie') || (config.freshnessCookieMode === 'generation' && !config.cookieNames.includes(config.freshnessCookie)))) return serve(request);\n const generationMode = config.freshnessCookieMode === 'generation' && config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie');\n if (isMutation(request.method)) {\n const response = await handler(request, env, context);\n if (response.status < 200 || response.status >= 300 || !needsFreshness(request.method, new URL(request.url).pathname, config.freshnessCookieExcludedPaths)) return response;\n warming.invalidate();\n const headers = new Headers(response.headers);\n headers.append('set-cookie', `${config.freshnessCookie}=${generationMode ? crypto.randomUUID() : '1'}; Max-Age=${maxSeconds}; Path=/; HttpOnly; SameSite=Lax${new URL(request.url).protocol === 'https:' ? '; Secure' : ''}`);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n if (request.method !== 'GET') return serve(request);\n if (hasFreshnessCookie(request, config.freshnessCookie) && (!generationMode || !hasFreshnessGeneration(request, config.freshnessCookie))) return serve(noCache(request));\n if (config.freshnessHeader !== undefined && !validFreshnessHeader(config.freshnessHeader)) return serve(noCache(request));\n const forceSource = config.freshnessHeader !== undefined && request.headers.has(config.freshnessHeader);\n const url = new URL(request.url);\n const headerValue = (name: string): string | null => name.toLowerCase() === 'cookie' && config.cookieNames !== undefined ? selectedCookies(request.headers.get('cookie'), config.cookieNames) : request.headers.get(name);\n const hasCredential = (name: string): boolean => {\n const value = headerValue(name);\n if (name.toLowerCase() !== 'cookie' || config.cookieNames === undefined) return !!value?.trim();\n return (value ?? '').split(';').some((pair) => { const separator = pair.indexOf('='); return separator > 0 && pair.slice(0, separator).trim() !== config.freshnessCookie && !!pair.slice(separator + 1).trim(); });\n };\n if (bypass(request, config.ignoreRequestCacheControl === true) || !matchesPath(url.pathname, config.paths) || config.bypassQueryParams?.some((name) => url.searchParams.has(name)) || !config.credentialHeaders.some(hasCredential)) return serve(forceSource ? noCache(request) : request);\n const identity = resolved.identity();\n if (!identity) return serve(noCache(request));\n const names = [...new Set([...config.credentialHeaders, ...config.varyHeaders].map((name) => name.toLowerCase()))].sort();\n const permittedVary = new Set([...names, D1_BOOKMARK_HEADER.toLowerCase()]);\n const ttl = seconds * 1000;\n const key = await responseLeaseKey(ttl, [identity[0], request.method, request.url, ...identity.slice(1), names.map((name) => [name, headerValue(name)])]);\n if (!key) return serve(noCache(request));\n let cached = forceSource ? null : await readLease(key, ttl, permittedVary);\n const bookmarkFloor = d1SessionBookmarkFloor();\n if (cached && bookmarkFloor) {\n const rawBookmarks = cached.response.headers.get(D1_BOOKMARK_HEADER);\n const source = decodeD1Bookmarks(rawBookmarks);\n if (!rawBookmarks || !source || Object.entries(bookmarkFloor).some(([id, floor]) => !source[id] || source[id] < floor)) {\n void cached.response.body?.cancel().catch(() => undefined);\n cached = null;\n } else advanceD1SessionBookmarks(source);\n }\n const warmOptions = config.warmup;\n const warmGroup = warmOptions && typeof warmOptions.scopeHeader === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(warmOptions.scopeHeader) && config.varyHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-group', identity, names.map((name) => [name, headerValue(name)]), request.headers.get(warmOptions.scopeHeader)]) : null;\n const credentialGroup = warmOptions?.catalogScope === 'credential' && warmGroup && !config.credentialHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-credential-group', identity, names.filter((name) => name !== warmOptions.scopeHeader.toLowerCase()).map((name) => [name, name === 'cookie' ? withoutCookie(headerValue(name), config.freshnessCookie) : headerValue(name)])]) : null;\n const eligible = (target: URL) => matchesPath(target.pathname, config.paths) && !config.bypassQueryParams?.some((name) => target.searchParams.has(name));\n const scheduleWarm = (response: Response) => {\n let transferred = false;\n try {\n if (!warmOptions || !warmGroup || warming.isInternal(request) || !warming.current(requestGeneration)) return;\n const wait: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (typeof wait !== 'function') return;\n const warmHeaders = new Headers(request.headers);\n const sourceBookmarks = response.headers.get(D1_BOOKMARK_HEADER);\n if (sourceBookmarks) warmHeaders.set(D1_BOOKMARK_HEADER, sourceBookmarks);\n const warmRequest = new Request(request, { headers:warmHeaders });\n const task = warming.start(warmOptions, warmRequest, response, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? undefined);\n transferred = true;\n Reflect.apply(wait, context, [task]);\n } catch { /* Warming is optional. */ }\n finally { if (!transferred) void response.body?.cancel().catch(() => undefined); }\n };\n const fillResponse = async (response: Response, lease: LeaseScope, started: number, allowed: () => boolean, beforePut?: Promise<void>) => {\n if (lease.deadline === undefined || !Number.isFinite(lease.deadline)) return;\n let warmResponse: Response | undefined;\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { warmResponse = response.clone(); } catch { /* Warming is optional. */ }\n }\n const expires = Math.floor(Math.min(started + ttl, lease.deadline, lease.dataDeadline ?? Infinity));\n try {\n const entry = await responseEntry(response, permittedVary);\n if (entry && beforePut) await beforePut;\n if (entry && Number.isSafeInteger(expires) && expires > Date.now() && allowed() && warming.current(requestGeneration) && warming.allowed(request)) {\n warming.verify(request);\n if (warmResponse) { const owned = warmResponse; warmResponse = undefined; scheduleWarm(owned); }\n const headers = new Headers(response.headers);\n headers.set(metadataHeader, JSON.stringify([Math.floor(started), expires, headers.get('cache-control')]));\n headers.set('cache-control', 'public, max-age=300');\n await caches.default.put(key, new Response(entry, { status:response.status, statusText:response.statusText, headers }));\n }\n } catch { /* Cache filling must not affect the source response. */ }\n finally { if (warmResponse) void warmResponse.body?.cancel().catch(() => undefined); }\n };\n const waitUntil: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (cached) {\n const cachedResponse = cached.response;\n warming.verify(request);\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { scheduleWarm(cached.response.clone()); } catch { /* Warming is optional. */ }\n }\n if (refreshAhead > 0 && refreshAhead <= seconds && cached.expires - Date.now() <= refreshAhead * 1000 && typeof waitUntil === 'function' && !pending.has(key)) {\n const refresh = { valid:true, task:Promise.resolve() };\n let accepted = false;\n refresh.task = Promise.resolve().then(async () => {\n if (!accepted) return;\n const started = Date.now();\n const headers = new Headers(request.headers);\n for (const name of ['range', 'if-match', 'if-unmodified-since', 'if-range', 'if-none-match', 'if-modified-since']) headers.delete(name);\n headers.set('cache-control', 'no-cache');\n const cachedBookmarks = cachedResponse.headers.get(D1_BOOKMARK_HEADER);\n if (cachedBookmarks) headers.set(D1_BOOKMARK_HEADER, cachedBookmarks);\n if (config.freshnessHeader !== undefined) headers.set(config.freshnessHeader, '1');\n const source = new Request(request.url, { method:'GET', headers, signal:new AbortController().signal });\n const lease: LeaseScope = {};\n try {\n await runIsolatedD1Session(source, async () => {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => handler(source, env, context))));\n let response = tracked.value;\n const bookmarks = responseD1SessionBookmarks(response.headers, tracked.bookmarks);\n if (bookmarks) {\n const headers = new Headers(response.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n varyD1Bookmarks(headers);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n try { await fillResponse(response, lease, started, () => refresh.valid); }\n finally { void response.body?.cancel().catch(() => undefined); }\n });\n } catch { /* Refresh failures leave the old lease untouched. */ }\n }).finally(() => { if (pending.get(key) === refresh) pending.delete(key); });\n pending.set(key, refresh);\n try { Reflect.apply(waitUntil, context, [refresh.task]); accepted = true; } catch { pending.delete(key); }\n }\n return conditionalHit(request, cached.response);\n }\n const priorRefresh = pending.get(key);\n if (priorRefresh) priorRefresh.valid = false;\n const lease: LeaseScope = {};\n const source = noCache(request);\n if (config.freshnessHeader !== undefined) source.headers.set(config.freshnessHeader, '1');\n const sourceResult = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => serve(source))));\n let response = sourceResult.value;\n const sourceBookmarks = responseD1SessionBookmarks(response.headers, sourceResult.bookmarks);\n if (sourceBookmarks) {\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const encoded = serializeD1Bookmarks(sourceBookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n const fill = fillResponse(response, lease, requestStarted, () => true, priorRefresh?.task);\n try {\n if (!warming.isInternal(request) && typeof waitUntil === 'function') { Reflect.apply(waitUntil, context, [fill]); return response; }\n } catch { /* Await the fill if the request context is unavailable. */ }\n await fill;\n return response;\n };\n return wrapped;\n}\n\nexport function wrapReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: ReadResponseLeaseOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, () => {\n if (![options.namespace, options.deployment, options.database].every((value) => typeof value === 'string' && value.trim().length > 0)) return null;\n const identity = { ...options };\n delete identity.warmup;\n return { config: options, seconds: options.seconds, identity: () => ['response-lease-v1', identity] };\n });\n}\n\nconst proofHeader = 'x-dee-wan-read-lease-deadline';\n\nfunction withoutProof(request: Request): Request {\n if (!request.headers.has(proofHeader)) return request;\n const headers = new Headers(request.headers);\n headers.delete(proofHeader);\n return new Request(request, { headers });\n}\n\nfunction responseWithProof(response: Response, deadline?: number): Response {\n if (!response.headers.has(proofHeader) && deadline === undefined) return response;\n const headers = new Headers(response.headers);\n headers.delete(proofHeader);\n if (deadline !== undefined) headers.set(proofHeader, String(Math.floor(deadline)));\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers, ...(response.webSocket ? { webSocket:response.webSocket } : {}) });\n}\n\nexport function wrapReadResponseLeaseOrigin<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n const lease: LeaseScope = {};\n const response = await scope.run(lease, () => handler(withoutProof(request), env, context));\n const deadline = lease.deadline;\n const type = response.headers.get('content-type') ?? '';\n if (request.method !== 'GET' || response.status !== 200 || response.headers.has('set-cookie') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(type) || deadline === undefined || !Number.isFinite(deadline) || deadline <= Date.now()) return responseWithProof(response);\n return responseWithProof(response, Math.min(deadline, lease.dataDeadline ?? Infinity));\n };\n}\n\nexport async function forwardReadLease(request: Request, service: { fetch(request: Request): Promise<Response> }): Promise<Response> {\n let forwarded = withoutProof(request);\n if (request.method === 'GET') {\n const headers = new Headers(forwarded.headers);\n headers.set('accept-encoding', 'identity');\n forwarded = new Request(forwarded, { headers });\n }\n const response = await service.fetch(forwarded);\n const raw = response.headers.get(proofHeader);\n if (raw && /^\\d+$/.test(raw)) {\n const deadline = Number(raw);\n if (Number.isSafeInteger(deadline) && deadline > Date.now()) limitReadResponseLeaseUntil(deadline);\n }\n return responseWithProof(response);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/response-lease.ts"],"names":["response","source","sourceBookmarks","lease","headers"],"mappings":"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","file":"chunk-STPV6MO7.js","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createResponseWarmup, type ReadResponseWarmupOptions } from './response-warmup';\nexport type { ReadResponseWarmupOptions, ReadResponseWarmupTarget, ReadResponseWarmupContext } from './response-warmup';\nimport { registerRegionalDeadlineReporter } from './d1/regional-deadline';\nimport type { D1CacheProfile } from './d1/profile';\nimport { MAX_RESPONSE_LEASE_BYTES, responseLeaseKey } from './d1/regional';\nimport { isMutation, matchesPath, needsFreshness } from './d1/read-freshness-policy';\nimport { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from './d1/bookmarks';\nimport { d1SessionBookmarkFloor, advanceD1SessionBookmarks, runIsolatedD1Session, trackD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks, runPrimaryD1SessionSource } from './d1/session';\nimport { hasCacheBypass, hasFreshnessCookie, hasFreshnessGeneration, validFreshnessHeader } from './d1/request-freshness';\n\ninterface LeaseScope { deadline?: number; dataDeadline?: number }\nconst scope = new AsyncLocalStorage<LeaseScope>();\nexport function limitReadResponseDataUntil(deadline: number): void { const current = scope.getStore(); if (current) current.dataDeadline = Math.min(current.dataDeadline ?? Infinity, deadline); }\nregisterRegionalDeadlineReporter(limitReadResponseDataUntil);\n\nexport function limitReadResponseLeaseUntil(deadline: number | undefined): void {\n const current = scope.getStore();\n if (!current) return;\n if (deadline === undefined || !Number.isFinite(deadline)) { current.deadline = 0; return; }\n current.deadline = Math.min(current.deadline ?? Infinity, deadline);\n}\n\nconst noCache = (request: Request): Request => {\n const headers = new Headers(request.headers);\n headers.set('cache-control', 'no-cache');\n return new Request(request, { headers });\n};\nconst bypass = (request: Request, ignoreCacheControl: boolean): boolean => request.body !== null || ['range','if-match','if-unmodified-since','if-range'].some((name) => request.headers.has(name)) || (!ignoreCacheControl && hasCacheBypass(request));\n\nfunction entityTags(value: string): string[] | null {\n const tags: string[] = [];\n let index = 0;\n const whitespace = () => { while (value[index] === ' ' || value[index] === '\\t') index++; };\n whitespace();\n while (index < value.length) {\n if (value.slice(index, index + 2) === 'W/') index += 2;\n if (value[index++] !== '\"') return null;\n const start = index;\n while (index < value.length && value[index] !== '\"') {\n const code = value.charCodeAt(index++);\n if (code < 33 || code === 127 || code > 255) return null;\n }\n if (value[index] !== '\"') return null;\n tags.push(value.slice(start, index++));\n whitespace();\n if (index === value.length) break;\n if (value[index++] !== ',') return null;\n whitespace();\n if (index === value.length) return null;\n }\n return tags.length ? tags : null;\n}\n\nfunction httpDate(value: string | null): number {\n if (!value || !/^(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), \\d{2} (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d{4} \\d{2}:\\d{2}:\\d{2} GMT|(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), \\d{2}-(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\\d{2} \\d{2}:\\d{2}:\\d{2} GMT|(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [ \\d]\\d \\d{2}:\\d{2}:\\d{2} \\d{4})$/.test(value)) return NaN;\n const time = Date.parse(value.endsWith(' GMT') ? value : `${value} GMT`);\n if (!Number.isFinite(time)) return NaN;\n const date = new Date(time);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const day = days[date.getUTCDay()];\n const month = months[date.getUTCMonth()];\n const number = String(date.getUTCDate()).padStart(2, '0');\n const clock = date.toUTCString().slice(17, 25);\n const rfc850 = `${day}, ${number}-${month}-${String(date.getUTCFullYear() % 100).padStart(2, '0')} ${clock} GMT`;\n const asctime = `${day?.slice(0, 3)} ${month} ${String(date.getUTCDate()).padStart(2, ' ')} ${clock} ${date.getUTCFullYear()}`;\n return value === date.toUTCString() || value === rfc850 || value === asctime ? time : NaN;\n}\n\nfunction conditionalHit(request: Request, response: Response): Response {\n const condition = request.headers.get('if-none-match');\n let matches = false;\n if (condition !== null) {\n if (condition.trim() === '*') matches = true;\n else {\n const requested = entityTags(condition);\n const current = entityTags(response.headers.get('etag') ?? '');\n matches = !!requested && !!current && current.length === 1 && requested.includes(current[0] ?? '');\n }\n } else {\n const modified = httpDate(response.headers.get('last-modified'));\n const since = httpDate(request.headers.get('if-modified-since'));\n matches = Number.isFinite(modified) && Number.isFinite(since) && modified <= since;\n }\n if (!matches) return response;\n const headers = new Headers(response.headers);\n headers.delete('content-length');\n void response.body?.cancel().catch(() => undefined);\n return new Response(null, { status:304, headers });\n}\n\nfunction selectedCookies(header: string | null, names: readonly string[]): string | null {\n const selected = (header ?? '').split(';').map((part) => part.trimStart()).filter((part) => {\n const separator = part.indexOf('=');\n return separator > 0 && names.includes(part.slice(0, separator).trim());\n });\n return selected.length ? selected.join(';') : null;\n}\n\nfunction withoutCookie(header: string | null, name: string): string | null {\n if (!header) return null;\n const value = header.split(';').filter((part) => {\n const separator = part.indexOf('=');\n return separator < 0 || part.slice(0, separator).trim() !== name;\n }).join(';').trim();\n return value || null;\n}\n\nconst metadataHeader = 'x-dee-wan-lease-meta';\n\nasync function readLease(key: string, ttl: number, permittedVary: Set<string>): Promise<{ response: Response; expires: number } | null> {\n let cached: Response | undefined;\n let transferred = false;\n try {\n cached = await caches.default.match(key);\n if (!cached || cached.status !== 200 || !eligibleHeaders(cached.headers, permittedVary)) return null;\n const metadata = cached.headers.get(metadataHeader);\n if (!metadata) return null;\n const parsed: unknown = JSON.parse(metadata);\n if (!Array.isArray(parsed) || parsed.length !== 3) return null;\n const [started, expires, control] = parsed;\n const now = Date.now();\n if (!Number.isSafeInteger(started) || !Number.isSafeInteger(expires) || started > now || expires <= now || expires > started + ttl || (control !== null && typeof control !== 'string')) return null;\n const headers = new Headers(cached.headers);\n headers.delete(metadataHeader);\n if (control === null) headers.delete('cache-control');\n else headers.set('cache-control', control);\n const response = new Response(cached.body, { status:cached.status, statusText:cached.statusText, headers });\n transferred = true;\n return { response, expires };\n } catch { return null; }\n finally { if (cached && !transferred) void cached.body?.cancel().catch(() => undefined); }\n}\n\nfunction eligibleHeaders(headers: Headers, permittedVary: Set<string>): boolean {\n if (headers.has('set-cookie') || headers.has('content-encoding') || headers.has('content-disposition') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(headers.get('content-type') ?? '')) return false;\n const vary = headers.get('vary');\n return !vary || vary.split(',').every((name) => permittedVary.has(name.trim().toLowerCase()));\n}\n\nasync function responseEntry(response: Response, permittedVary: Set<string>): Promise<Uint8Array | null> {\n if (response.status !== 200 || response.headers.has(metadataHeader) || !eligibleHeaders(response.headers, permittedVary)) return null;\n const reader = response.clone().body?.getReader();\n if (!reader) return null;\n const chunks: Uint8Array[] = [];\n let size = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const timeout = new Promise<never>((_, reject) => { timer = setTimeout(() => reject(Error('body timeout')), 5000); });\n for (;;) {\n const part = await Promise.race([reader.read(), timeout]);\n if (part.done) break;\n size += part.value.byteLength;\n if (size > MAX_RESPONSE_LEASE_BYTES) return null;\n chunks.push(part.value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.byteLength; }\n const body = new TextDecoder('utf-8', { fatal:true, ignoreBOM:false }).decode(bytes);\n JSON.parse(body);\n const length = response.headers.get('content-length');\n if (length !== null && (!/^(?:0|[1-9]\\d*)$/.test(length) || Number(length) !== size)) return null;\n return bytes;\n } catch { return null; }\n finally { if (timer !== undefined) clearTimeout(timer); void reader.cancel().catch(() => undefined); }\n}\n\nexport type ReadResponseLeasePolicy = Omit<NonNullable<D1CacheProfile['readResponseLease']>, 'databaseBinding' | 'deploymentEnv'>;\nexport interface ReadResponseLeaseOptions extends ReadResponseLeasePolicy {\n namespace: string;\n deployment: string;\n database: string;\n seconds: number;\n warmup?: ReadResponseWarmupOptions;\n}\ntype LeaseConfig = (NonNullable<D1CacheProfile['readResponseLease']> | ReadResponseLeaseOptions) & { warmup?: ReadResponseWarmupOptions };\ninterface ResolvedLease { config: LeaseConfig; seconds: number; identity: () => unknown[] | null }\nexport function createReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, resolve: (env: Env) => ResolvedLease | null): (request: Request, env: Env, context: Context) => Promise<Response> {\n const pending = new Map<string, { valid: boolean; task: Promise<void> }>();\n let foreground = 0;\n const warming = createResponseWarmup<Env, Context>((request, env, context) => runIsolatedD1Session(request, () => wrapped(request, env, context)), () => foreground === 0);\n const wrapped = async (request: Request, env: Env, context: Context): Promise<Response> => {\n const requestStarted = Date.now();\n const requestGeneration = warming.snapshot();\n const serve = async (input: Request): Promise<Response> => {\n if (input.method !== 'GET' || warming.isInternal(request)) return handler(input, env, context);\n foreground++;\n try { return await handler(input, env, context); }\n finally { foreground--; }\n };\n const resolved = resolve(env);\n if (!resolved) return serve(request);\n const { config, seconds } = resolved;\n const maxSeconds = config.maxSeconds ?? 5;\n const refreshAhead = config.refreshAheadSeconds ?? 0;\n if (!Number.isInteger(refreshAhead) || refreshAhead < 0 || refreshAhead > maxSeconds || !Number.isInteger(maxSeconds) || maxSeconds < 1 || maxSeconds > 300 || !Number.isInteger(seconds) || seconds <= 0 || seconds > maxSeconds || !/^[A-Za-z0-9_-]+$/.test(config.freshnessCookie)) return serve(request);\n if (config.cookieNames !== undefined && (!Array.isArray(config.cookieNames) || config.cookieNames.length === 0 || !config.cookieNames.every((name) => typeof name === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) || new Set(config.cookieNames).size !== config.cookieNames.length || !config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie') || (config.freshnessCookieMode === 'generation' && !config.cookieNames.includes(config.freshnessCookie)))) return serve(request);\n const generationMode = config.freshnessCookieMode === 'generation' && config.credentialHeaders.some((name) => name.toLowerCase() === 'cookie');\n if (isMutation(request.method)) {\n const response = await handler(request, env, context);\n if (response.status < 200 || response.status >= 300 || !needsFreshness(request.method, new URL(request.url).pathname, config.freshnessCookieExcludedPaths)) return response;\n warming.invalidate();\n const headers = new Headers(response.headers);\n headers.append('set-cookie', `${config.freshnessCookie}=${generationMode ? crypto.randomUUID() : '1'}; Max-Age=${maxSeconds}; Path=/; HttpOnly; SameSite=Lax${new URL(request.url).protocol === 'https:' ? '; Secure' : ''}`);\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n if (request.method !== 'GET') return serve(request);\n if (hasFreshnessCookie(request, config.freshnessCookie) && (!generationMode || !hasFreshnessGeneration(request, config.freshnessCookie))) return serve(noCache(request));\n if (config.freshnessHeader !== undefined && !validFreshnessHeader(config.freshnessHeader)) return serve(noCache(request));\n const forceSource = config.freshnessHeader !== undefined && request.headers.has(config.freshnessHeader);\n const url = new URL(request.url);\n const headerValue = (name: string): string | null => name.toLowerCase() === 'cookie' && config.cookieNames !== undefined ? selectedCookies(request.headers.get('cookie'), config.cookieNames) : request.headers.get(name);\n const hasCredential = (name: string): boolean => {\n const value = headerValue(name);\n if (name.toLowerCase() !== 'cookie' || config.cookieNames === undefined) return !!value?.trim();\n return (value ?? '').split(';').some((pair) => { const separator = pair.indexOf('='); return separator > 0 && pair.slice(0, separator).trim() !== config.freshnessCookie && !!pair.slice(separator + 1).trim(); });\n };\n if (bypass(request, config.ignoreRequestCacheControl === true) || !matchesPath(url.pathname, config.paths) || config.bypassQueryParams?.some((name) => url.searchParams.has(name)) || !config.credentialHeaders.some(hasCredential)) return serve(forceSource ? noCache(request) : request);\n const identity = resolved.identity();\n if (!identity) return serve(noCache(request));\n const names = [...new Set([...config.credentialHeaders, ...config.varyHeaders].map((name) => name.toLowerCase()))].sort();\n const permittedVary = new Set([...names, D1_BOOKMARK_HEADER.toLowerCase()]);\n const ttl = seconds * 1000;\n const key = await responseLeaseKey(ttl, [identity[0], request.method, request.url, ...identity.slice(1), names.map((name) => [name, headerValue(name)])]);\n if (!key) return serve(noCache(request));\n let cached = forceSource ? null : await readLease(key, ttl, permittedVary);\n const bookmarkFloor = d1SessionBookmarkFloor();\n if (cached && bookmarkFloor) {\n const rawBookmarks = cached.response.headers.get(D1_BOOKMARK_HEADER);\n const source = decodeD1Bookmarks(rawBookmarks);\n if (!rawBookmarks || !source || Object.entries(bookmarkFloor).some(([id, floor]) => !source[id] || source[id] < floor)) {\n void cached.response.body?.cancel().catch(() => undefined);\n cached = null;\n } else advanceD1SessionBookmarks(source);\n }\n const warmOptions = config.warmup;\n const warmGroup = warmOptions && typeof warmOptions.scopeHeader === 'string' && /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(warmOptions.scopeHeader) && config.varyHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-group', identity, names.map((name) => [name, headerValue(name)]), request.headers.get(warmOptions.scopeHeader)]) : null;\n const credentialGroup = warmOptions?.catalogScope === 'credential' && warmGroup && !config.credentialHeaders.some((name) => name.toLowerCase() === warmOptions.scopeHeader.toLowerCase()) ? await responseLeaseKey(ttl, ['response-warmup-credential-group', identity, names.filter((name) => name !== warmOptions.scopeHeader.toLowerCase()).map((name) => [name, name === 'cookie' ? withoutCookie(headerValue(name), config.freshnessCookie) : headerValue(name)])]) : null;\n const eligible = (target: URL) => matchesPath(target.pathname, config.paths) && !config.bypassQueryParams?.some((name) => target.searchParams.has(name));\n const scheduleWarm = (response: Response) => {\n let transferred = false;\n try {\n if (!warmOptions || !warmGroup || warming.isInternal(request) || !warming.current(requestGeneration)) return;\n const wait: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (typeof wait !== 'function') return;\n const warmHeaders = new Headers(request.headers);\n const sourceBookmarks = response.headers.get(D1_BOOKMARK_HEADER);\n if (sourceBookmarks) warmHeaders.set(D1_BOOKMARK_HEADER, sourceBookmarks);\n const warmRequest = new Request(request, { headers:warmHeaders });\n const task = warming.start(warmOptions, warmRequest, response, identity, warmGroup, eligible, env, context, config.freshnessHeader, credentialGroup ?? undefined);\n transferred = true;\n Reflect.apply(wait, context, [task]);\n } catch { /* Warming is optional. */ }\n finally { if (!transferred) void response.body?.cancel().catch(() => undefined); }\n };\n const fillResponse = async (response: Response, lease: LeaseScope, started: number, allowed: () => boolean, beforePut?: Promise<void>) => {\n if (lease.deadline === undefined || !Number.isFinite(lease.deadline)) return;\n let warmResponse: Response | undefined;\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { warmResponse = response.clone(); } catch { /* Warming is optional. */ }\n }\n const expires = Math.floor(Math.min(started + ttl, lease.deadline, lease.dataDeadline ?? Infinity));\n try {\n const entry = await responseEntry(response, permittedVary);\n if (entry && beforePut) await beforePut;\n if (entry && Number.isSafeInteger(expires) && expires > Date.now() && allowed() && warming.current(requestGeneration) && warming.allowed(request)) {\n warming.verify(request);\n if (warmResponse) { const owned = warmResponse; warmResponse = undefined; scheduleWarm(owned); }\n const headers = new Headers(response.headers);\n headers.set(metadataHeader, JSON.stringify([Math.floor(started), expires, headers.get('cache-control')]));\n headers.set('cache-control', 'public, max-age=300');\n await caches.default.put(key, new Response(entry, { status:response.status, statusText:response.statusText, headers }));\n }\n } catch { /* Cache filling must not affect the source response. */ }\n finally { if (warmResponse) void warmResponse.body?.cancel().catch(() => undefined); }\n };\n const waitUntil: unknown = context && typeof context === 'object' ? Reflect.get(context, 'waitUntil') : undefined;\n if (cached) {\n const cachedResponse = cached.response;\n warming.verify(request);\n if (warmOptions && warmGroup && !warming.isInternal(request) && typeof waitUntil === 'function') {\n try { scheduleWarm(cached.response.clone()); } catch { /* Warming is optional. */ }\n }\n if (refreshAhead > 0 && refreshAhead <= seconds && cached.expires - Date.now() <= refreshAhead * 1000 && typeof waitUntil === 'function' && !pending.has(key)) {\n const refresh = { valid:true, task:Promise.resolve() };\n let accepted = false;\n refresh.task = Promise.resolve().then(async () => {\n if (!accepted) return;\n const started = Date.now();\n const headers = new Headers(request.headers);\n for (const name of ['range', 'if-match', 'if-unmodified-since', 'if-range', 'if-none-match', 'if-modified-since']) headers.delete(name);\n headers.set('cache-control', 'no-cache');\n const cachedBookmarks = cachedResponse.headers.get(D1_BOOKMARK_HEADER);\n if (cachedBookmarks) headers.set(D1_BOOKMARK_HEADER, cachedBookmarks);\n if (config.freshnessHeader !== undefined) headers.set(config.freshnessHeader, '1');\n const source = new Request(request.url, { method:'GET', headers, signal:new AbortController().signal });\n const lease: LeaseScope = {};\n try {\n await runIsolatedD1Session(source, async () => {\n const tracked = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => handler(source, env, context))));\n let response = tracked.value;\n const bookmarks = responseD1SessionBookmarks(response.headers, tracked.bookmarks);\n if (bookmarks) {\n const headers = new Headers(response.headers);\n const encoded = serializeD1Bookmarks(bookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n varyD1Bookmarks(headers);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n try { await fillResponse(response, lease, started, () => refresh.valid); }\n finally { void response.body?.cancel().catch(() => undefined); }\n });\n } catch { /* Refresh failures leave the old lease untouched. */ }\n }).finally(() => { if (pending.get(key) === refresh) pending.delete(key); });\n pending.set(key, refresh);\n try { Reflect.apply(waitUntil, context, [refresh.task]); accepted = true; } catch { pending.delete(key); }\n }\n return conditionalHit(request, cached.response);\n }\n const priorRefresh = pending.get(key);\n if (priorRefresh) priorRefresh.valid = false;\n const lease: LeaseScope = {};\n const source = noCache(request);\n if (config.freshnessHeader !== undefined) source.headers.set(config.freshnessHeader, '1');\n const sourceResult = await trackD1SessionSource(() => runPrimaryD1SessionSource(() => scope.run(lease, () => serve(source))));\n let response = sourceResult.value;\n const sourceBookmarks = responseD1SessionBookmarks(response.headers, sourceResult.bookmarks);\n if (sourceBookmarks) {\n const headers = new Headers(response.headers);\n varyD1Bookmarks(headers);\n const encoded = serializeD1Bookmarks(sourceBookmarks);\n if (encoded) headers.set(D1_BOOKMARK_HEADER, encoded);\n response = new Response(response.body, { status:response.status, statusText:response.statusText, headers });\n }\n const fill = fillResponse(response, lease, requestStarted, () => true, priorRefresh?.task);\n try {\n if (!warming.isInternal(request) && typeof waitUntil === 'function') { Reflect.apply(waitUntil, context, [fill]); return response; }\n } catch { /* Await the fill if the request context is unavailable. */ }\n await fill;\n return response;\n };\n return wrapped;\n}\n\nexport function wrapReadResponseLease<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>, options: ReadResponseLeaseOptions): (request: Request, env: Env, context: Context) => Promise<Response> {\n return createReadResponseLease(handler, () => {\n if (![options.namespace, options.deployment, options.database].every((value) => typeof value === 'string' && value.trim().length > 0)) return null;\n const identity = { ...options };\n delete identity.warmup;\n return { config: options, seconds: options.seconds, identity: () => ['response-lease-v1', identity] };\n });\n}\n\nconst proofHeader = 'x-dee-wan-read-lease-deadline';\n\nfunction withoutProof(request: Request): Request {\n if (!request.headers.has(proofHeader)) return request;\n const headers = new Headers(request.headers);\n headers.delete(proofHeader);\n return new Request(request, { headers });\n}\n\nfunction responseWithProof(response: Response, deadline?: number): Response {\n if (!response.headers.has(proofHeader) && deadline === undefined) return response;\n const headers = new Headers(response.headers);\n headers.delete(proofHeader);\n if (deadline !== undefined) headers.set(proofHeader, String(Math.floor(deadline)));\n return new Response(response.body, { status:response.status, statusText:response.statusText, headers, ...(response.webSocket ? { webSocket:response.webSocket } : {}) });\n}\n\nexport function wrapReadResponseLeaseOrigin<Env, Context>(handler: (request: Request, env: Env, context: Context) => Promise<Response>): (request: Request, env: Env, context: Context) => Promise<Response> {\n return async (request, env, context) => {\n const lease: LeaseScope = {};\n const response = await scope.run(lease, () => handler(withoutProof(request), env, context));\n const deadline = lease.deadline;\n const type = response.headers.get('content-type') ?? '';\n if (request.method !== 'GET' || response.status !== 200 || response.headers.has('set-cookie') || !/^application\\/(?:[a-z0-9.+-]*\\+)?json(?:\\s*;|$)/i.test(type) || deadline === undefined || !Number.isFinite(deadline) || deadline <= Date.now()) return responseWithProof(response);\n return responseWithProof(response, Math.min(deadline, lease.dataDeadline ?? Infinity));\n };\n}\n\nexport async function forwardReadLease(request: Request, service: { fetch(request: Request): Promise<Response> }): Promise<Response> {\n let forwarded = withoutProof(request);\n if (request.method === 'GET') {\n const headers = new Headers(forwarded.headers);\n headers.set('accept-encoding', 'identity');\n forwarded = new Request(forwarded, { headers });\n }\n const response = await service.fetch(forwarded);\n const raw = response.headers.get(proofHeader);\n if (raw && /^\\d+$/.test(raw)) {\n const deadline = Number(raw);\n if (Number.isSafeInteger(deadline) && deadline > Date.now()) limitReadResponseLeaseUntil(deadline);\n }\n return responseWithProof(response);\n}\n"]}
|
package/dist/cloudflare/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createDurableObjectStore } from '../chunk-NFBMWKY5.js';
|
|
2
|
-
export { createResponseWarmup } from '../chunk-
|
|
2
|
+
export { createResponseWarmup } from '../chunk-27P3CVHP.js';
|
|
3
3
|
import { boundedD1Store, withinCoordinatorDeadline } from '../chunk-WKZ7TKGM.js';
|
|
4
4
|
import { createRegionalCache } from '../chunk-E6OZZ5UX.js';
|
|
5
5
|
import { GLOBAL_FENCE, MAX_TTL_MS, MAX_VALUE_BYTES, MAX_COORDINATOR_GENERATION_LENGTH, MAX_LEASE_MS, MAX_LOCK_MS } from '../chunk-OQRNVGQE.js';
|
package/dist/d1/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { cacheD1Read } from '../chunk-
|
|
2
|
-
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler } from '../chunk-
|
|
1
|
+
import { cacheD1Read } from '../chunk-6VWIKYUQ.js';
|
|
2
|
+
export { cacheD1Env, cacheD1Read, createD1CacheRuntime, d1CacheEpoch, d1PrismaCacheExtension, sameD1CacheDatabase, withD1PrismaCache, wrapD1Handler } from '../chunk-6VWIKYUQ.js';
|
|
3
3
|
import '../chunk-NFBMWKY5.js';
|
|
4
|
-
import { d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks } from '../chunk-
|
|
5
|
-
export { d1SessionCacheHooks, d1SessionWarmupRequest, fenceD1Writes, prismaD1SessionDatabase, regionalD1MetadataTtl, runD1PrismaScope, runD1SessionOperation, runIsolatedD1Session, runPrimaryD1SessionSource, sessionD1Env, wrapD1ReadSessionHandler } from '../chunk-
|
|
4
|
+
import { d1SessionBookmarkFloor, advanceD1SessionBookmarks, trackD1SessionSource, runPrimaryD1SessionSource, responseD1SessionBookmarks, varyD1Bookmarks } from '../chunk-2V6MG4YX.js';
|
|
5
|
+
export { d1SessionCacheHooks, d1SessionWarmupRequest, fenceD1Writes, prismaD1SessionDatabase, regionalD1MetadataTtl, runD1PrismaScope, runD1SessionOperation, runIsolatedD1Session, runPrimaryD1SessionSource, sessionD1Env, wrapD1ReadSessionHandler } from '../chunk-2V6MG4YX.js';
|
|
6
6
|
import '../chunk-LHOK33GI.js';
|
|
7
7
|
import '../chunk-M4UOCIDQ.js';
|
|
8
8
|
import { D1_BOOKMARK_HEADER, decodeD1Bookmarks, serializeD1Bookmarks } from '../chunk-ZBYAKDNZ.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { d1CacheRuntime } from '../chunk-
|
|
1
|
+
import { d1CacheRuntime } from '../chunk-6VWIKYUQ.js';
|
|
2
2
|
import '../chunk-NFBMWKY5.js';
|
|
3
|
-
import { createReadResponseLease } from '../chunk-
|
|
4
|
-
export { forwardReadLease as forwardD1ReadLease, limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin } from '../chunk-
|
|
3
|
+
import { createReadResponseLease } from '../chunk-STPV6MO7.js';
|
|
4
|
+
export { forwardReadLease as forwardD1ReadLease, limitReadResponseLeaseUntil as limitD1ReadLeaseUntil, wrapReadResponseLeaseOrigin as wrapD1ReadLeaseOrigin } from '../chunk-STPV6MO7.js';
|
|
5
5
|
import '../chunk-JPK2AF7X.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-27P3CVHP.js';
|
|
7
|
+
import '../chunk-2V6MG4YX.js';
|
|
8
8
|
import '../chunk-LHOK33GI.js';
|
|
9
9
|
import '../chunk-M4UOCIDQ.js';
|
|
10
10
|
import '../chunk-ZBYAKDNZ.js';
|
package/dist/response-lease.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin } from './chunk-
|
|
1
|
+
export { forwardReadLease, limitReadResponseLeaseUntil, wrapReadResponseLease, wrapReadResponseLeaseOrigin } from './chunk-STPV6MO7.js';
|
|
2
2
|
export { matchesPath as matchesReadResponsePath } from './chunk-JPK2AF7X.js';
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import './chunk-27P3CVHP.js';
|
|
4
|
+
import './chunk-2V6MG4YX.js';
|
|
5
5
|
import './chunk-LHOK33GI.js';
|
|
6
6
|
import './chunk-M4UOCIDQ.js';
|
|
7
7
|
import './chunk-ZBYAKDNZ.js';
|
package/docs/cache-contract.md
CHANGED
|
@@ -45,6 +45,8 @@ request flow. Fail to the database, never to stale cache.
|
|
|
45
45
|
Capacity overflow or reuse of a failed write token keeps the isolate disabled.
|
|
46
46
|
- Generated warmup: authorized generated GETs only; same credentials; bounded seeds and recent exact
|
|
47
47
|
query URLs. Max 24 targets, concurrency 2, deadline 10 s, cooldown 30 s. No recursive warm waves.
|
|
48
|
+
- Host `waitUntil` retains started source cleanup after wave abort or deadline. Release Prisma
|
|
49
|
+
admission before source lifetime ends. Canceled waves cannot promote stale results.
|
|
48
50
|
- No cold-read, write or auth latency guarantee. Sub-200 ms is a measured warm-read acceptance target.
|
|
49
51
|
|
|
50
52
|
## Fences
|
|
@@ -288,3 +290,10 @@ Begin failure refuses the write before the query. A late begin is ended after it
|
|
|
288
290
|
late read locks are released. End failure preserves the database result and leaves the
|
|
289
291
|
lease active until cleanup or expiry. This applies to scoped and unscoped Prisma clients,
|
|
290
292
|
raw D1 writes, and explicit invalidation. Multiple RPCs can exceed 2 seconds in total.
|
|
293
|
+
|
|
294
|
+
`discoveryPriority: 'next'`:
|
|
295
|
+
|
|
296
|
+
- New batch: after learned/unscoped targets, before older discoveries. Keep batch order.
|
|
297
|
+
- Full budget: replace older queued discoveries or ordinary seeds only. Protect running,
|
|
298
|
+
completed, learned and unscoped targets.
|
|
299
|
+
- Equal-priority duplicate: keep its queue position.
|