@cimplify/sdk 0.70.3 → 0.72.0
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-UUW7WBCG.mjs → chunk-BYWJSPT4.mjs} +1 -1
- package/dist/{chunk-QXMO2LGU.mjs → chunk-J7L5LHGK.mjs} +3 -1
- package/dist/{chunk-XQ6LEDEO.js → chunk-OGQFDCZM.js} +3 -1
- package/dist/{chunk-XGKMSLMJ.js → chunk-Y64AIRGW.js} +2 -2
- package/dist/mock/cli.mjs +3 -1
- package/dist/mock/library.js +3 -1
- package/dist/mock/library.mjs +3 -1
- package/dist/mock/msw.js +3 -1
- package/dist/mock/msw.mjs +3 -1
- package/dist/react.d.mts +55 -17
- package/dist/react.d.ts +55 -17
- package/dist/react.js +148 -84
- package/dist/react.mjs +149 -85
- package/dist/server/tanstack.d.mts +74 -0
- package/dist/server/tanstack.d.ts +74 -0
- package/dist/server/tanstack.js +291 -0
- package/dist/server/tanstack.mjs +279 -0
- package/dist/testing/msw.js +2 -2
- package/dist/testing/msw.mjs +1 -1
- package/dist/testing/suite.js +21 -21
- package/dist/testing/suite.mjs +2 -2
- package/dist/testing.js +77 -77
- package/dist/testing.mjs +3 -3
- package/package.json +7 -1
- package/registry/accommodation-card.json +1 -1
- package/registry/add-on-selector.json +1 -1
- package/registry/billing-plan-selector.json +1 -1
- package/registry/booking-page.json +1 -1
- package/registry/bundle-selector.json +1 -1
- package/registry/compact-service-card.json +1 -1
- package/registry/composite-selector.json +1 -1
- package/registry/customer-input-fields.json +1 -1
- package/registry/date-slot-picker.json +1 -1
- package/registry/default-product-layout.json +1 -1
- package/registry/digital-product-card.json +1 -1
- package/registry/digital-product-layout.json +1 -1
- package/registry/food-product-card.json +1 -1
- package/registry/food-product-layout.json +1 -1
- package/registry/lease-service-card.json +1 -1
- package/registry/price-range.json +1 -1
- package/registry/price.json +1 -1
- package/registry/product-card.json +1 -1
- package/registry/product-customizer.json +1 -1
- package/registry/product-sheet.json +1 -1
- package/registry/rental-service-card.json +1 -1
- package/registry/retail-product-card.json +1 -1
- package/registry/sale-badge.json +1 -1
- package/registry/schedule-service-card.json +1 -1
- package/registry/service-product-layout.json +1 -1
- package/registry/slot-picker.json +1 -1
- package/registry/standard-service-card.json +1 -1
- package/registry/subscription-card.json +1 -1
- package/registry/variant-selector.json +1 -1
- package/registry/volume-pricing.json +1 -1
- package/registry/wholesale-product-card.json +1 -1
- package/registry/wholesale-product-layout.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { R2Bucket, DurableObjectNamespace } from '@cloudflare/workers-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `@cimplify/sdk/server/tanstack` - TanStack Start/Nitro cache support.
|
|
5
|
+
*
|
|
6
|
+
* The deployment adapter binds:
|
|
7
|
+
* - CIMPLIFY_CACHE_R2_BUCKET
|
|
8
|
+
* - CIMPLIFY_CACHE_R2_PREFIX
|
|
9
|
+
* - CIMPLIFY_PATH_INDEX
|
|
10
|
+
*
|
|
11
|
+
* This driver consumes those bindings and mirrors the Next/OpenNext eviction
|
|
12
|
+
* contract: write to R2, then register cimplify:* tags in PathIndex so the
|
|
13
|
+
* central eviction worker can delete the exact R2 object and purge route URLs.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
declare const TANSTACK_R2_BUCKET_BINDING = "CIMPLIFY_CACHE_R2_BUCKET";
|
|
17
|
+
declare const TANSTACK_R2_PREFIX_ENV = "CIMPLIFY_CACHE_R2_PREFIX";
|
|
18
|
+
declare const TANSTACK_PATH_INDEX_BINDING = "CIMPLIFY_PATH_INDEX";
|
|
19
|
+
declare const TANSTACK_CACHE_NAMESPACE = "nitro";
|
|
20
|
+
declare const CIMPLIFY_TAG_PREFIX = "cimplify:";
|
|
21
|
+
declare const CIMPLIFY_CACHE_META_FIELD = "__cimplifyCache";
|
|
22
|
+
type Awaitable<T> = T | Promise<T>;
|
|
23
|
+
type R2PutValue = NonNullable<Parameters<R2Bucket["put"]>[1]>;
|
|
24
|
+
interface CimplifyTanstackCacheEnv {
|
|
25
|
+
[TANSTACK_R2_BUCKET_BINDING]?: R2Bucket;
|
|
26
|
+
[TANSTACK_R2_PREFIX_ENV]?: string;
|
|
27
|
+
[TANSTACK_PATH_INDEX_BINDING]?: DurableObjectNamespace;
|
|
28
|
+
}
|
|
29
|
+
interface CimplifyCacheIndexMetadata {
|
|
30
|
+
tags?: readonly string[];
|
|
31
|
+
cacheKey?: string;
|
|
32
|
+
isFetch?: boolean;
|
|
33
|
+
}
|
|
34
|
+
interface CimplifyTanstackCacheSetOptions {
|
|
35
|
+
tags?: readonly string[];
|
|
36
|
+
cimplifyTags?: readonly string[];
|
|
37
|
+
cacheTags?: readonly string[];
|
|
38
|
+
cacheKey?: string;
|
|
39
|
+
cimplifyCacheKey?: string;
|
|
40
|
+
isFetch?: boolean;
|
|
41
|
+
cimplifyIsFetch?: boolean;
|
|
42
|
+
[CIMPLIFY_CACHE_META_FIELD]?: CimplifyCacheIndexMetadata;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
interface CimplifyTanstackCacheDriverOptions {
|
|
46
|
+
env?: CimplifyTanstackCacheEnv;
|
|
47
|
+
getEnv?: () => Awaitable<CimplifyTanstackCacheEnv | undefined>;
|
|
48
|
+
prefix?: string;
|
|
49
|
+
namespace?: string;
|
|
50
|
+
tags?: readonly string[] | ((key: string, value: unknown, options?: unknown) => readonly string[]);
|
|
51
|
+
cacheKey?: string | ((key: string, value: unknown, options?: unknown) => string | undefined);
|
|
52
|
+
isFetch?: boolean | ((key: string, value: unknown, options?: unknown) => boolean);
|
|
53
|
+
}
|
|
54
|
+
interface CimplifyTanstackCacheDriver {
|
|
55
|
+
name: string;
|
|
56
|
+
options: CimplifyTanstackCacheDriverOptions;
|
|
57
|
+
hasItem(key: string): Promise<boolean>;
|
|
58
|
+
getItem<T = unknown>(key: string): Promise<T | null>;
|
|
59
|
+
getItemRaw(key: string): Promise<string | null>;
|
|
60
|
+
setItem(key: string, value: unknown, options?: CimplifyTanstackCacheSetOptions): Promise<void>;
|
|
61
|
+
setItemRaw(key: string, value: R2PutValue, options?: CimplifyTanstackCacheSetOptions): Promise<void>;
|
|
62
|
+
removeItem(key: string): Promise<void>;
|
|
63
|
+
getKeys(base?: string): Promise<string[]>;
|
|
64
|
+
clear(base?: string): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
declare function cimplifyTanstackR2Key(prefix: string, key: string, namespace?: string): string;
|
|
67
|
+
declare function cimplifyTanstackCacheOptions(metadata: CimplifyCacheIndexMetadata): CimplifyTanstackCacheSetOptions;
|
|
68
|
+
declare function withCimplifyCacheMetadata<T extends Record<string, unknown>>(value: T, metadata: CimplifyCacheIndexMetadata): T & {
|
|
69
|
+
[CIMPLIFY_CACHE_META_FIELD]: CimplifyCacheIndexMetadata;
|
|
70
|
+
};
|
|
71
|
+
declare function createCimplifyTanstackCacheDriver(options?: CimplifyTanstackCacheDriverOptions): CimplifyTanstackCacheDriver;
|
|
72
|
+
declare const cimplifyTanstackCacheDriver: typeof createCimplifyTanstackCacheDriver;
|
|
73
|
+
|
|
74
|
+
export { CIMPLIFY_CACHE_META_FIELD, CIMPLIFY_TAG_PREFIX, type CimplifyCacheIndexMetadata, type CimplifyTanstackCacheDriver, type CimplifyTanstackCacheDriverOptions, type CimplifyTanstackCacheEnv, type CimplifyTanstackCacheSetOptions, TANSTACK_CACHE_NAMESPACE, TANSTACK_PATH_INDEX_BINDING, TANSTACK_R2_BUCKET_BINDING, TANSTACK_R2_PREFIX_ENV, cimplifyTanstackCacheDriver, cimplifyTanstackCacheOptions, cimplifyTanstackR2Key, createCimplifyTanstackCacheDriver, withCimplifyCacheMetadata };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { R2Bucket, DurableObjectNamespace } from '@cloudflare/workers-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `@cimplify/sdk/server/tanstack` - TanStack Start/Nitro cache support.
|
|
5
|
+
*
|
|
6
|
+
* The deployment adapter binds:
|
|
7
|
+
* - CIMPLIFY_CACHE_R2_BUCKET
|
|
8
|
+
* - CIMPLIFY_CACHE_R2_PREFIX
|
|
9
|
+
* - CIMPLIFY_PATH_INDEX
|
|
10
|
+
*
|
|
11
|
+
* This driver consumes those bindings and mirrors the Next/OpenNext eviction
|
|
12
|
+
* contract: write to R2, then register cimplify:* tags in PathIndex so the
|
|
13
|
+
* central eviction worker can delete the exact R2 object and purge route URLs.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
declare const TANSTACK_R2_BUCKET_BINDING = "CIMPLIFY_CACHE_R2_BUCKET";
|
|
17
|
+
declare const TANSTACK_R2_PREFIX_ENV = "CIMPLIFY_CACHE_R2_PREFIX";
|
|
18
|
+
declare const TANSTACK_PATH_INDEX_BINDING = "CIMPLIFY_PATH_INDEX";
|
|
19
|
+
declare const TANSTACK_CACHE_NAMESPACE = "nitro";
|
|
20
|
+
declare const CIMPLIFY_TAG_PREFIX = "cimplify:";
|
|
21
|
+
declare const CIMPLIFY_CACHE_META_FIELD = "__cimplifyCache";
|
|
22
|
+
type Awaitable<T> = T | Promise<T>;
|
|
23
|
+
type R2PutValue = NonNullable<Parameters<R2Bucket["put"]>[1]>;
|
|
24
|
+
interface CimplifyTanstackCacheEnv {
|
|
25
|
+
[TANSTACK_R2_BUCKET_BINDING]?: R2Bucket;
|
|
26
|
+
[TANSTACK_R2_PREFIX_ENV]?: string;
|
|
27
|
+
[TANSTACK_PATH_INDEX_BINDING]?: DurableObjectNamespace;
|
|
28
|
+
}
|
|
29
|
+
interface CimplifyCacheIndexMetadata {
|
|
30
|
+
tags?: readonly string[];
|
|
31
|
+
cacheKey?: string;
|
|
32
|
+
isFetch?: boolean;
|
|
33
|
+
}
|
|
34
|
+
interface CimplifyTanstackCacheSetOptions {
|
|
35
|
+
tags?: readonly string[];
|
|
36
|
+
cimplifyTags?: readonly string[];
|
|
37
|
+
cacheTags?: readonly string[];
|
|
38
|
+
cacheKey?: string;
|
|
39
|
+
cimplifyCacheKey?: string;
|
|
40
|
+
isFetch?: boolean;
|
|
41
|
+
cimplifyIsFetch?: boolean;
|
|
42
|
+
[CIMPLIFY_CACHE_META_FIELD]?: CimplifyCacheIndexMetadata;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
interface CimplifyTanstackCacheDriverOptions {
|
|
46
|
+
env?: CimplifyTanstackCacheEnv;
|
|
47
|
+
getEnv?: () => Awaitable<CimplifyTanstackCacheEnv | undefined>;
|
|
48
|
+
prefix?: string;
|
|
49
|
+
namespace?: string;
|
|
50
|
+
tags?: readonly string[] | ((key: string, value: unknown, options?: unknown) => readonly string[]);
|
|
51
|
+
cacheKey?: string | ((key: string, value: unknown, options?: unknown) => string | undefined);
|
|
52
|
+
isFetch?: boolean | ((key: string, value: unknown, options?: unknown) => boolean);
|
|
53
|
+
}
|
|
54
|
+
interface CimplifyTanstackCacheDriver {
|
|
55
|
+
name: string;
|
|
56
|
+
options: CimplifyTanstackCacheDriverOptions;
|
|
57
|
+
hasItem(key: string): Promise<boolean>;
|
|
58
|
+
getItem<T = unknown>(key: string): Promise<T | null>;
|
|
59
|
+
getItemRaw(key: string): Promise<string | null>;
|
|
60
|
+
setItem(key: string, value: unknown, options?: CimplifyTanstackCacheSetOptions): Promise<void>;
|
|
61
|
+
setItemRaw(key: string, value: R2PutValue, options?: CimplifyTanstackCacheSetOptions): Promise<void>;
|
|
62
|
+
removeItem(key: string): Promise<void>;
|
|
63
|
+
getKeys(base?: string): Promise<string[]>;
|
|
64
|
+
clear(base?: string): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
declare function cimplifyTanstackR2Key(prefix: string, key: string, namespace?: string): string;
|
|
67
|
+
declare function cimplifyTanstackCacheOptions(metadata: CimplifyCacheIndexMetadata): CimplifyTanstackCacheSetOptions;
|
|
68
|
+
declare function withCimplifyCacheMetadata<T extends Record<string, unknown>>(value: T, metadata: CimplifyCacheIndexMetadata): T & {
|
|
69
|
+
[CIMPLIFY_CACHE_META_FIELD]: CimplifyCacheIndexMetadata;
|
|
70
|
+
};
|
|
71
|
+
declare function createCimplifyTanstackCacheDriver(options?: CimplifyTanstackCacheDriverOptions): CimplifyTanstackCacheDriver;
|
|
72
|
+
declare const cimplifyTanstackCacheDriver: typeof createCimplifyTanstackCacheDriver;
|
|
73
|
+
|
|
74
|
+
export { CIMPLIFY_CACHE_META_FIELD, CIMPLIFY_TAG_PREFIX, type CimplifyCacheIndexMetadata, type CimplifyTanstackCacheDriver, type CimplifyTanstackCacheDriverOptions, type CimplifyTanstackCacheEnv, type CimplifyTanstackCacheSetOptions, TANSTACK_CACHE_NAMESPACE, TANSTACK_PATH_INDEX_BINDING, TANSTACK_R2_BUCKET_BINDING, TANSTACK_R2_PREFIX_ENV, cimplifyTanstackCacheDriver, cimplifyTanstackCacheOptions, cimplifyTanstackR2Key, createCimplifyTanstackCacheDriver, withCimplifyCacheMetadata };
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('../chunk-OWW5GUSB.js');
|
|
4
|
+
|
|
5
|
+
// src/server/tanstack.ts
|
|
6
|
+
var TANSTACK_R2_BUCKET_BINDING = "CIMPLIFY_CACHE_R2_BUCKET";
|
|
7
|
+
var TANSTACK_R2_PREFIX_ENV = "CIMPLIFY_CACHE_R2_PREFIX";
|
|
8
|
+
var TANSTACK_PATH_INDEX_BINDING = "CIMPLIFY_PATH_INDEX";
|
|
9
|
+
var TANSTACK_CACHE_NAMESPACE = "nitro";
|
|
10
|
+
var CIMPLIFY_TAG_PREFIX = "cimplify:";
|
|
11
|
+
var CIMPLIFY_CACHE_META_FIELD = "__cimplifyCache";
|
|
12
|
+
var EMPTY_STORAGE_KEY = "__cimplify_empty_key__";
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function stringArray(value) {
|
|
17
|
+
return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
|
|
18
|
+
}
|
|
19
|
+
function metadataFrom(value) {
|
|
20
|
+
if (!isRecord(value)) return void 0;
|
|
21
|
+
const metadata = value[CIMPLIFY_CACHE_META_FIELD];
|
|
22
|
+
return isRecord(metadata) ? metadata : void 0;
|
|
23
|
+
}
|
|
24
|
+
function cimplifyTagsFrom(candidates) {
|
|
25
|
+
const seen = /* @__PURE__ */ new Set();
|
|
26
|
+
for (const candidate of candidates) {
|
|
27
|
+
for (const tag of candidate ?? []) {
|
|
28
|
+
if (!tag.startsWith(CIMPLIFY_TAG_PREFIX) || seen.has(tag)) continue;
|
|
29
|
+
seen.add(tag);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return [...seen];
|
|
33
|
+
}
|
|
34
|
+
function extractTags(key, value, options, driverOptions) {
|
|
35
|
+
const optionMeta = metadataFrom(options);
|
|
36
|
+
const valueMeta = metadataFrom(value);
|
|
37
|
+
const valueRecord = isRecord(value) ? value : void 0;
|
|
38
|
+
const nestedValue = isRecord(valueRecord?.value) ? valueRecord.value : void 0;
|
|
39
|
+
const configured = typeof driverOptions.tags === "function" ? driverOptions.tags(key, value, options) : driverOptions.tags;
|
|
40
|
+
return cimplifyTagsFrom([
|
|
41
|
+
configured,
|
|
42
|
+
optionMeta?.tags,
|
|
43
|
+
options?.tags,
|
|
44
|
+
options?.cimplifyTags,
|
|
45
|
+
options?.cacheTags,
|
|
46
|
+
valueMeta?.tags,
|
|
47
|
+
stringArray(valueRecord?.tags),
|
|
48
|
+
stringArray(valueRecord?.cimplifyTags),
|
|
49
|
+
stringArray(valueRecord?.cacheTags),
|
|
50
|
+
stringArray(nestedValue?.tags),
|
|
51
|
+
stringArray(nestedValue?.cimplifyTags),
|
|
52
|
+
stringArray(nestedValue?.cacheTags)
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
function extractCacheKey(key, value, options, driverOptions) {
|
|
56
|
+
const configured = typeof driverOptions.cacheKey === "function" ? driverOptions.cacheKey(key, value, options) : driverOptions.cacheKey;
|
|
57
|
+
if (configured) return configured;
|
|
58
|
+
const optionMeta = metadataFrom(options);
|
|
59
|
+
const valueMeta = metadataFrom(value);
|
|
60
|
+
if (optionMeta?.cacheKey) return optionMeta.cacheKey;
|
|
61
|
+
if (options?.cacheKey) return options.cacheKey;
|
|
62
|
+
if (options?.cimplifyCacheKey) return options.cimplifyCacheKey;
|
|
63
|
+
if (valueMeta?.cacheKey) return valueMeta.cacheKey;
|
|
64
|
+
return key;
|
|
65
|
+
}
|
|
66
|
+
function extractIsFetch(key, value, options, driverOptions) {
|
|
67
|
+
if (typeof driverOptions.isFetch === "function") {
|
|
68
|
+
return driverOptions.isFetch(key, value, options);
|
|
69
|
+
}
|
|
70
|
+
if (typeof driverOptions.isFetch === "boolean") return driverOptions.isFetch;
|
|
71
|
+
const optionMeta = metadataFrom(options);
|
|
72
|
+
const valueMeta = metadataFrom(value);
|
|
73
|
+
return Boolean(
|
|
74
|
+
optionMeta?.isFetch ?? options?.isFetch ?? options?.cimplifyIsFetch ?? valueMeta?.isFetch ?? false
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
function valueForStorage(value) {
|
|
78
|
+
if (!isRecord(value) || !(CIMPLIFY_CACHE_META_FIELD in value)) return value;
|
|
79
|
+
const { [CIMPLIFY_CACHE_META_FIELD]: _metadata, ...rest } = value;
|
|
80
|
+
return rest;
|
|
81
|
+
}
|
|
82
|
+
function joinR2Parts(...parts) {
|
|
83
|
+
return parts.map((part) => part.trim().replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/");
|
|
84
|
+
}
|
|
85
|
+
function encodeStorageKey(key) {
|
|
86
|
+
return key === "" ? EMPTY_STORAGE_KEY : encodeURIComponent(key);
|
|
87
|
+
}
|
|
88
|
+
function decodeStorageKey(key) {
|
|
89
|
+
if (key === EMPTY_STORAGE_KEY) return "";
|
|
90
|
+
try {
|
|
91
|
+
return decodeURIComponent(key);
|
|
92
|
+
} catch {
|
|
93
|
+
return key;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function cimplifyTanstackR2Key(prefix, key, namespace = TANSTACK_CACHE_NAMESPACE) {
|
|
97
|
+
return joinR2Parts(prefix, namespace, encodeStorageKey(key));
|
|
98
|
+
}
|
|
99
|
+
function cimplifyTanstackR2ListPrefix(prefix, base, namespace) {
|
|
100
|
+
if (!base) return `${joinR2Parts(prefix, namespace)}/`;
|
|
101
|
+
return cimplifyTanstackR2Key(prefix, base, namespace);
|
|
102
|
+
}
|
|
103
|
+
function storageKeyFromR2Key(prefix, namespace, key) {
|
|
104
|
+
const base = `${joinR2Parts(prefix, namespace)}/`;
|
|
105
|
+
const encoded = key.startsWith(base) ? key.slice(base.length) : key;
|
|
106
|
+
return decodeStorageKey(encoded);
|
|
107
|
+
}
|
|
108
|
+
function pathIndexFor(env) {
|
|
109
|
+
if (!env.pathIndex) return null;
|
|
110
|
+
return env.pathIndex.get(env.pathIndex.idFromName(env.prefix));
|
|
111
|
+
}
|
|
112
|
+
async function resolveRuntimeEnv(options) {
|
|
113
|
+
const env = await options.getEnv?.() ?? options.env;
|
|
114
|
+
const r2 = env?.[TANSTACK_R2_BUCKET_BINDING];
|
|
115
|
+
const prefix = options.prefix ?? env?.[TANSTACK_R2_PREFIX_ENV];
|
|
116
|
+
if (!r2 || !prefix) return null;
|
|
117
|
+
return {
|
|
118
|
+
r2,
|
|
119
|
+
prefix,
|
|
120
|
+
pathIndex: env?.[TANSTACK_PATH_INDEX_BINDING]
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
async function registerIndex(env, cacheKey, r2Key, tags, isFetch) {
|
|
124
|
+
if (tags.length === 0) return;
|
|
125
|
+
const index = pathIndexFor(env);
|
|
126
|
+
if (!index) return;
|
|
127
|
+
try {
|
|
128
|
+
await index.indexAdd(cacheKey, r2Key, tags, isFetch);
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function listR2Keys(r2, prefix) {
|
|
133
|
+
const keys = [];
|
|
134
|
+
let cursor;
|
|
135
|
+
do {
|
|
136
|
+
const page = await r2.list({ prefix, cursor });
|
|
137
|
+
keys.push(...page.objects.map((object) => object.key));
|
|
138
|
+
cursor = page.truncated ? page.cursor : void 0;
|
|
139
|
+
} while (cursor);
|
|
140
|
+
return keys;
|
|
141
|
+
}
|
|
142
|
+
async function putAndIndex(runtimeEnv, driverOptions, key, storedValue, indexValue, options) {
|
|
143
|
+
const namespace = driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE;
|
|
144
|
+
const r2Key = cimplifyTanstackR2Key(runtimeEnv.prefix, key, namespace);
|
|
145
|
+
try {
|
|
146
|
+
await runtimeEnv.r2.put(r2Key, storedValue);
|
|
147
|
+
} catch {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const tags = extractTags(key, indexValue, options, driverOptions);
|
|
152
|
+
if (tags.length === 0) return;
|
|
153
|
+
await registerIndex(
|
|
154
|
+
runtimeEnv,
|
|
155
|
+
extractCacheKey(key, indexValue, options, driverOptions),
|
|
156
|
+
r2Key,
|
|
157
|
+
tags,
|
|
158
|
+
extractIsFetch(key, indexValue, options, driverOptions)
|
|
159
|
+
);
|
|
160
|
+
} catch {
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function getRawItem(driverOptions, key) {
|
|
164
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
165
|
+
if (!runtimeEnv) return null;
|
|
166
|
+
try {
|
|
167
|
+
const object = await runtimeEnv.r2.get(
|
|
168
|
+
cimplifyTanstackR2Key(
|
|
169
|
+
runtimeEnv.prefix,
|
|
170
|
+
key,
|
|
171
|
+
driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE
|
|
172
|
+
)
|
|
173
|
+
);
|
|
174
|
+
return object ? await object.text() : null;
|
|
175
|
+
} catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
function cimplifyTanstackCacheOptions(metadata) {
|
|
180
|
+
return { [CIMPLIFY_CACHE_META_FIELD]: metadata };
|
|
181
|
+
}
|
|
182
|
+
function withCimplifyCacheMetadata(value, metadata) {
|
|
183
|
+
return { ...value, [CIMPLIFY_CACHE_META_FIELD]: metadata };
|
|
184
|
+
}
|
|
185
|
+
function createCimplifyTanstackCacheDriver(options = {}) {
|
|
186
|
+
const driverOptions = { ...options };
|
|
187
|
+
return {
|
|
188
|
+
name: "cimplify-tanstack-r2-cache",
|
|
189
|
+
options: driverOptions,
|
|
190
|
+
async hasItem(key) {
|
|
191
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
192
|
+
if (!runtimeEnv) return false;
|
|
193
|
+
try {
|
|
194
|
+
const object = await runtimeEnv.r2.head(
|
|
195
|
+
cimplifyTanstackR2Key(
|
|
196
|
+
runtimeEnv.prefix,
|
|
197
|
+
key,
|
|
198
|
+
driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE
|
|
199
|
+
)
|
|
200
|
+
);
|
|
201
|
+
return Boolean(object);
|
|
202
|
+
} catch {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
async getItem(key) {
|
|
207
|
+
const raw = await getRawItem(driverOptions, key);
|
|
208
|
+
if (raw === null) return null;
|
|
209
|
+
try {
|
|
210
|
+
return JSON.parse(raw);
|
|
211
|
+
} catch {
|
|
212
|
+
return raw;
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
async getItemRaw(key) {
|
|
216
|
+
return getRawItem(driverOptions, key);
|
|
217
|
+
},
|
|
218
|
+
async setItem(key, value, options2) {
|
|
219
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
220
|
+
if (!runtimeEnv) return;
|
|
221
|
+
const strippedValue = valueForStorage(value);
|
|
222
|
+
await putAndIndex(
|
|
223
|
+
runtimeEnv,
|
|
224
|
+
driverOptions,
|
|
225
|
+
key,
|
|
226
|
+
JSON.stringify(strippedValue) ?? "null",
|
|
227
|
+
value,
|
|
228
|
+
options2
|
|
229
|
+
);
|
|
230
|
+
},
|
|
231
|
+
async setItemRaw(key, value, options2) {
|
|
232
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
233
|
+
if (!runtimeEnv) return;
|
|
234
|
+
await putAndIndex(runtimeEnv, driverOptions, key, value, value, options2);
|
|
235
|
+
},
|
|
236
|
+
async removeItem(key) {
|
|
237
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
238
|
+
if (!runtimeEnv) return;
|
|
239
|
+
try {
|
|
240
|
+
await runtimeEnv.r2.delete(
|
|
241
|
+
cimplifyTanstackR2Key(
|
|
242
|
+
runtimeEnv.prefix,
|
|
243
|
+
key,
|
|
244
|
+
driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE
|
|
245
|
+
)
|
|
246
|
+
);
|
|
247
|
+
} catch {
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
async getKeys(base) {
|
|
251
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
252
|
+
if (!runtimeEnv) return [];
|
|
253
|
+
const namespace = driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE;
|
|
254
|
+
try {
|
|
255
|
+
const keys = await listR2Keys(
|
|
256
|
+
runtimeEnv.r2,
|
|
257
|
+
cimplifyTanstackR2ListPrefix(runtimeEnv.prefix, base, namespace)
|
|
258
|
+
);
|
|
259
|
+
return keys.map((key) => storageKeyFromR2Key(runtimeEnv.prefix, namespace, key));
|
|
260
|
+
} catch {
|
|
261
|
+
return [];
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
async clear(base) {
|
|
265
|
+
const runtimeEnv = await resolveRuntimeEnv(driverOptions);
|
|
266
|
+
if (!runtimeEnv) return;
|
|
267
|
+
const namespace = driverOptions.namespace ?? TANSTACK_CACHE_NAMESPACE;
|
|
268
|
+
try {
|
|
269
|
+
const keys = await listR2Keys(
|
|
270
|
+
runtimeEnv.r2,
|
|
271
|
+
cimplifyTanstackR2ListPrefix(runtimeEnv.prefix, base, namespace)
|
|
272
|
+
);
|
|
273
|
+
await Promise.all(keys.map((key) => runtimeEnv.r2.delete(key)));
|
|
274
|
+
} catch {
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
var cimplifyTanstackCacheDriver = createCimplifyTanstackCacheDriver;
|
|
280
|
+
|
|
281
|
+
exports.CIMPLIFY_CACHE_META_FIELD = CIMPLIFY_CACHE_META_FIELD;
|
|
282
|
+
exports.CIMPLIFY_TAG_PREFIX = CIMPLIFY_TAG_PREFIX;
|
|
283
|
+
exports.TANSTACK_CACHE_NAMESPACE = TANSTACK_CACHE_NAMESPACE;
|
|
284
|
+
exports.TANSTACK_PATH_INDEX_BINDING = TANSTACK_PATH_INDEX_BINDING;
|
|
285
|
+
exports.TANSTACK_R2_BUCKET_BINDING = TANSTACK_R2_BUCKET_BINDING;
|
|
286
|
+
exports.TANSTACK_R2_PREFIX_ENV = TANSTACK_R2_PREFIX_ENV;
|
|
287
|
+
exports.cimplifyTanstackCacheDriver = cimplifyTanstackCacheDriver;
|
|
288
|
+
exports.cimplifyTanstackCacheOptions = cimplifyTanstackCacheOptions;
|
|
289
|
+
exports.cimplifyTanstackR2Key = cimplifyTanstackR2Key;
|
|
290
|
+
exports.createCimplifyTanstackCacheDriver = createCimplifyTanstackCacheDriver;
|
|
291
|
+
exports.withCimplifyCacheMetadata = withCimplifyCacheMetadata;
|