@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 CHANGED
@@ -1,10 +1,48 @@
1
1
  # @rari/use-cache
2
2
 
3
- **OIDC setup placeholder only.** This package exists so Trusted Publishing can be
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
- After configuring OIDC, publish a real version via the `@rari/use-cache@*` release
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
- Configure here:
10
- https://www.npmjs.com/package/@rari/use-cache/access
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 };
@@ -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
- "version": "0.0.0",
4
- "description": "OIDC trusted-publishing placeholder for @rari/use-cache. Not a functional transform — replace with a real release.",
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
- "type": "module",
8
- "main": "./index.js",
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
- "import": "./index.js",
12
- "default": "./index.js"
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
- "files": ["index.js", "README.md", "LICENSE"],
16
- "engines": { "node": ">=22.18.0" },
17
- "homepage": "https://github.com/rari-build/rari#readme",
18
- "repository": {
19
- "type": "git",
20
- "url": "git+https://github.com/rari-build/rari.git",
21
- "directory": "packages/use-cache"
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
- "bugs": { "url": "https://github.com/rari-build/rari/issues" },
24
- "keywords": ["rari", "use-cache", "oidc-placeholder"]
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
@@ -1,3 +0,0 @@
1
- throw new Error(
2
- '@rari/use-cache placeholder — publish a real release before use',
3
- )