@rari/use-cache 0.0.0 → 0.15.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/README.md +44 -6
- package/dist/cache-dynamic-context-DEPac2or.mjs +1 -0
- package/dist/cache-dynamic-context-Dbk9__nd.d.mts +8 -0
- package/dist/index.d.mts +27 -0
- package/dist/index.mjs +6 -0
- package/dist/runtime/cache-dynamic-context.d.mts +2 -0
- package/dist/runtime/cache-dynamic-context.mjs +1 -0
- package/dist/runtime/cache-wrapper.d.mts +37 -0
- package/dist/runtime/cache-wrapper.mjs +1 -0
- package/package.json +70 -16
- package/index.js +0 -3
package/README.md
CHANGED
|
@@ -1,10 +1,48 @@
|
|
|
1
1
|
# @rari/use-cache
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
configured on npmjs.com. It is not a working `use cache` transform.
|
|
3
|
+
> Native `"use cache"` directive transform and runtime for [rari](https://github.com/rari-build/rari)
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
tag, then deprecate or ignore `0.0.0`.
|
|
5
|
+
High-performance `"use cache"` support for React Server Components, powered by a Rust NAPI addon.
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
Usually installed automatically with [rari](https://www.npmjs.com/package/rari). To install directly:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @rari/use-cache
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Enable caching in your rari Vite config:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import rari from 'rari/vite'
|
|
19
|
+
import { defineConfig } from 'vite'
|
|
20
|
+
|
|
21
|
+
export default defineConfig({
|
|
22
|
+
plugins: [
|
|
23
|
+
rari({
|
|
24
|
+
experimental: {
|
|
25
|
+
useCache: true,
|
|
26
|
+
},
|
|
27
|
+
}),
|
|
28
|
+
],
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## What This Does
|
|
33
|
+
|
|
34
|
+
- Transforms `"use cache"` directives at build time via a native Rust addon
|
|
35
|
+
- Provides cache runtime helpers (`cacheLife`, `cacheTag`, revalidation APIs)
|
|
36
|
+
- Ships platform-specific optional dependencies for macOS, Linux, and Windows
|
|
37
|
+
|
|
38
|
+
You typically don't need to import this package in app code. rari loads the transform when `experimental.useCache` (or `experimental.useCacheRemote`) is enabled.
|
|
39
|
+
|
|
40
|
+
## Links
|
|
41
|
+
|
|
42
|
+
- **Documentation:** [rari.build/docs](https://rari.build/docs)
|
|
43
|
+
- **GitHub:** [github.com/rari-build/rari](https://github.com/rari-build/rari)
|
|
44
|
+
- **Discord:** [Join our community](https://discord.gg/GSh2Ak3b8Q)
|
|
45
|
+
|
|
46
|
+
## License
|
|
47
|
+
|
|
48
|
+
MIT License - see [LICENSE](https://github.com/rari-build/rari/blob/main/LICENSE) for details.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){let e=globalThis;return e[`~rari`]??={},e[`~rari`]}function t(){return globalThis}function n(){let t=e();t.useCacheDynamicDepth=(t.useCacheDynamicDepth??0)+1}function r(){return e().useCacheDynamicDepth??0}function i(){return r()>0}function a(){let t=e();t.useCacheDynamicDepth=0}function o(e){return n(),Promise.resolve(e())}export{o as a,a as i,i as n,e as o,n as r,t as s,r as t};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/runtime/cache-dynamic-context.d.ts
|
|
2
|
+
declare function markUseCacheDynamicContext(): void;
|
|
3
|
+
declare function getDynamicContextDepth(): number;
|
|
4
|
+
declare function isUseCacheDynamicContext(): boolean;
|
|
5
|
+
declare function resetUseCacheDynamicContextForTests(): void;
|
|
6
|
+
declare function runWithUseCacheDynamicContext<T>(fn: () => T | Promise<T>): Promise<T>;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { runWithUseCacheDynamicContext as a, resetUseCacheDynamicContextForTests as i, isUseCacheDynamicContext as n, markUseCacheDynamicContext as r, getDynamicContextDepth as t };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/native.d.ts
|
|
2
|
+
interface TransformOptions {
|
|
3
|
+
filename: string;
|
|
4
|
+
hashSalt?: string;
|
|
5
|
+
cacheKinds?: string[];
|
|
6
|
+
}
|
|
7
|
+
interface TransformResult {
|
|
8
|
+
code: string;
|
|
9
|
+
needsReactCache: boolean;
|
|
10
|
+
needsCacheWrapper: boolean;
|
|
11
|
+
needsRegisterRef: boolean;
|
|
12
|
+
}
|
|
13
|
+
interface NativeAddon {
|
|
14
|
+
detectUseCache: (source: string) => boolean;
|
|
15
|
+
transformUseCache: (source: string, options: TransformOptions) => TransformResult;
|
|
16
|
+
}
|
|
17
|
+
declare function detectUseCache(source: string): boolean;
|
|
18
|
+
declare function transformUseCache(source: string, options: TransformOptions): TransformResult;
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region src/transform.d.ts
|
|
21
|
+
interface UseCacheTransformOptions {
|
|
22
|
+
hashSalt?: string;
|
|
23
|
+
cacheKinds?: string[];
|
|
24
|
+
}
|
|
25
|
+
declare function transformUseCacheModule(code: string, id: string, options?: UseCacheTransformOptions): string | null;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { type NativeAddon, type TransformOptions, type TransformResult, type UseCacheTransformOptions, detectUseCache, transformUseCache, transformUseCacheModule };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import e from"node:process";const t={"darwin-arm64":`@rari/use-cache-darwin-arm64`,"darwin-x64":`@rari/use-cache-darwin-x64`,"linux-arm64":`@rari/use-cache-linux-arm64`,"linux-x64":`@rari/use-cache-linux-x64`,"win32-arm64":`@rari/use-cache-win32-arm64`,"win32-x64":`@rari/use-cache-win32-x64`},n=`${e.platform}-${e.arch}`,r=t[n];async function i(){if(!r)return console.warn(`[use-cache] Unsupported platform ${n}. Supported: ${Object.keys(t).join(`, `)}. Native transforms will not be available.`),null;try{return(await import(r)).default}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ERR_MODULE_NOT_FOUND`)return null;throw console.error(`[use-cache] Failed to load native addon from ${r}:`,e),e}}const a=await i();function o(e){return a?a.detectUseCache(e):!1}function s(e,t){return a?a.transformUseCache(e,t):{code:e,needsReactCache:!1,needsCacheWrapper:!1,needsRegisterRef:!1}}const c=/['"]use\s+cache(?::\s*[\w-]+)?['"]/,l=/^['"][^'"]+['"];?\s*$/;function u(e){return c.test(e)}let d=null,f=!1;function p(){return f?d:(f=!0,d=a,d||console.warn(`[use-cache] Native addon not available — transforms will be skipped`),d)}function m(e){let t=e.split(`
|
|
2
|
+
`),n=[];for(let e of t){let t=e.trim();if(t===``){n.push(e);continue}if(l.test(t))n.push(e);else break}return n}function h(e,t,n={}){if(!u(e)||!p())return null;try{let r=s(e,{filename:t,hashSalt:n.hashSalt??`rari-use-cache-v1`,cacheKinds:n.cacheKinds??[`default`]});if(r.code===e)return null;let i=[];r.needsReactCache&&i.push(`import { cache as $$reactCache__ } from 'react'`),r.needsCacheWrapper&&i.push(`import { $$cache__ } from '@rari/use-cache/runtime/cache-wrapper'`),r.needsRegisterRef&&i.push(`import { registerServerReference } from 'react-server-dom-rari/server'`);let a=m(r.code),o=i.length?`${i.join(`;
|
|
3
|
+
`)};\n`:``;if(a.length){let e=r.code.split(`
|
|
4
|
+
`).slice(a.length).join(`
|
|
5
|
+
`).trimStart();return`${a.join(`
|
|
6
|
+
`)}\n${o}${e}`}return`${o}${r.code}`}catch(e){throw Error(`Failed to transform 'use cache' directive in ${t}: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}export{o as detectUseCache,s as transformUseCache,h as transformUseCacheModule};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as runWithUseCacheDynamicContext, i as resetUseCacheDynamicContextForTests, n as isUseCacheDynamicContext, r as markUseCacheDynamicContext, t as getDynamicContextDepth } from "../cache-dynamic-context-Dbk9__nd.mjs";
|
|
2
|
+
export { getDynamicContextDepth, isUseCacheDynamicContext, markUseCacheDynamicContext, resetUseCacheDynamicContextForTests, runWithUseCacheDynamicContext };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,i as t,n,r,t as i}from"../cache-dynamic-context-DEPac2or.mjs";export{i as getDynamicContextDepth,n as isUseCacheDynamicContext,r as markUseCacheDynamicContext,t as resetUseCacheDynamicContextForTests,e as runWithUseCacheDynamicContext};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { i as resetUseCacheDynamicContextForTests, r as markUseCacheDynamicContext } from "../cache-dynamic-context-Dbk9__nd.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/runtime/storage/test.d.ts
|
|
4
|
+
type TestStorageBackend = 'redb' | 'redis';
|
|
5
|
+
declare function setTestStorageBackend(next: TestStorageBackend): void;
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/runtime/context/cache-life.d.ts
|
|
8
|
+
interface CacheLifeProfile {
|
|
9
|
+
stale?: number;
|
|
10
|
+
revalidate?: number;
|
|
11
|
+
expire?: number;
|
|
12
|
+
}
|
|
13
|
+
type CacheLifeProfileName = 'default' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'max';
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/runtime/api/cache-api.d.ts
|
|
16
|
+
declare function cacheLife(profile: CacheLifeProfileName | CacheLifeProfile): void;
|
|
17
|
+
declare function cacheTag(...tags: string[]): void;
|
|
18
|
+
declare function revalidateTag(tag: string): Promise<void>;
|
|
19
|
+
declare function revalidatePath(path: string): Promise<void>;
|
|
20
|
+
declare function updateTag(tag: string): Promise<void>;
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/runtime/api/connection.d.ts
|
|
23
|
+
declare function connection(): Promise<void>;
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/runtime/encoding/build-id.d.ts
|
|
26
|
+
declare global {
|
|
27
|
+
var __RARI_USE_CACHE_BUILD_ID__: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
declare function setUseCacheBuildId(buildId: string): void;
|
|
30
|
+
declare function resetUseCacheBuildIdForTests(): void;
|
|
31
|
+
declare function getUseCacheBuildId(): string;
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/runtime/cache-wrapper.d.ts
|
|
34
|
+
type CacheableFunction<Args extends unknown[]> = (...args: Args) => unknown | Promise<unknown>;
|
|
35
|
+
declare function $$cache__<Args extends unknown[]>(kind: string, id: string, argCount: number, fn: CacheableFunction<Args>, args: Args): unknown;
|
|
36
|
+
//#endregion
|
|
37
|
+
export { $$cache__, type CacheLifeProfile, type CacheLifeProfileName, type TestStorageBackend, cacheLife, cacheTag, connection, getUseCacheBuildId, markUseCacheDynamicContext, resetUseCacheBuildIdForTests, resetUseCacheDynamicContextForTests, revalidatePath, revalidateTag, setTestStorageBackend, setUseCacheBuildId, updateTag };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,n as t,o as n,r,s as i}from"../cache-dynamic-context-DEPac2or.mjs";import{createHash as a}from"node:crypto";import{AsyncLocalStorage as o}from"node:async_hooks";import{createTemporaryReferenceSet as s,encodeReply as c}from"react-server-dom-webpack/client";const l={stale:300,revalidate:900,expire:void 0},ee={default:l,seconds:{stale:30,revalidate:1,expire:60},minutes:{stale:300,revalidate:60,expire:3600},hours:{stale:300,revalidate:3600,expire:86400},days:{stale:300,revalidate:86400,expire:604800},weeks:{stale:300,revalidate:604800,expire:2592e3},max:{stale:300,revalidate:2592e3,expire:31536e3}};function u(e){return typeof e==`string`?{...ee[e]}:{stale:e.stale??l.stale,revalidate:e.revalidate??l.revalidate,expire:e.expire??l.expire}}function d(e){if(!e)return l.revalidate*1e3;let t=e.expire;if(t!==void 0&&t>0)return t*1e3;if(e.revalidate!==void 0)return e.revalidate*1e3;let n=l.revalidate;return n>0?n*1e3:31536e6}function te(e){let t=u(e);if(t.revalidate!==void 0&&t.expire!==void 0&&t.expire>0&&t.revalidate>0&&t.expire<=t.revalidate)throw Error(`[rari] cacheLife: expire must be longer than revalidate when both are set.`);return t}const f=new o;function p(){return f.getStore()}function ne(e){return Promise.resolve(f.run({tags:[]},e))}function re(){let e=p();if(!e)throw Error(`[rari] cache context is only available inside a cached function call.`);return e}function m(e){let t=p();if(!t){console.warn(`[rari] cacheLife() has no effect outside a cached function call.`);return}t.life=te(e)}function h(...e){if(e.length===0)return;let t=n().pageCacheTags??=new Set;for(let n of e)t.add(n)}function ie(...e){let t=p();if(!t){console.warn(`[rari] cacheTag() has no effect outside a cached function call.`);return}let n=new Set(t.tags);for(let t of e){if(n.size>=128){console.warn(`[rari] cacheTag: maximum of 128 tags per cache scope reached; skipping remaining tags.`);break}if(t.length>256){console.warn(`[rari] cacheTag: tag longer than 256 characters skipped: "${t.slice(0,32)}..."`);continue}n.add(t)}t.tags=[...n],h(...t.tags)}const g=new Map,_=new Map;function v(e,t){if(t.length===0)return;let n=[...new Set(t)];_.set(e,new Set(n));for(let t of n){let n=g.get(t);n||(n=new Set,g.set(t,n)),n.add(e)}}function y(e){let t=_.get(e);if(t){for(let n of t){let t=g.get(n);t?.delete(e),t&&t.size===0&&g.delete(n)}_.delete(e)}}function b(e,t){y(e),v(e,t)}async function ae(e,t){let n=g.get(e);if(!n||n.size===0)return 0;let r=[...n],i=0;for(let n of r)try{await t(n),y(n),i+=1}catch(t){console.error(`[rari] failed to invalidate use cache key "${n}" for tag "${e}":`,t)}return g.get(e)?.size||g.delete(e),i}function oe(){return[...g.keys()]}function x(e){return async t=>{await Promise.all(e.map(async e=>{`delete`in e&&typeof e.delete==`function`&&await e.delete(t)}))}}var S=class{map=new Map;maxSize;constructor(e){if(!(e>0))throw TypeError("`maxSize` must be a number greater than 0");this.maxSize=e}get(e){let t=this.map.get(e);if(t){if(t.expiry!==void 0&&t.expiry<=Date.now()){this.map.delete(e);return}return this.map.delete(e),this.map.set(e,t),t.value}}set(e,t,n){this.map.has(e)&&this.map.delete(e);let r={value:t};if(typeof n==`number`&&Number.isFinite(n)&&(r.expiry=Date.now()+n),this.map.set(e,r),this.map.size>this.maxSize){let e=this.map.keys().next().value;e!==void 0&&this.map.delete(e)}}delete(e){return this.map.delete(e)}},C=class{cache;constructor(e=1e3){this.cache=new S(e)}async read(e){return this.cache.get(e)??null}async write(e,t,n){this.cache.set(e,{value:t},n.ttlMs),n.tags?.length&&b(e,n.tags)}async delete(e){this.cache.delete(e)}};const w=globalThis;var T=class{ops;constructor(e){this.ops=e}async read(e){let t=w.Deno?.core?.ops?.[this.ops.get],n=null;try{let r=await t?.(e);n=typeof r==`string`?r:null}catch(t){return console.error(`[rari] ${this.ops.get} read failed for key="${e}":`,t),null}if(!n)return null;try{return{value:JSON.parse(n)}}catch(t){return console.error(`[rari] ${this.ops.get} value parse failed for key="${e}":`,t),null}}async write(e,t,n){let r=w.Deno?.core?.ops?.[this.ops.set],i;try{i=JSON.stringify(t)}catch(t){console.error(`[rari] ${this.ops.set} value not serializable for key="${e}":`,t);return}if(i===void 0){console.error(`[rari] ${this.ops.set} value not serializable for key="${e}" (got undefined from JSON.stringify)`);return}try{await r?.(e,i,n.ttlMs),b(e,n.tags??[])}catch(t){console.error(`[rari] ${this.ops.set} write failed for key="${e}":`,t)}}async delete(e){let t=this.ops.delete;if(!t)return;let n=w.Deno?.core?.ops?.[t];try{await n?.(e)}catch(n){console.error(`[rari] ${t} delete failed for key="${e}":`,n)}}};function E(e){let t=w.Deno?.core?.ops;return!!(t&&typeof t[e.get]==`function`&&typeof t[e.set]==`function`)}function se(){let e=w.Deno?.core?.ops?.op_use_cache_remote_handler;if(typeof e!=`function`)return;let t=e();if(t===`redis`||t===`redb`||t===`test`)return t}function D(){let e=n().useCachePrivateKey;if(e)return e;let t=w.Deno?.core?.ops?.op_get_cookies;if(typeof t==`function`){let e=t();if(typeof e==`string`&&e.length>0)return e}return`anonymous`}async function ce(e){let t=w.Deno?.core?.ops?.op_use_cache_invalidate;if(typeof t==`function`)try{await t(e)}catch(e){console.error(`[rari] op_use_cache_invalidate failed:`,e)}}const O={get:`op_redb_cache_get`,set:`op_redb_cache_set`,delete:`op_redb_cache_delete`};function k(){return new T(O)}function le(){return E(O)}const A={get:`op_cache_remote_get`,set:`op_cache_remote_set`,delete:`op_cache_remote_delete`};function j(){return new T(A)}function M(){return E(A)}let N;function P(e){N=e}function F(){return N}function I(e){return e===`redis`?A:O}var L=class{storage;constructor(){if(!N)throw Error(`TestCacheStorage: setTestStorageBackend() must be called first`);if(!E(I(N)))throw Error(`TestCacheStorage: requested backend '${N}' ops are not available`);this.storage=N===`redis`?j():k()}read(e){return this.storage.read(e)}write(e,t,n){return this.storage.write(e,t,n)}async delete(e){await this.storage.delete?.(e)}};let R,z,B;const V=new Map,H={test:()=>new L,redb:()=>z??=k(),redis:()=>B??=j(),memory:()=>R??=new C,private:()=>{let e=D(),t=V.get(e);return t||(t=new C,V.set(e,t)),t}};function U(){let e=se();if(e===`test`)return F()===void 0?void 0:H.test();if(e===`redb`&&le())return H.redb();if(e===`redis`&&M())return H.redis()}function W(e){if(e===`private`)return H.private();if(e===`remote`){let e=U();if(e)return e}return H.memory()}function ue(){let e=[];R&&e.push(R),B&&e.push(B),z&&e.push(z);for(let t of V.values())e.push(t);return e}async function G(e){await ce(e)}async function K(e){return ae(e,x(ue()))}function de(e){m(e)}function fe(...e){ie(...e)}async function q(e){await K(e),await G({tag:e})}async function pe(e){await q(e),await G({path:e})}async function me(e){await q(e)}async function he(){r()}let J;function ge(e){J=e}function _e(){J=void 0}function Y(){return J||n().useCacheBuildId||(globalThis.__RARI_USE_CACHE_BUILD_ID__?globalThis.__RARI_USE_CACHE_BUILD_ID__:`development`)}async function ve(e){let t=``;for(let[n,r]of e){t+=`${n.length.toString(16)}:${n}`;let e;if(typeof r==`string`)e=r;else{let t=await r.arrayBuffer(),n=new Uint8Array(t),i=``;for(let e of n)i+=String.fromCharCode(e);e=`base64:${btoa(i)}`}t+=`${e.length.toString(16)}:${e}`}return t}async function ye(e){let t=await c(e,{temporaryReferences:s()});return typeof t==`string`?t:ve(t)}function be(){let e=i(),t=n();e.__rariInvalidateUseCache=K,e.__rariGetActiveUseCacheTags=oe,t.invalidateUseCache=async e=>{e.tag&&await K(e.tag),e.path&&await K(e.path)},t.markUseCacheDynamic=r}const xe=new class{async read(e){return null}async write(e,t,n){}async delete(e){}};function Se(e,t){if(e.length<=t)return e.slice(-t);let n=e[0];return Array.isArray(n)?[...n.slice(1),...e.slice(1)]:e.slice(-t)}function X(e,t=new WeakSet,n=new WeakSet){if(e===null)return`null`;if(e===void 0)return`undefined`;if(typeof e==`bigint`)return`${e.toString()}n`;if(typeof e==`symbol`){let t=Symbol.keyFor(e);return t===void 0?`Symbol(${JSON.stringify(e.description??``)})`:`Symbol.for(${JSON.stringify(t)})`}if(typeof e==`function`)return`Function(${JSON.stringify(e.toString())})`;if(typeof e!=`object`)return JSON.stringify(e);if(n.has(e))return`[Circular]`;n.add(e),t.add(e);let r;try{r=e instanceof Date?`Date(${e.toISOString()})`:e instanceof RegExp?`RegExp(${JSON.stringify(e.source)},${JSON.stringify(e.flags)})`:e instanceof Set?`Set[${Array.from(e).map(e=>X(e,t,n)).sort().join(`,`)}]`:e instanceof Map?`Map{${Array.from(e.entries()).map(([e,r])=>`${X(e,t,n)}:${X(r,t,n)}`).sort().join(`,`)}}`:Array.isArray(e)?`[${e.map(e=>X(e,t,n)).join(`,`)}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${X(e[r],t,n)}`).join(`,`)}}`}finally{n.delete(e)}return r}be();const Z=new Map,Q=new Map;async function Ce(e,t,n,r){let i=[e,t,n,r];t===`private`&&i.push(D());let o=await ye(i);return a(`sha256`).update(o,`utf8`).digest(`hex`)}function we(e,t,n,r){let i=`${e}\0${t}\0${n}\0${X(r)}`,a=Q.get(i);if(a)return a;let o=Ce(e,t,n,r).finally(()=>{Q.delete(i)});return Q.set(i,o),o}function $(e,n,r,i,a){throw we(Y(),e,n,Se(a,r)).then(async n=>{let r=t();if(!r){let e=Z.get(n);if(e)return e}let o=r&&(e==="default"||e===`remote`)?xe:W(e),s=ne(async()=>{let e=await o.read(n);if(e!==null)return e.value;let t=await i(...a),r=re();return await o.write(n,t,{ttlMs:d(r.life),tags:r.tags}),h(...r.tags),t}).finally(()=>{r||Z.delete(n)});return r||Z.set(n,s),s})}export{$ as $$cache__,de as cacheLife,fe as cacheTag,he as connection,Y as getUseCacheBuildId,r as markUseCacheDynamicContext,_e as resetUseCacheBuildIdForTests,e as resetUseCacheDynamicContextForTests,pe as revalidatePath,q as revalidateTag,P as setTestStorageBackend,ge as setUseCacheBuildId,me as updateTag};
|
package/package.json
CHANGED
|
@@ -1,25 +1,79 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rari/use-cache",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"type": "module",
|
|
4
|
+
"version": "0.15.0",
|
|
5
|
+
"description": "Native 'use cache' directive transform addon for rari",
|
|
5
6
|
"author": "Ryan Skinner",
|
|
6
7
|
"license": "MIT",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
8
|
+
"homepage": "https://github.com/rari-build/rari#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"directory": "packages/use-cache",
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/rari-build/rari.git"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/rari-build/rari/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"rari",
|
|
19
|
+
"use-cache",
|
|
20
|
+
"transform",
|
|
21
|
+
"napi",
|
|
22
|
+
"napi-rs",
|
|
23
|
+
"rust",
|
|
24
|
+
"react",
|
|
25
|
+
"server-components"
|
|
26
|
+
],
|
|
9
27
|
"exports": {
|
|
10
28
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
29
|
+
"types": "./dist/index.d.mts",
|
|
30
|
+
"import": "./dist/index.mjs",
|
|
31
|
+
"default": "./dist/index.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./runtime/cache-wrapper": {
|
|
34
|
+
"types": "./dist/runtime/cache-wrapper.d.mts",
|
|
35
|
+
"import": "./dist/runtime/cache-wrapper.mjs",
|
|
36
|
+
"default": "./dist/runtime/cache-wrapper.mjs"
|
|
37
|
+
},
|
|
38
|
+
"./runtime/cache-dynamic-context": {
|
|
39
|
+
"types": "./dist/runtime/cache-dynamic-context.d.mts",
|
|
40
|
+
"import": "./dist/runtime/cache-dynamic-context.mjs",
|
|
41
|
+
"default": "./dist/runtime/cache-dynamic-context.mjs"
|
|
13
42
|
}
|
|
14
43
|
},
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
44
|
+
"main": "./dist/index.mjs",
|
|
45
|
+
"module": "./dist/index.mjs",
|
|
46
|
+
"types": "./dist/index.d.mts",
|
|
47
|
+
"files": [
|
|
48
|
+
"LICENSE",
|
|
49
|
+
"README.md",
|
|
50
|
+
"dist"
|
|
51
|
+
],
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=22.18.0"
|
|
54
|
+
},
|
|
55
|
+
"peerDependencies": {
|
|
56
|
+
"react-server-dom-webpack": "^19.2.7"
|
|
57
|
+
},
|
|
58
|
+
"optionalDependencies": {
|
|
59
|
+
"@rari/use-cache-darwin-arm64": "0.15.0",
|
|
60
|
+
"@rari/use-cache-darwin-x64": "0.15.0",
|
|
61
|
+
"@rari/use-cache-linux-arm64": "0.15.0",
|
|
62
|
+
"@rari/use-cache-linux-x64": "0.15.0",
|
|
63
|
+
"@rari/use-cache-win32-arm64": "0.15.0",
|
|
64
|
+
"@rari/use-cache-win32-x64": "0.15.0"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/node": "^26.1.1",
|
|
68
|
+
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
69
|
+
"typescript-7": "npm:typescript@^7.0.2",
|
|
70
|
+
"vite-plus": "^0.2.4"
|
|
22
71
|
},
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
}
|
|
72
|
+
"scripts": {
|
|
73
|
+
"build": "pnpm typecheck && vp pack",
|
|
74
|
+
"clean": "node --eval \"import('node:fs').then(fs => fs.rmSync('dist', { recursive: true, force: true }))\"",
|
|
75
|
+
"lint": "vp lint",
|
|
76
|
+
"lint:fix": "vp lint --fix",
|
|
77
|
+
"typecheck": "tsc"
|
|
78
|
+
}
|
|
79
|
+
}
|
package/index.js
DELETED