@demiurgejs/core 0.2.0-beta.4 → 0.2.0-beta.6

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.
Files changed (161) hide show
  1. package/README.md +37 -0
  2. package/bin/demiurge.mjs +23 -1
  3. package/dist/adapter/index.d.ts +1 -1
  4. package/dist/adapter/index.d.ts.map +1 -1
  5. package/dist/browser/file-router.d.ts +1 -1
  6. package/dist/chunks/{document-shell-CpJnFtSC.js → document-shell-C0aPrkhd.js} +2 -2
  7. package/dist/chunks/{document-shell-CpJnFtSC.js.map → document-shell-C0aPrkhd.js.map} +1 -1
  8. package/dist/chunks/image-CRerJ5BY.js +145 -0
  9. package/dist/chunks/image-CRerJ5BY.js.map +1 -0
  10. package/dist/chunks/{image-codec-BmzWnH6W.js → image-codec-CQ8Cwxwb.js} +2 -2
  11. package/dist/chunks/{image-codec-BmzWnH6W.js.map → image-codec-CQ8Cwxwb.js.map} +1 -1
  12. package/dist/chunks/{images-BQ80950B.js → images-QgdmLyQ3.js} +11 -11
  13. package/dist/chunks/{images-BQ80950B.js.map → images-QgdmLyQ3.js.map} +1 -1
  14. package/dist/chunks/{index-BVk9zWbe.js → index-LYve1rQp.js} +287 -351
  15. package/dist/chunks/index-LYve1rQp.js.map +1 -0
  16. package/dist/chunks/links-iU22QkCE.js +68 -0
  17. package/dist/chunks/links-iU22QkCE.js.map +1 -0
  18. package/dist/chunks/plugin-bkP6WwrS.js +2311 -0
  19. package/dist/chunks/plugin-bkP6WwrS.js.map +1 -0
  20. package/dist/chunks/runtime-BH519j2t.js +294 -0
  21. package/dist/chunks/runtime-BH519j2t.js.map +1 -0
  22. package/dist/chunks/streaming-BlKlC3nw.js +427 -0
  23. package/dist/chunks/streaming-BlKlC3nw.js.map +1 -0
  24. package/dist/chunks/{testing-DueXbMo4.js → testing-BEW1nchS.js} +2161 -1562
  25. package/dist/chunks/testing-BEW1nchS.js.map +1 -0
  26. package/dist/chunks/{vite-DO70kZA6.js → vite-BADZA8Fl.js} +90 -87
  27. package/dist/chunks/vite-BADZA8Fl.js.map +1 -0
  28. package/dist/cli.d.ts +10 -2
  29. package/dist/cli.d.ts.map +1 -1
  30. package/dist/cli.js +277 -87
  31. package/dist/cli.js.map +1 -1
  32. package/dist/config/index.js +2 -2
  33. package/dist/config/types.d.ts +14 -2
  34. package/dist/config/types.d.ts.map +1 -1
  35. package/dist/config/validate.d.ts.map +1 -1
  36. package/dist/data/cache.d.ts +5 -0
  37. package/dist/data/cache.d.ts.map +1 -1
  38. package/dist/data/index.d.ts +1 -1
  39. package/dist/data/index.d.ts.map +1 -1
  40. package/dist/data/testing.d.ts.map +1 -1
  41. package/dist/data/testing.js +101 -67
  42. package/dist/data/testing.js.map +1 -1
  43. package/dist/data/tiered.d.ts.map +1 -1
  44. package/dist/edge/index.js +27 -26
  45. package/dist/edge/index.js.map +1 -1
  46. package/dist/edge/stores.d.ts.map +1 -1
  47. package/dist/index.d.ts +4 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +158 -135
  50. package/dist/index.js.map +1 -1
  51. package/dist/inspect/command.d.ts +28 -0
  52. package/dist/inspect/command.d.ts.map +1 -0
  53. package/dist/inspect/index.d.ts +9 -0
  54. package/dist/inspect/index.d.ts.map +1 -0
  55. package/dist/inspect/redact.d.ts +35 -0
  56. package/dist/inspect/redact.d.ts.map +1 -0
  57. package/dist/inspect/report.d.ts +24 -0
  58. package/dist/inspect/report.d.ts.map +1 -0
  59. package/dist/inspect/types.d.ts +102 -0
  60. package/dist/inspect/types.d.ts.map +1 -0
  61. package/dist/internal/testing.js +12 -12
  62. package/dist/kv/index.js +7 -6
  63. package/dist/kv/index.js.map +1 -1
  64. package/dist/kv/store.d.ts.map +1 -1
  65. package/dist/node/http.d.ts +7 -0
  66. package/dist/node/http.d.ts.map +1 -1
  67. package/dist/node/index.d.ts +2 -2
  68. package/dist/node/index.d.ts.map +1 -1
  69. package/dist/node/index.js +31 -28
  70. package/dist/node/index.js.map +1 -1
  71. package/dist/node/serve.d.ts +4 -0
  72. package/dist/node/serve.d.ts.map +1 -1
  73. package/dist/redis/index.js +29 -28
  74. package/dist/redis/index.js.map +1 -1
  75. package/dist/redis/store.d.ts.map +1 -1
  76. package/dist/route/index.d.ts +1 -0
  77. package/dist/route/index.d.ts.map +1 -1
  78. package/dist/route/mutation.d.ts.map +1 -1
  79. package/dist/route/serialization.d.ts +24 -0
  80. package/dist/route/serialization.d.ts.map +1 -0
  81. package/dist/route/webhook.d.ts +6 -1
  82. package/dist/route/webhook.d.ts.map +1 -1
  83. package/dist/router/manifest.d.ts.map +1 -1
  84. package/dist/security/audit.d.ts +2 -1
  85. package/dist/security/audit.d.ts.map +1 -1
  86. package/dist/security/authorization.d.ts +36 -0
  87. package/dist/security/authorization.d.ts.map +1 -0
  88. package/dist/security/csrf.d.ts.map +1 -1
  89. package/dist/security/env-startup.d.ts +0 -2
  90. package/dist/security/env-startup.d.ts.map +1 -1
  91. package/dist/security/env.d.ts +27 -8
  92. package/dist/security/env.d.ts.map +1 -1
  93. package/dist/security/exceptions.d.ts +29 -0
  94. package/dist/security/exceptions.d.ts.map +1 -0
  95. package/dist/security/finding-codes.d.ts +56 -0
  96. package/dist/security/finding-codes.d.ts.map +1 -0
  97. package/dist/security/index.d.ts +5 -2
  98. package/dist/security/index.d.ts.map +1 -1
  99. package/dist/security/policy.d.ts +2 -5
  100. package/dist/security/policy.d.ts.map +1 -1
  101. package/dist/security/report.d.ts +2 -1
  102. package/dist/security/report.d.ts.map +1 -1
  103. package/dist/security/request.d.ts +1 -0
  104. package/dist/security/request.d.ts.map +1 -1
  105. package/dist/security/types.d.ts +138 -5
  106. package/dist/security/types.d.ts.map +1 -1
  107. package/dist/security/upload.d.ts +3 -3
  108. package/dist/security/upload.d.ts.map +1 -1
  109. package/dist/security/verification.d.ts.map +1 -1
  110. package/dist/server/request-handler.d.ts +3 -2
  111. package/dist/server/request-handler.d.ts.map +1 -1
  112. package/dist/server-only/browser.d.ts +2 -0
  113. package/dist/server-only/browser.d.ts.map +1 -0
  114. package/dist/server-only/browser.js +4 -0
  115. package/dist/server-only/browser.js.map +1 -0
  116. package/dist/server-only/index.d.ts +2 -0
  117. package/dist/server-only/index.d.ts.map +1 -0
  118. package/dist/server-only/index.js +2 -0
  119. package/dist/server-only/index.js.map +1 -0
  120. package/dist/static/index.d.ts.map +1 -1
  121. package/dist/static/index.js +255 -255
  122. package/dist/static/index.js.map +1 -1
  123. package/dist/static/testing.d.ts +26 -0
  124. package/dist/static/testing.d.ts.map +1 -0
  125. package/dist/static/testing.js +76 -0
  126. package/dist/static/testing.js.map +1 -0
  127. package/dist/testing/index.d.ts +47 -0
  128. package/dist/testing/index.d.ts.map +1 -0
  129. package/dist/testing/index.js +99 -0
  130. package/dist/testing/index.js.map +1 -0
  131. package/dist/vercel/build.d.ts +31 -0
  132. package/dist/vercel/build.d.ts.map +1 -0
  133. package/dist/vercel/config.d.ts +15 -0
  134. package/dist/vercel/config.d.ts.map +1 -0
  135. package/dist/vercel/index.d.ts +7 -0
  136. package/dist/vercel/index.d.ts.map +1 -0
  137. package/dist/vercel/index.js +11 -0
  138. package/dist/vercel/index.js.map +1 -0
  139. package/dist/vercel/runtime.d.ts +29 -0
  140. package/dist/vercel/runtime.d.ts.map +1 -0
  141. package/dist/vite/index.d.ts +9 -4
  142. package/dist/vite/index.d.ts.map +1 -1
  143. package/dist/vite/index.js +28 -21
  144. package/dist/vite/plugin.d.ts +18 -2
  145. package/dist/vite/plugin.d.ts.map +1 -1
  146. package/dist/vite/policy-verification.d.ts +33 -2
  147. package/dist/vite/policy-verification.d.ts.map +1 -1
  148. package/dist/vite/route-audit.d.ts +14 -2
  149. package/dist/vite/route-audit.d.ts.map +1 -1
  150. package/dist/vite/server-only-boundary.d.ts +8 -0
  151. package/dist/vite/server-only-boundary.d.ts.map +1 -0
  152. package/package.json +18 -1
  153. package/dist/chunks/env-startup-DOBYWlZD.js +0 -257
  154. package/dist/chunks/env-startup-DOBYWlZD.js.map +0 -1
  155. package/dist/chunks/index-BVk9zWbe.js.map +0 -1
  156. package/dist/chunks/plugin-BQgMiHxa.js +0 -1827
  157. package/dist/chunks/plugin-BQgMiHxa.js.map +0 -1
  158. package/dist/chunks/streaming-BEbPN7Uk.js +0 -469
  159. package/dist/chunks/streaming-BEbPN7Uk.js.map +0 -1
  160. package/dist/chunks/testing-DueXbMo4.js.map +0 -1
  161. package/dist/chunks/vite-DO70kZA6.js.map +0 -1
@@ -4,6 +4,7 @@ import type { ImagePolicy } from "../platform/images";
4
4
  import type { LocaleConfiguration } from "../routing";
5
5
  import type { EnvSchema } from "../security/env";
6
6
  import type { StaticFileHeaderPatternRule, VercelStaticDeployment } from "../static";
7
+ import type { VercelNodeDeployment } from "../vercel/config";
7
8
  export type DemiurgeRoutingConfig<Locale extends string = string> = {
8
9
  locales?: LocaleConfiguration<Locale>;
9
10
  routesDir?: string;
@@ -26,8 +27,9 @@ export type DemiurgeAssetsConfig = {
26
27
  images?: ImagePolicy;
27
28
  };
28
29
  export type DemiurgeServerDeploymentConfig = {
29
- entry: string;
30
+ entry?: string;
30
31
  outDir?: string;
32
+ provider?: VercelNodeDeployment;
31
33
  };
32
34
  export type DemiurgeStaticDeploymentConfig = {
33
35
  origin?: string;
@@ -55,7 +57,17 @@ export type DemiurgeConfig<Locale extends string = string> = {
55
57
  routing?: DemiurgeRoutingConfig<Locale>;
56
58
  security?: DemiurgeSecurityConfig;
57
59
  vite?: DemiurgeViteExtension;
58
- unstable_viteConfig?: (config: ViteUserConfig) => ViteUserConfig | Promise<ViteUserConfig>;
60
+ /**
61
+ * This callback is unsafe and unstable.
62
+ *
63
+ * It has no compatibility guarantee between Demiurge versions. It receives
64
+ * the resolved Vite configuration of the framework, after the framework
65
+ * adds its own build-time security plugins. Those plugins enforce the
66
+ * server-only module boundary and the client environment boundary. An
67
+ * application that removes or reorders a framework plugin in this callback
68
+ * loses that boundary. The application then owns the removed boundary.
69
+ */
70
+ unsafe_unstable_viteConfig?: (config: ViteUserConfig) => ViteUserConfig | Promise<ViteUserConfig>;
59
71
  };
60
72
  export type ResolvedDemiurgeConfig = DemiurgeConfig & {
61
73
  configFile: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/config/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AA2BD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,cAAc,CAoIhB;AA4HD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,UAW3C"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/config/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AA2BD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,cAAc,CA6IhB;AA4HD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,UAW3C"}
@@ -46,7 +46,12 @@ export type CacheStoreEntry = {
46
46
  tags: readonly string[];
47
47
  value: unknown;
48
48
  };
49
+ export type CacheStoreAtomicity = "best-effort" | "strong";
50
+ export type CacheStoreCapabilities = {
51
+ atomicity: CacheStoreAtomicity;
52
+ };
49
53
  export type CacheStore = {
54
+ capabilities: CacheStoreCapabilities;
50
55
  acquireRefreshLease?: (key: string, token: string, expiresAt: number) => MaybePromise<boolean>;
51
56
  delete: (key: string) => MaybePromise<boolean>;
52
57
  get: (key: string) => MaybePromise<CacheStoreEntry | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/data/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/data/cache.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export { cacheNotFound, CacheNotFoundError, createCache, createInvalidation, createMemoryCache, createMemoryCacheStore, defineTags, isCacheNotFoundError, parseCacheDuration, query, serializeCacheKey, serializeCacheNamespace, serializeCacheTag, tag, } from "./cache";
2
2
  export { createMemoryIdempotencyStore, runIdempotentMutation, } from "./idempotency";
3
3
  export { createTieredCacheStore } from "./tiered";
4
- export type { Cache, CacheDuration, CacheKey, CacheKeyPart, CacheRequest, CacheScope, CacheNamespace, CacheStore, CacheStoreEntry, CacheTag, CreateCacheOptions, Invalidation, InvalidationResult, Query, QueryDefinition, MemoryCacheOptions, MemoryCacheStoreOptions, } from "./cache";
4
+ export type { Cache, CacheDuration, CacheKey, CacheKeyPart, CacheRequest, CacheStoreAtomicity, CacheStoreCapabilities, CacheScope, CacheNamespace, CacheStore, CacheStoreEntry, CacheTag, CreateCacheOptions, Invalidation, InvalidationResult, Query, QueryDefinition, MemoryCacheOptions, MemoryCacheStoreOptions, } from "./cache";
5
5
  export type { TieredCacheStoreOptions } from "./tiered";
6
6
  export type { IdempotencyRequest, IdempotencyResult, IdempotencyStore, MemoryIdempotencyStoreOptions, } from "./idempotency";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,EACL,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,GAAG,GACJ,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,YAAY,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,EACL,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,GAAG,GACJ,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,YAAY,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACxD,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,GAC9B,MAAM,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/data/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAE3D,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;AAE/D,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,iBAAiB,iBA2G/B;AAED,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,iBAAiB,iBAwF/B"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/data/testing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,SAAS,CAAC;AAE3D,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;AAE/D,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,iBAAiB,iBAuI/B;AAED,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,iBAAiB,iBAqG/B"}
@@ -1,156 +1,190 @@
1
- async function m(i) {
2
- const e = await i(), s = `demiurge-contract:${Date.now()}:${Math.random()}`, a = `${s}:alpha`, o = `${s}:beta`, u = `${s}:gamma`, r = `${s}:delta`, l = `${s}:tag:alpha`, g = `${s}:tag:beta`, c = `${s}:tag:delta`, n = Date.now() + 6e4, h = {
3
- expiresAt: n,
4
- staleUntil: n + 5e3,
1
+ async function $(n) {
2
+ const e = await n(), s = `demiurge-contract:${Date.now()}:${Math.random()}`, a = `${s}:alpha`, u = `${s}:beta`, r = `${s}:gamma`, g = `${s}:delta`, o = `${s}:atomic`, l = `${s}:tag:alpha`, m = `${s}:tag:beta`, w = `${s}:tag:delta`, i = Date.now() + 6e4, h = {
3
+ expiresAt: i,
4
+ staleUntil: i + 5e3,
5
5
  tags: [l],
6
6
  value: { id: "alpha", revision: 1 }
7
7
  };
8
8
  try {
9
+ if (t(
10
+ e.capabilities.atomicity === "best-effort" || e.capabilities.atomicity === "strong",
11
+ "capabilities.atomicity must be `best-effort` or `strong`"
12
+ ), e.capabilities.atomicity === "strong") {
13
+ const f = `${s}:tag:atomic`;
14
+ await e.set(o, {
15
+ expiresAt: i,
16
+ staleUntil: i,
17
+ tags: [f],
18
+ value: "atomic"
19
+ });
20
+ const y = await Promise.all([
21
+ e.invalidateTags([f]),
22
+ e.invalidateTags([f])
23
+ ]);
24
+ t(
25
+ y.reduce((p, b) => p + b, 0) === 1,
26
+ "strong atomicity must count one concurrent tag invalidation exactly once"
27
+ ), t(
28
+ await e.get(o) === void 0,
29
+ "strong atomicity must remove an entry during concurrent tag invalidation"
30
+ );
31
+ }
9
32
  t(
10
33
  await e.get(a) === void 0,
11
34
  "get() must return undefined for a missing key"
12
- ), await e.set(a, h), d(await e.get(a), h, "set() then get()");
13
- const f = {
35
+ ), await e.set(a, h), v(await e.get(a), h, "set() then get()");
36
+ const d = {
14
37
  ...h,
15
38
  value: { id: "alpha", revision: 2 }
16
39
  };
17
- await e.set(a, f), d(
40
+ await e.set(a, d), v(
18
41
  await e.get(a),
19
- f,
42
+ d,
20
43
  "set() must replace an existing key"
21
- ), await e.set(o, {
22
- expiresAt: n + 1e4,
23
- staleUntil: n + 15e3,
24
- tags: [g],
44
+ ), await e.set(u, {
45
+ expiresAt: i + 1e4,
46
+ staleUntil: i + 15e3,
47
+ tags: [m],
25
48
  value: "beta"
26
- }), await e.set(u, {
27
- expiresAt: n + 2e4,
28
- staleUntil: n + 25e3,
29
- tags: [l, g],
49
+ }), await e.set(r, {
50
+ expiresAt: i + 2e4,
51
+ staleUntil: i + 25e3,
52
+ tags: [l, m],
30
53
  value: ["gamma"]
31
54
  }), t(
32
55
  await e.invalidateTags([l]) === 2,
33
56
  "invalidateTags() must return the number of entries deleted, counting each entry once"
34
57
  ), t(
35
- await e.get(a) === void 0 && await e.get(u) === void 0,
58
+ await e.get(a) === void 0 && await e.get(r) === void 0,
36
59
  "invalidateTags() must delete every entry carrying a matching tag"
37
60
  ), t(
38
- (await e.get(o))?.value === "beta",
61
+ (await e.get(u))?.value === "beta",
39
62
  "invalidateTags() must preserve entries with no matching tag"
40
63
  ), t(
41
- await e.delete(o) === !0,
64
+ await e.delete(u) === !0,
42
65
  "delete() must report an existing key"
43
66
  ), t(
44
- await e.delete(o) === !1,
67
+ await e.delete(u) === !1,
45
68
  "delete() must report a missing key"
46
69
  );
47
- const w = {
48
- expiresAt: n,
70
+ const c = {
71
+ expiresAt: i,
49
72
  negative: !0,
50
- staleUntil: n,
51
- tags: [c],
73
+ staleUntil: i,
74
+ tags: [w],
52
75
  value: "not found"
53
76
  };
54
- await e.set(r, w), d(
55
- await e.get(r),
56
- w,
77
+ await e.set(g, c), v(
78
+ await e.get(g),
79
+ c,
57
80
  "set() then get() for a negative entry"
58
81
  ), t(
59
- await e.invalidateTags([c]) === 1,
82
+ await e.invalidateTags([w]) === 1,
60
83
  "invalidateTags() must delete a negative entry carrying a matching tag"
61
84
  ), t(
62
- await e.get(r) === void 0,
85
+ await e.get(g) === void 0,
63
86
  "invalidateTags() must remove a negative entry the same as a positive one"
64
87
  );
65
88
  } finally {
66
89
  await Promise.all([
67
90
  e.delete(a),
68
- e.delete(o),
69
91
  e.delete(u),
70
- e.delete(r)
92
+ e.delete(r),
93
+ e.delete(g),
94
+ e.delete(o)
71
95
  ]);
72
96
  }
73
97
  }
74
- async function v(i) {
75
- const e = await i(), s = `demiurge-refresh-contract:${Date.now()}:${Math.random()}`, a = `${s}:entry`, o = `${s}:tag`, u = `${s}:first`, r = `${s}:second`, l = Date.now() + 6e4;
98
+ async function R(n) {
99
+ const e = await n(), s = `demiurge-refresh-contract:${Date.now()}:${Math.random()}`, a = `${s}:entry`, u = `${s}:tag`, r = `${s}:first`, g = `${s}:second`, o = Date.now() + 6e4;
76
100
  t(
77
101
  !!(e.acquireRefreshLease && e.publishRefresh && e.releaseRefreshLease),
78
102
  "SWR support requires acquireRefreshLease(), publishRefresh(), and releaseRefreshLease()"
79
103
  );
80
- const g = e.acquireRefreshLease, c = e.publishRefresh, n = e.releaseRefreshLease, h = {
104
+ const l = e.acquireRefreshLease, m = e.publishRefresh, w = e.releaseRefreshLease, i = {
81
105
  expiresAt: Date.now() - 1,
82
106
  staleUntil: Date.now() + 12e4,
83
- tags: [o],
107
+ tags: [u],
84
108
  value: "original"
85
- }, f = {
86
- ...h,
109
+ }, h = {
110
+ ...i,
87
111
  expiresAt: Date.now() + 6e4,
88
112
  value: "refreshed"
89
113
  };
90
114
  try {
91
- await e.set(a, h), t(
92
- await g(a, u, l),
93
- "acquireRefreshLease() must acquire an unowned key"
94
- ), t(
95
- !await g(a, r, l),
96
- "acquireRefreshLease() must exclude a second owner"
97
- ), t(
98
- !await c(a, r, f),
115
+ await e.set(a, i);
116
+ let d, c;
117
+ if (e.capabilities.atomicity === "strong") {
118
+ const f = await Promise.all([
119
+ l(a, r, o),
120
+ l(a, g, o)
121
+ ]);
122
+ t(
123
+ f.filter(Boolean).length === 1,
124
+ "strong atomicity must allow exactly one concurrent refresh lease owner"
125
+ ), d = f[0] ? r : g, c = f[0] ? g : r;
126
+ } else
127
+ t(
128
+ await l(a, r, o),
129
+ "acquireRefreshLease() must acquire an unowned key"
130
+ ), d = r, c = g;
131
+ t(
132
+ !await m(a, c, h),
99
133
  "publishRefresh() must reject a non-owner token"
100
- ), await n(a, r), t(
101
- !await g(a, r, l),
134
+ ), await w(a, c), t(
135
+ !await l(a, c, o),
102
136
  "releaseRefreshLease() must not release another owner's lease"
103
137
  ), t(
104
- await c(a, u, f),
138
+ await m(a, d, h),
105
139
  "publishRefresh() must atomically publish for the current owner"
106
- ), d(
140
+ ), v(
107
141
  await e.get(a),
108
- f,
142
+ h,
109
143
  "publishRefresh() for the current owner"
110
144
  ), t(
111
- await g(a, r, l),
145
+ await l(a, c, o),
112
146
  "successful publication must release the refresh lease"
113
147
  ), t(await e.delete(a), "delete() must remove the refreshed entry"), t(
114
- !await c(a, r, h),
148
+ !await m(a, c, i),
115
149
  "delete() must cancel an in-flight refresh lease"
116
- ), await e.set(a, h), t(
117
- await g(a, u, l),
150
+ ), await e.set(a, i), t(
151
+ await l(a, r, o),
118
152
  "a lease must be reusable after deletion"
119
153
  ), t(
120
- await e.invalidateTags([o]) === 1,
154
+ await e.invalidateTags([u]) === 1,
121
155
  "invalidateTags() must remove the leased entry"
122
156
  ), t(
123
- !await c(a, u, f),
157
+ !await m(a, r, h),
124
158
  "tag invalidation must cancel an in-flight refresh lease"
125
159
  );
126
160
  } finally {
127
161
  await e.delete(a);
128
162
  }
129
163
  }
130
- function d(i, e, s) {
131
- t(!!i, `${s} must preserve the entry`), t(
132
- i?.expiresAt === e.expiresAt,
164
+ function v(n, e, s) {
165
+ t(!!n, `${s} must preserve the entry`), t(
166
+ n?.expiresAt === e.expiresAt,
133
167
  `${s} must preserve expiresAt`
134
168
  ), t(
135
- !!i?.negative == !!e.negative,
169
+ !!n?.negative == !!e.negative,
136
170
  `${s} must preserve the negative flag`
137
171
  ), t(
138
- i?.staleUntil === e.staleUntil,
172
+ n?.staleUntil === e.staleUntil,
139
173
  `${s} must preserve staleUntil`
140
174
  ), t(
141
- JSON.stringify(i?.tags) === JSON.stringify(e.tags),
175
+ JSON.stringify(n?.tags) === JSON.stringify(e.tags),
142
176
  `${s} must preserve tags`
143
177
  ), t(
144
- JSON.stringify(i?.value) === JSON.stringify(e.value),
178
+ JSON.stringify(n?.value) === JSON.stringify(e.value),
145
179
  `${s} must preserve JSON-compatible values`
146
180
  );
147
181
  }
148
- function t(i, e) {
149
- if (!i)
182
+ function t(n, e) {
183
+ if (!n)
150
184
  throw new Error(`Cache store contract failed: ${e}.`);
151
185
  }
152
186
  export {
153
- m as verifyCacheStoreContract,
154
- v as verifyCacheStoreRefreshContract
187
+ $ as verifyCacheStoreContract,
188
+ R as verifyCacheStoreRefreshContract
155
189
  };
156
190
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sources":["../../src/data/testing.ts"],"sourcesContent":["import type { CacheStore, CacheStoreEntry } from \"./cache\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type CacheStoreFactory = () => MaybePromise<CacheStore>;\n\nexport async function verifyCacheStoreContract(\n createStore: CacheStoreFactory,\n) {\n const store = await createStore();\n const prefix = `demiurge-contract:${Date.now()}:${Math.random()}`;\n const alphaKey = `${prefix}:alpha`;\n const betaKey = `${prefix}:beta`;\n const gammaKey = `${prefix}:gamma`;\n const deltaKey = `${prefix}:delta`;\n const alphaTag = `${prefix}:tag:alpha`;\n const betaTag = `${prefix}:tag:beta`;\n const deltaTag = `${prefix}:tag:delta`;\n const future = Date.now() + 60_000;\n const alpha = {\n expiresAt: future,\n staleUntil: future + 5_000,\n tags: [alphaTag],\n value: { id: \"alpha\", revision: 1 },\n } satisfies CacheStoreEntry;\n\n try {\n assert(\n await store.get(alphaKey) === undefined,\n \"get() must return undefined for a missing key\",\n );\n\n await store.set(alphaKey, alpha);\n assertEntry(await store.get(alphaKey), alpha, \"set() then get()\");\n\n const updatedAlpha = {\n ...alpha,\n value: { id: \"alpha\", revision: 2 },\n } satisfies CacheStoreEntry;\n await store.set(alphaKey, updatedAlpha);\n assertEntry(\n await store.get(alphaKey),\n updatedAlpha,\n \"set() must replace an existing key\",\n );\n\n await store.set(betaKey, {\n expiresAt: future + 10_000,\n staleUntil: future + 15_000,\n tags: [betaTag],\n value: \"beta\",\n });\n await store.set(gammaKey, {\n expiresAt: future + 20_000,\n staleUntil: future + 25_000,\n tags: [alphaTag, betaTag],\n value: [\"gamma\"],\n });\n\n assert(\n await store.invalidateTags([alphaTag]) === 2,\n \"invalidateTags() must return the number of entries deleted, counting each entry once\",\n );\n assert(\n await store.get(alphaKey) === undefined &&\n await store.get(gammaKey) === undefined,\n \"invalidateTags() must delete every entry carrying a matching tag\",\n );\n assert(\n (await store.get(betaKey))?.value === \"beta\",\n \"invalidateTags() must preserve entries with no matching tag\",\n );\n assert(\n await store.delete(betaKey) === true,\n \"delete() must report an existing key\",\n );\n assert(\n await store.delete(betaKey) === false,\n \"delete() must report a missing key\",\n );\n\n // A negative entry (a loader's `cacheNotFound()` result) round-trips\n // like any other entry, and tag invalidation clears it the same way it\n // clears a positive result.\n const delta = {\n expiresAt: future,\n negative: true,\n staleUntil: future,\n tags: [deltaTag],\n value: \"not found\",\n } satisfies CacheStoreEntry;\n\n await store.set(deltaKey, delta);\n assertEntry(\n await store.get(deltaKey),\n delta,\n \"set() then get() for a negative entry\",\n );\n assert(\n await store.invalidateTags([deltaTag]) === 1,\n \"invalidateTags() must delete a negative entry carrying a matching tag\",\n );\n assert(\n await store.get(deltaKey) === undefined,\n \"invalidateTags() must remove a negative entry the same as a positive one\",\n );\n } finally {\n await Promise.all([\n store.delete(alphaKey),\n store.delete(betaKey),\n store.delete(gammaKey),\n store.delete(deltaKey),\n ]);\n }\n}\n\nexport async function verifyCacheStoreRefreshContract(\n createStore: CacheStoreFactory,\n) {\n const store = await createStore();\n const prefix = `demiurge-refresh-contract:${Date.now()}:${Math.random()}`;\n const key = `${prefix}:entry`;\n const tag = `${prefix}:tag`;\n const firstToken = `${prefix}:first`;\n const secondToken = `${prefix}:second`;\n const leaseExpiresAt = Date.now() + 60_000;\n\n assert(\n Boolean(\n store.acquireRefreshLease &&\n store.publishRefresh &&\n store.releaseRefreshLease,\n ),\n \"SWR support requires acquireRefreshLease(), publishRefresh(), and releaseRefreshLease()\",\n );\n\n const acquireRefreshLease = store.acquireRefreshLease!;\n const publishRefresh = store.publishRefresh!;\n const releaseRefreshLease = store.releaseRefreshLease!;\n const original = {\n expiresAt: Date.now() - 1,\n staleUntil: Date.now() + 120_000,\n tags: [tag],\n value: \"original\",\n } satisfies CacheStoreEntry;\n const refreshed = {\n ...original,\n expiresAt: Date.now() + 60_000,\n value: \"refreshed\",\n } satisfies CacheStoreEntry;\n\n try {\n await store.set(key, original);\n assert(\n await acquireRefreshLease(key, firstToken, leaseExpiresAt),\n \"acquireRefreshLease() must acquire an unowned key\",\n );\n assert(\n !await acquireRefreshLease(key, secondToken, leaseExpiresAt),\n \"acquireRefreshLease() must exclude a second owner\",\n );\n assert(\n !await publishRefresh(key, secondToken, refreshed),\n \"publishRefresh() must reject a non-owner token\",\n );\n await releaseRefreshLease(key, secondToken);\n assert(\n !await acquireRefreshLease(key, secondToken, leaseExpiresAt),\n \"releaseRefreshLease() must not release another owner's lease\",\n );\n assert(\n await publishRefresh(key, firstToken, refreshed),\n \"publishRefresh() must atomically publish for the current owner\",\n );\n assertEntry(\n await store.get(key),\n refreshed,\n \"publishRefresh() for the current owner\",\n );\n assert(\n await acquireRefreshLease(key, secondToken, leaseExpiresAt),\n \"successful publication must release the refresh lease\",\n );\n assert(await store.delete(key), \"delete() must remove the refreshed entry\");\n assert(\n !await publishRefresh(key, secondToken, original),\n \"delete() must cancel an in-flight refresh lease\",\n );\n\n await store.set(key, original);\n assert(\n await acquireRefreshLease(key, firstToken, leaseExpiresAt),\n \"a lease must be reusable after deletion\",\n );\n assert(\n await store.invalidateTags([tag]) === 1,\n \"invalidateTags() must remove the leased entry\",\n );\n assert(\n !await publishRefresh(key, firstToken, refreshed),\n \"tag invalidation must cancel an in-flight refresh lease\",\n );\n } finally {\n await store.delete(key);\n }\n}\n\nfunction assertEntry(\n actual: CacheStoreEntry | undefined,\n expected: CacheStoreEntry,\n operation: string,\n) {\n assert(Boolean(actual), `${operation} must preserve the entry`);\n assert(\n actual?.expiresAt === expected.expiresAt,\n `${operation} must preserve expiresAt`,\n );\n assert(\n Boolean(actual?.negative) === Boolean(expected.negative),\n `${operation} must preserve the negative flag`,\n );\n assert(\n actual?.staleUntil === expected.staleUntil,\n `${operation} must preserve staleUntil`,\n );\n assert(\n JSON.stringify(actual?.tags) === JSON.stringify(expected.tags),\n `${operation} must preserve tags`,\n );\n assert(\n JSON.stringify(actual?.value) === JSON.stringify(expected.value),\n `${operation} must preserve JSON-compatible values`,\n );\n}\n\nfunction assert(condition: boolean, requirement: string): asserts condition {\n if (!condition) {\n throw new Error(`Cache store contract failed: ${requirement}.`);\n }\n}\n"],"names":["verifyCacheStoreContract","createStore","store","prefix","alphaKey","betaKey","gammaKey","deltaKey","alphaTag","betaTag","deltaTag","future","alpha","assert","assertEntry","updatedAlpha","delta","verifyCacheStoreRefreshContract","key","tag","firstToken","secondToken","leaseExpiresAt","acquireRefreshLease","publishRefresh","releaseRefreshLease","original","refreshed","actual","expected","operation","condition","requirement"],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sources":["../../src/data/testing.ts"],"sourcesContent":["import type { CacheStore, CacheStoreEntry } from \"./cache\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type CacheStoreFactory = () => MaybePromise<CacheStore>;\n\nexport async function verifyCacheStoreContract(\n createStore: CacheStoreFactory,\n) {\n const store = await createStore();\n const prefix = `demiurge-contract:${Date.now()}:${Math.random()}`;\n const alphaKey = `${prefix}:alpha`;\n const betaKey = `${prefix}:beta`;\n const gammaKey = `${prefix}:gamma`;\n const deltaKey = `${prefix}:delta`;\n const atomicKey = `${prefix}:atomic`;\n const alphaTag = `${prefix}:tag:alpha`;\n const betaTag = `${prefix}:tag:beta`;\n const deltaTag = `${prefix}:tag:delta`;\n const future = Date.now() + 60_000;\n const alpha = {\n expiresAt: future,\n staleUntil: future + 5_000,\n tags: [alphaTag],\n value: { id: \"alpha\", revision: 1 },\n } satisfies CacheStoreEntry;\n\n try {\n assert(\n store.capabilities.atomicity === \"best-effort\" ||\n store.capabilities.atomicity === \"strong\",\n \"capabilities.atomicity must be `best-effort` or `strong`\",\n );\n if (store.capabilities.atomicity === \"strong\") {\n const atomicTag = `${prefix}:tag:atomic`;\n await store.set(atomicKey, {\n expiresAt: future,\n staleUntil: future,\n tags: [atomicTag],\n value: \"atomic\",\n });\n const invalidations = await Promise.all([\n store.invalidateTags([atomicTag]),\n store.invalidateTags([atomicTag]),\n ]);\n assert(\n invalidations.reduce((total, count) => total + count, 0) === 1,\n \"strong atomicity must count one concurrent tag invalidation exactly once\",\n );\n assert(\n await store.get(atomicKey) === undefined,\n \"strong atomicity must remove an entry during concurrent tag invalidation\",\n );\n }\n assert(\n await store.get(alphaKey) === undefined,\n \"get() must return undefined for a missing key\",\n );\n\n await store.set(alphaKey, alpha);\n assertEntry(await store.get(alphaKey), alpha, \"set() then get()\");\n\n const updatedAlpha = {\n ...alpha,\n value: { id: \"alpha\", revision: 2 },\n } satisfies CacheStoreEntry;\n await store.set(alphaKey, updatedAlpha);\n assertEntry(\n await store.get(alphaKey),\n updatedAlpha,\n \"set() must replace an existing key\",\n );\n\n await store.set(betaKey, {\n expiresAt: future + 10_000,\n staleUntil: future + 15_000,\n tags: [betaTag],\n value: \"beta\",\n });\n await store.set(gammaKey, {\n expiresAt: future + 20_000,\n staleUntil: future + 25_000,\n tags: [alphaTag, betaTag],\n value: [\"gamma\"],\n });\n\n assert(\n await store.invalidateTags([alphaTag]) === 2,\n \"invalidateTags() must return the number of entries deleted, counting each entry once\",\n );\n assert(\n await store.get(alphaKey) === undefined &&\n await store.get(gammaKey) === undefined,\n \"invalidateTags() must delete every entry carrying a matching tag\",\n );\n assert(\n (await store.get(betaKey))?.value === \"beta\",\n \"invalidateTags() must preserve entries with no matching tag\",\n );\n assert(\n await store.delete(betaKey) === true,\n \"delete() must report an existing key\",\n );\n assert(\n await store.delete(betaKey) === false,\n \"delete() must report a missing key\",\n );\n\n // A negative entry (a loader's `cacheNotFound()` result) round-trips\n // like any other entry, and tag invalidation clears it the same way it\n // clears a positive result.\n const delta = {\n expiresAt: future,\n negative: true,\n staleUntil: future,\n tags: [deltaTag],\n value: \"not found\",\n } satisfies CacheStoreEntry;\n\n await store.set(deltaKey, delta);\n assertEntry(\n await store.get(deltaKey),\n delta,\n \"set() then get() for a negative entry\",\n );\n assert(\n await store.invalidateTags([deltaTag]) === 1,\n \"invalidateTags() must delete a negative entry carrying a matching tag\",\n );\n assert(\n await store.get(deltaKey) === undefined,\n \"invalidateTags() must remove a negative entry the same as a positive one\",\n );\n } finally {\n await Promise.all([\n store.delete(alphaKey),\n store.delete(betaKey),\n store.delete(gammaKey),\n store.delete(deltaKey),\n store.delete(atomicKey),\n ]);\n }\n}\n\nexport async function verifyCacheStoreRefreshContract(\n createStore: CacheStoreFactory,\n) {\n const store = await createStore();\n const prefix = `demiurge-refresh-contract:${Date.now()}:${Math.random()}`;\n const key = `${prefix}:entry`;\n const tag = `${prefix}:tag`;\n const firstToken = `${prefix}:first`;\n const secondToken = `${prefix}:second`;\n const leaseExpiresAt = Date.now() + 60_000;\n\n assert(\n Boolean(\n store.acquireRefreshLease &&\n store.publishRefresh &&\n store.releaseRefreshLease,\n ),\n \"SWR support requires acquireRefreshLease(), publishRefresh(), and releaseRefreshLease()\",\n );\n\n const acquireRefreshLease = store.acquireRefreshLease!;\n const publishRefresh = store.publishRefresh!;\n const releaseRefreshLease = store.releaseRefreshLease!;\n const original = {\n expiresAt: Date.now() - 1,\n staleUntil: Date.now() + 120_000,\n tags: [tag],\n value: \"original\",\n } satisfies CacheStoreEntry;\n const refreshed = {\n ...original,\n expiresAt: Date.now() + 60_000,\n value: \"refreshed\",\n } satisfies CacheStoreEntry;\n\n try {\n await store.set(key, original);\n let ownerToken: string;\n let otherToken: string;\n if (store.capabilities.atomicity === \"strong\") {\n const acquired = await Promise.all([\n acquireRefreshLease(key, firstToken, leaseExpiresAt),\n acquireRefreshLease(key, secondToken, leaseExpiresAt),\n ]);\n assert(\n acquired.filter(Boolean).length === 1,\n \"strong atomicity must allow exactly one concurrent refresh lease owner\",\n );\n ownerToken = acquired[0] ? firstToken : secondToken;\n otherToken = acquired[0] ? secondToken : firstToken;\n } else {\n assert(\n await acquireRefreshLease(key, firstToken, leaseExpiresAt),\n \"acquireRefreshLease() must acquire an unowned key\",\n );\n ownerToken = firstToken;\n otherToken = secondToken;\n }\n assert(\n !await publishRefresh(key, otherToken, refreshed),\n \"publishRefresh() must reject a non-owner token\",\n );\n await releaseRefreshLease(key, otherToken);\n assert(\n !await acquireRefreshLease(key, otherToken, leaseExpiresAt),\n \"releaseRefreshLease() must not release another owner's lease\",\n );\n assert(\n await publishRefresh(key, ownerToken, refreshed),\n \"publishRefresh() must atomically publish for the current owner\",\n );\n assertEntry(\n await store.get(key),\n refreshed,\n \"publishRefresh() for the current owner\",\n );\n assert(\n await acquireRefreshLease(key, otherToken, leaseExpiresAt),\n \"successful publication must release the refresh lease\",\n );\n assert(await store.delete(key), \"delete() must remove the refreshed entry\");\n assert(\n !await publishRefresh(key, otherToken, original),\n \"delete() must cancel an in-flight refresh lease\",\n );\n\n await store.set(key, original);\n assert(\n await acquireRefreshLease(key, firstToken, leaseExpiresAt),\n \"a lease must be reusable after deletion\",\n );\n assert(\n await store.invalidateTags([tag]) === 1,\n \"invalidateTags() must remove the leased entry\",\n );\n assert(\n !await publishRefresh(key, firstToken, refreshed),\n \"tag invalidation must cancel an in-flight refresh lease\",\n );\n } finally {\n await store.delete(key);\n }\n}\n\nfunction assertEntry(\n actual: CacheStoreEntry | undefined,\n expected: CacheStoreEntry,\n operation: string,\n) {\n assert(Boolean(actual), `${operation} must preserve the entry`);\n assert(\n actual?.expiresAt === expected.expiresAt,\n `${operation} must preserve expiresAt`,\n );\n assert(\n Boolean(actual?.negative) === Boolean(expected.negative),\n `${operation} must preserve the negative flag`,\n );\n assert(\n actual?.staleUntil === expected.staleUntil,\n `${operation} must preserve staleUntil`,\n );\n assert(\n JSON.stringify(actual?.tags) === JSON.stringify(expected.tags),\n `${operation} must preserve tags`,\n );\n assert(\n JSON.stringify(actual?.value) === JSON.stringify(expected.value),\n `${operation} must preserve JSON-compatible values`,\n );\n}\n\nfunction assert(condition: boolean, requirement: string): asserts condition {\n if (!condition) {\n throw new Error(`Cache store contract failed: ${requirement}.`);\n }\n}\n"],"names":["verifyCacheStoreContract","createStore","store","prefix","alphaKey","betaKey","gammaKey","deltaKey","atomicKey","alphaTag","betaTag","deltaTag","future","alpha","assert","atomicTag","invalidations","total","count","assertEntry","updatedAlpha","delta","verifyCacheStoreRefreshContract","key","tag","firstToken","secondToken","leaseExpiresAt","acquireRefreshLease","publishRefresh","releaseRefreshLease","original","refreshed","ownerToken","otherToken","acquired","actual","expected","operation","condition","requirement"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tiered.d.ts","sourceRoot":"","sources":["../../src/data/tiered.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IAGpC,EAAE,EAAE,UAAU,CAAC;IAKf,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAiBF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,UAAU,CAqEZ"}
1
+ {"version":3,"file":"tiered.d.ts","sourceRoot":"","sources":["../../src/data/tiered.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IAGpC,EAAE,EAAE,UAAU,CAAC;IAKf,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAiBF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,UAAU,CAsEZ"}
@@ -1,24 +1,24 @@
1
- import { a as E, c as p, b as y, d as w, s as S } from "../chunks/index-BVk9zWbe.js";
2
- import { c as b } from "../chunks/testing-DueXbMo4.js";
1
+ import { a as E, c as p, b as y, d as w, s as b } from "../chunks/index-LYve1rQp.js";
2
+ import { c as S } from "../chunks/testing-BEW1nchS.js";
3
3
  import { renderToReadableStream as R } from "react-dom/server";
4
4
  import "react";
5
5
  import "react/jsx-runtime";
6
6
  import { i as L, I as v, R as A, c as T } from "../chunks/static-files-ehaD1kE7.js";
7
- import { c as P } from "../chunks/document-shell-CpJnFtSC.js";
7
+ import { c as P } from "../chunks/document-shell-C0aPrkhd.js";
8
8
  const C = /* @__PURE__ */ new Set([
9
9
  "/demiurge-manifest.json",
10
10
  "/index.html"
11
11
  ]);
12
12
  function O(e) {
13
- const t = e.immutable ?? L, r = M(e.prefix), c = /* @__PURE__ */ new Map();
13
+ const t = e.immutable ?? L, r = M(e.prefix), i = /* @__PURE__ */ new Map();
14
14
  for (const [o, n] of Object.entries(e.assets)) {
15
- const a = h(o);
15
+ const a = m(o);
16
16
  if (C.has(a))
17
17
  continue;
18
18
  const s = x(n.body);
19
- c.set(a, {
19
+ i.set(a, {
20
20
  body: s,
21
- cacheControl: n.immutable ?? t(m(a)) ? v : A,
21
+ cacheControl: n.immutable ?? t(h(a)) ? v : A,
22
22
  contentType: n.contentType ?? N(a),
23
23
  etag: D(s)
24
24
  });
@@ -26,10 +26,10 @@ function O(e) {
26
26
  return async function(n) {
27
27
  if (n.method !== "GET" && n.method !== "HEAD")
28
28
  return null;
29
- const a = I(r, new URL(n.url).pathname), s = a === null ? void 0 : c.get(a);
29
+ const a = I(r, new URL(n.url).pathname), s = a === null ? void 0 : i.get(a);
30
30
  if (!s)
31
31
  return null;
32
- const i = new Headers({
32
+ const c = new Headers({
33
33
  "cache-control": s.cacheControl,
34
34
  "content-length": String(s.body.byteLength),
35
35
  "content-type": s.contentType,
@@ -37,7 +37,7 @@ function O(e) {
37
37
  etag: s.etag,
38
38
  "x-content-type-options": "nosniff"
39
39
  });
40
- return H(n, s.etag) ? (i.delete("content-length"), i.delete("content-type"), new Response(null, { headers: i, status: 304 })) : n.method === "HEAD" ? new Response(null, { headers: i }) : new Response(s.body, { headers: i });
40
+ return H(n, s.etag) ? (c.delete("content-length"), c.delete("content-type"), new Response(null, { headers: c, status: 304 })) : n.method === "HEAD" ? new Response(null, { headers: c }) : new Response(s.body, { headers: c });
41
41
  };
42
42
  }
43
43
  function D(e) {
@@ -49,7 +49,7 @@ function D(e) {
49
49
  function H(e, t) {
50
50
  const r = e.headers.get("if-none-match");
51
51
  return r === null ? !1 : r.trim() === "*" || r.split(",").some(
52
- (c) => f(c) === f(t)
52
+ (i) => f(i) === f(t)
53
53
  );
54
54
  }
55
55
  function f(e) {
@@ -67,9 +67,9 @@ function I(e, t) {
67
67
  return null;
68
68
  r = r.slice(e.length - 1);
69
69
  }
70
- return h(r);
70
+ return m(r);
71
71
  }
72
- function h(e) {
72
+ function m(e) {
73
73
  return e.startsWith("/") ? e : `/${e}`;
74
74
  }
75
75
  function M(e) {
@@ -81,12 +81,12 @@ function x(e) {
81
81
  const t = ArrayBuffer.isView(e) ? new Uint8Array(e.buffer, e.byteOffset, e.byteLength) : new Uint8Array(e), r = new Uint8Array(t.byteLength);
82
82
  return r.set(t), r;
83
83
  }
84
- function m(e) {
84
+ function h(e) {
85
85
  return e.slice(e.lastIndexOf("/") + 1);
86
86
  }
87
87
  function N(e) {
88
- const t = m(e), r = t.lastIndexOf("."), c = r === -1 ? "" : t.slice(r);
89
- return T(c);
88
+ const t = h(e), r = t.lastIndexOf("."), i = r === -1 ? "" : t.slice(r);
89
+ return T(i);
90
90
  }
91
91
  function U(e, t = {}) {
92
92
  return e.render.mode === "streaming" ? _(e, t) : E(e, t);
@@ -94,7 +94,7 @@ function U(e, t = {}) {
94
94
  async function _(e, t = {}) {
95
95
  if (t.signal?.aborted)
96
96
  throw t.signal.reason;
97
- const r = p(e, t), c = y(e, r), o = new AbortController();
97
+ const r = p(e, t), i = y(e, r), o = new AbortController();
98
98
  let n = !1;
99
99
  const a = () => {
100
100
  o.abort(
@@ -104,7 +104,7 @@ async function _(e, t = {}) {
104
104
  t.signal?.addEventListener("abort", a, { once: !0 });
105
105
  let s;
106
106
  try {
107
- s = await R(c, {
107
+ s = await R(i, {
108
108
  nonce: t.nonce,
109
109
  onError(l) {
110
110
  n && !o.signal.aborted && t.onStreamError?.(l);
@@ -115,21 +115,21 @@ async function _(e, t = {}) {
115
115
  throw t.signal?.removeEventListener("abort", a), l;
116
116
  }
117
117
  s.allReady.catch(u);
118
- let i;
118
+ let c;
119
119
  try {
120
- i = await P(e, {
120
+ c = await P(e, {
121
121
  ...t,
122
122
  scripts: r.scripts()
123
123
  });
124
124
  } catch (l) {
125
125
  throw t.signal?.removeEventListener("abort", a), a(), await s.cancel().catch(u), l;
126
126
  }
127
- return r.flushHead(), n = !0, new Response(j(s, i, a), {
127
+ return r.flushHead(), n = !0, new Response(j(s, c, a), {
128
128
  headers: { "content-type": "text/html; charset=utf-8" }
129
129
  });
130
130
  }
131
131
  function j(e, t, r) {
132
- const c = new TextEncoder(), o = e.getReader();
132
+ const i = new TextEncoder(), o = e.getReader();
133
133
  return new ReadableStream({
134
134
  async cancel(n) {
135
135
  r(), await o.cancel(n).catch(u);
@@ -143,13 +143,13 @@ function j(e, t, r) {
143
143
  return;
144
144
  }
145
145
  if (a.done) {
146
- n.enqueue(c.encode(t.suffix)), n.close();
146
+ n.enqueue(i.encode(t.suffix)), n.close();
147
147
  return;
148
148
  }
149
149
  n.enqueue(a.value);
150
150
  },
151
151
  start(n) {
152
- n.enqueue(c.encode(t.prefix));
152
+ n.enqueue(i.encode(t.prefix));
153
153
  }
154
154
  });
155
155
  }
@@ -166,6 +166,7 @@ function q() {
166
166
  throw new g(k);
167
167
  };
168
168
  return {
169
+ capabilities: { atomicity: "best-effort" },
169
170
  acquireRefreshLease: e,
170
171
  delete: e,
171
172
  get: e,
@@ -205,7 +206,7 @@ const B = w({
205
206
  function ne(e) {
206
207
  const t = z(e.cacheStore), r = G(e.rateLimitStore);
207
208
  e.rateLimitStore === d && e.routeModules && J(e.routeModules);
208
- const c = K(e.assets), o = b({
209
+ const i = K(e.assets), o = S({
209
210
  adapter: B,
210
211
  cacheStore: t,
211
212
  onError: e.onError,
@@ -217,7 +218,7 @@ function ne(e) {
217
218
  });
218
219
  return async function(a) {
219
220
  const s = e.clientIp?.(a);
220
- return s && S(a, { clientIp: s }), await c?.(a) ?? await o(a);
221
+ return s && b(a, { clientIp: s }), await i?.(a) ?? await o(a);
221
222
  };
222
223
  }
223
224
  function z(e) {