@firsthandjs/data 0.9.1 → 0.10.1
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/action.d.ts +30 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/document.d.ts +0 -4
- package/dist/document.d.ts.map +1 -1
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/http.d.ts +0 -15
- package/dist/http.d.ts.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.dev.js +462 -415
- package/dist/index.js +2 -2
- package/dist/resource.d.ts +0 -20
- package/dist/resource.d.ts.map +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/vite.dev.js +47 -39
- package/dist/vite.js +47 -39
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createContext as N,effect as _,isRendering as Q,onCleanup as D,untrack as G,useContext as K}from"@firsthandjs/core";import{batch as A,signal as v}from"@firsthandjs/core";var z=Object.freeze({});function k(e,n=z){return{name:e,vars:n}}function q(e,n){if(e.name!==n.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],n.vars[r]))return!1;return!0}function h(e,n){for(let r of e)for(let t of n)if(q(r,t))return!0;return!1}function L(e={}){let n=new Set,r=e.remember??6e4,t=[],o=()=>Date.now();return{storage:e.storage,missed:(s,l)=>{if(r===0||t.length===0)return!1;let i=o()-r;return t=t.filter(a=>a.at>=i),t.some(a=>a.at>s.answeredAt&&h(a.patterns,l))},settled:s=>{t.length!==0&&(t=t.filter(l=>!h(l.patterns,s)))},settle:async(s=10)=>{for(let l=0;l<s;l++){let i=[];for(let a of n)a.inflight!==null&&i.push(a.inflight);if(i.length===0)return;await Promise.all(i)}},hold:s=>(n.add(s),()=>n.delete(s)),invalidate:async(...s)=>{let l=[];for(let i of e.caches??[])i.forgetTagged(s);r>0&&t.push({patterns:s,at:o()});for(let i of[...n])i.controller!==null&&i.pending.push(...s),h(s,i.tags)&&(i.name,i.tags,l.push(i.run(!0)));await Promise.all(l)},clear:()=>{t=[];for(let s of[...n])s.controller?.abort(),n.delete(s);try{e.storage?.clear?.()}catch{}},get size(){return n.size}}}function x(e,n){return{data:v(void 0),error:v(void 0),status:v("idle"),loading:v(!1),tags:[],controller:null,pending:[],inflight:null,superseded:!1,disposed:!1,answeredAt:0,name:n}}function T(e,n){e.answeredAt=Date.now(),A(()=>{e.data.value=n,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function w(e,n){A(()=>{e.error.value=n,e.status.value="error",e.loading.value=!1})}function C(e,n){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),n()}}}var $=N();function b(){return K($).value}function U(){let e=b();return(...n)=>e.invalidate(...n)}function V(e,n){n===void 0||e.data.peek()!==void 0||e.disposed||(T(e,n),e.loading.value=!0)}function B(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function j(e,n={}){let r=b(),t=x(r,n.persist),o=r.hold(t);n.persist,t.run=i=>{if(t.disposed)return Promise.resolve(void 0);t.controller?.abort();let a=new AbortController;t.controller=a,t.pending=[],t.superseded=!1,t.loading.value=!0,t.data.peek()===void 0&&(t.status.value="loading");let d=i,u=!1,c=(...f)=>{t.tags=f,!d&&r.missed(t,f)&&(d=!0,u&&(t.superseded=!0)),t.pending.length>0&&h(t.pending,f)&&(t.superseded=!0)},y={signal:a.signal,get force(){return u=!0,d},get declared(){return t.tags},tags:c},g={signal:a.signal,get force(){return u=!0,d},request:y,tags:c},p=e(g).then(async f=>{if(!(a.signal.aborted||t.disposed)){if(t.controller=null,T(t,f),t.superseded||r.settled(t.tags),n.persist!==void 0)try{r.storage?.write?.(n.persist,f)}catch{}return t.superseded?(t.superseded=!1,t.run(!0)):f}}).catch(f=>{a.signal.aborted||t.disposed||(t.controller=null,w(t,f))});return t.inflight=p,p.then(()=>{t.inflight===p&&(t.inflight=null)}),p};let s=n.persist,l=r.storage;if(s!==void 0&&l?.read!==void 0){let i;try{i=l.read(s)}catch{i=void 0}B(i)?(async()=>{try{V(t,await i)}catch{}})():V(t,i)}return Q()?t.data.peek()===void 0?t.run(!1):t.loading.value=!1:_(()=>{t.run(!1)}),D(()=>{t.disposed=!0,t.controller?.abort(),n.persist,t.tags,o()}),C(t,o)}function Z(e){let n=b(),r=x(n,void 0),t=null;return D(()=>{r.disposed=!0,t?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:async o=>{t?.abort(),t=new AbortController;let s=t,l=[];r.loading.value=!0,r.status.value="loading";try{let i=(...d)=>{l=d},a=await G(()=>e(o,{signal:s.signal,invalidates:i,request:{signal:s.signal,force:!0,mutating:!0,tags:i}}));return s.signal.aborted||r.disposed?void 0:(T(r,a),l.length>0&&await n.invalidate(...l),a)}catch(i){if(s.signal.aborted||r.disposed)return;w(r,i);return}}}}function W(e,n={}){let r=b(),t=x(r,void 0),o=r.hold(t);t.run=()=>n.reload===void 0?Promise.resolve(void 0):Y(n.reload()),t.loading.value=!0,t.status.value="loading";let s=e.subscribe({next:i=>{T(t,i)},error:i=>{w(t,i)}}),l=typeof s=="function"?s:()=>{s.unsubscribe()};return D(()=>{t.disposed=!0,l(),o()}),C(t,()=>{l(),o()})}function X(e){return j(()=>e())}async function Y(e){await e}function O(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(O).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[t])=>r<t?-1:1).map(([r,t])=>`${r}:${O(t)}`).join(",")}}`}function S(e={}){let n=e.ttl??0,r=e.max??100,t=e.now??(()=>Date.now()),o=new Map,s=a=>{o.get(a)?.controller?.abort(),o.delete(a)},l=(a,d)=>{i(a,{value:d,tags:[],expires:n===0?1/0:t()+n,inflight:null,controller:null,waiting:0})},i=(a,d)=>{if(o.delete(a),o.set(a,d),o.size>r)for(let u of o.keys()){s(u);break}};return{get size(){return o.size},dump:()=>{let a={};for(let[d,u]of o)u.inflight===null&&(a[d]=u.value);return a},seed:a=>{for(let d in a)l(d,a[d])},settle:async(a=10)=>{for(let d=0;d<a;d++){let u=[];for(let c of o.values())c.inflight!==null&&u.push(c.inflight);if(u.length===0)return;await Promise.all(u.map(async c=>c.catch(()=>{})))}},peek:a=>{let d=o.get(a);if(!(d===void 0||d.expires<=t()))return d.value},write:l,forget:a=>{if(a===void 0){for(let d of[...o.keys()])s(d);return}s(a)},forgetTagged:a=>{for(let[d,u]of[...o])u.tags.length>0&&h(a,u.tags)&&s(d)},read:(a,d)=>async u=>{if(u.mutating===!0)return await d(u);let c=o.get(a);if(u.force)s(a);else if(c!==void 0){if(c.inflight!==null)return await E(c,u);if(c.expires>t())return i(a,c),c.value;o.delete(a)}let y=new AbortController,g={value:void 0,tags:u.declared??[],expires:0,inflight:null,controller:y,waiting:0},p=d({signal:y.signal,force:u.force}).then(f=>(o.get(a)===g&&(n===0?o.delete(a):(g.value=f,g.expires=t()+n,g.inflight=null,g.controller=null)),f)).catch(f=>{throw o.get(a)===g&&o.delete(a),f});return g.inflight=p,i(a,g),await E(g,u)}}}async function E(e,n){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};n.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{n.signal.removeEventListener("abort",r),e.waiting-=1}}function ee(e){let n=new Map(e===void 0?[]:Object.entries(e));return{get size(){return n.size},read:r=>n.get(r),write:(r,t)=>{n.set(r,t)},clear:()=>{n.clear()},dump:()=>Object.fromEntries(n),seed:r=>{for(let t in r)n.set(t,r[t])}}}function te(e){return JSON.stringify(e).replace(ne,n=>re[n])}var ne=/[<\u2028\u2029]/g,re={"<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"};var oe=/^@(tag|invalidates)\b/,ae=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,F=/^[_A-Za-z][_0-9A-Za-z]*/,m=class extends Error{constructor(n){super(n),this.name="FirsthandDirectiveError"}};function P(e,n){if(e.startsWith('"""',n)){let t=e.indexOf('"""',n+3);return t===-1?e.length:t+3}let r=n+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function se(e,n){let r=0,t=n;for(;t<e.length;){let o=e[t];if(o==='"'){t=P(e,t);continue}if(o==="("||o==="["||o==="{")r++;else if((o===")"||o==="]"||o==="}")&&(r--,r===0))return t+1;t++}throw new m(`unclosed arguments in ${e.slice(n,n+40)}`)}function ie(e,n){try{return JSON.parse(e)}catch{throw new m(`@${n}: ${e} is not a valid string`)}}function le(e,n){let r={},t=0,o=()=>{for(;t<e.length&&/[\s,]/.test(e[t]);)t++};for(o();t<e.length;){let s=F.exec(e.slice(t));if(s===null)throw new m(`@${n}: expected an argument name at "${e.slice(t)}"`);if(t+=s[0].length,o(),e[t]!==":")throw new m(`@${n}: argument ${s[0]} has no value`);t++,o();let l=de(e,n,t);r[s[0]]=l.value,t=l.next,o()}return r}function de(e,n,r){let t=e[r];if(t==="$"){let a=F.exec(e.slice(r+1));if(a===null)throw new m(`@${n}: expected a variable name after $`);return{value:{variable:a[0]},next:r+1+a[0].length}}if(t==='"'){let a=P(e,r),d=e.slice(r,a);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():ie(d,n)},next:a}}if(t==="["||t==="{")throw new m(`@${n}: a tag variable must be a scalar, not a list or object`);let o=/^[^\s,)]+/.exec(e.slice(r));if(o===null)throw new m(`@${n}: expected a value`);let s=o[0],l=r+s.length;if(s==="true"||s==="false")return{value:{literal:s==="true"},next:l};if(s==="null")return{value:{literal:null},next:l};let i=Number(s);return{value:{literal:Number.isNaN(i)?s:i},next:l}}function ue(e){let n=[],r=[],t="",o=0,s=0;for(;o<e.length;){let l=e[o];if(l==='"'){o=P(e,o);continue}if(l==="#"){let p=e.indexOf(`
|
|
2
|
-
`,
|
|
1
|
+
import{createContext as Q,effect as G,isRendering as K,onCleanup as L,useContext as U}from"@firsthandjs/core";import{batch as D,signal as h}from"@firsthandjs/core";var $=Object.freeze({});function v(e,t=$){return{name:e,vars:t}}function C(e,t){if(e.name!==t.name)return!1;for(let r of Object.keys(e.vars))if(!Object.is(e.vars[r],t.vars[r]))return!1;return!0}function c(e,t){for(let r of e)for(let n of t)if(C(r,n))return!0;return!1}function O(e={}){let t={options:e,held:new Set,recent:[],remember:e.remember??6e4};return{storage:e.storage,missed:(r,n)=>I(t,r,n),settled:r=>{z(t,r)},settle:(r=10)=>M(t,r),hold:r=>(t.held.add(r),()=>t.held.delete(r)),invalidate:(...r)=>N(t,r),clear:()=>{_(t)},get size(){return t.held.size}}}function I(e,t,r){if(e.remember===0||e.recent.length===0)return!1;let n=Date.now()-e.remember;return e.recent=e.recent.filter(o=>o.at>=n),e.recent.some(o=>o.at>t.answeredAt&&c(o.patterns,r))}function z(e,t){e.recent.length!==0&&(e.recent=e.recent.filter(r=>!c(r.patterns,t)))}async function M(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.held)o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n)}}async function N(e,t){let r=[];for(let n of e.options.caches??[])n.forgetTagged(t);e.remember>0&&e.recent.push({patterns:t,at:Date.now()});for(let n of[...e.held])n.controller!==null&&n.pending.push(...t),c(t,n.tags)&&(n.name,n.tags,r.push(n.run(!0)));await Promise.all(r)}function _(e){e.recent=[];for(let t of[...e.held])t.controller?.abort(),e.held.delete(t);try{e.options.storage?.clear?.()}catch{}}function m(e,t){return{data:h(void 0),error:h(void 0),status:h("idle"),loading:h(!1),tags:[],controller:null,pending:[],inflight:null,superseded:!1,disposed:!1,answeredAt:0,name:t}}function g(e,t){e.answeredAt=Date.now(),D(()=>{e.data.value=t,e.error.value=void 0,e.status.value="success",e.loading.value=!1})}function y(e,t){D(()=>{e.error.value=t,e.status.value="error",e.loading.value=!1})}function x(e,t){return{data:e.data,error:e.error,status:e.status,loading:e.loading,reload:()=>e.run(!0),dispose:()=>{e.disposed=!0,e.controller?.abort(),t()}}}var q=Q();function f(){return U(q).value}function B(){let e=f();return(...t)=>e.invalidate(...t)}function P(e,t){t===void 0||e.data.peek()!==void 0||e.disposed||(g(e,t),e.loading.value=!0)}function Z(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function A(e,t={}){let r=f(),n=m(r,t.persist),o=r.hold(n);t.persist;let a={entry:n,store:r,persist:t.persist};return n.run=i=>W(a,e,i),Y(n,r,t.persist),ee(n),L(()=>{n.disposed=!0,n.controller?.abort(),t.persist,n.tags,o()}),x(n,o)}function W(e,t,r){let{entry:n,store:o}=e;if(n.disposed)return Promise.resolve(void 0);n.controller?.abort();let a=new AbortController;n.controller=a,n.pending=[],n.superseded=!1,n.loading.value=!0,n.data.peek()===void 0&&(n.status.value="loading");let i=t(ne(n,o,a,r)).then(async s=>X(e,a,s)).catch(s=>{a.signal.aborted||n.disposed||(n.controller=null,y(n,s))});return n.inflight=i,i.then(()=>{n.inflight===i&&(n.inflight=null)}),i}async function X(e,t,r){let{entry:n,store:o,persist:a}=e;if(!(t.signal.aborted||n.disposed)){if(n.controller=null,g(n,r),n.superseded||o.settled(n.tags),a!==void 0)try{o.storage?.write?.(a,r)}catch{}return n.superseded?(n.superseded=!1,n.run(!0)):r}}function Y(e,t,r){let n=t.storage;if(r===void 0||n?.read===void 0)return;let o;try{o=n.read(r)}catch{o=void 0}if(!Z(o)){P(e,o);return}(async()=>{try{P(e,await o)}catch{}})()}function ee(e){if(!K()){G(()=>{e.run(!1)});return}e.data.peek()===void 0?e.run(!1):e.loading.value=!1}function ne(e,t,r,n){let o=n,a=!1,i=(...d)=>{e.tags=d,!o&&t.missed(e,d)&&(o=!0,a&&(e.superseded=!0)),e.pending.length>0&&c(e.pending,d)&&(e.superseded=!0)},s=()=>(a=!0,o),l={signal:r.signal,get force(){return s()},get declared(){return e.tags},tags:i};return{signal:r.signal,get force(){return s()},request:l,tags:i}}function te(e,t={}){let r=f(),n=m(r,void 0),o=r.hold(n);n.run=()=>t.reload===void 0?Promise.resolve(void 0):oe(t.reload()),n.loading.value=!0,n.status.value="loading";let a=e.subscribe({next:s=>{g(n,s)},error:s=>{y(n,s)}}),i=typeof a=="function"?a:()=>{a.unsubscribe()};return L(()=>{n.disposed=!0,i(),o()}),x(n,()=>{i(),o()})}function re(e){return A(()=>e())}async function oe(e){await e}import{onCleanup as ae,untrack as ie}from"@firsthandjs/core";function se(e){let t=f(),r=m(t,void 0),n={controller:null,invalidating:[]};return ae(()=>{r.disposed=!0,n.controller?.abort()}),{data:r.data,error:r.error,status:r.status,running:r.loading,run:o=>de(r,t,n,()=>e(o,le(n)))}}function le(e){let t=e.controller,r=(...n)=>{e.invalidating=n};return{signal:t.signal,invalidates:r,request:{signal:t.signal,force:!0,mutating:!0,tags:r}}}async function de(e,t,r,n){r.controller?.abort(),r.controller=new AbortController;let o=r.controller;r.invalidating=[],e.loading.value=!0,e.status.value="loading";try{let a=await ie(n);return o.signal.aborted||e.disposed?void 0:(g(e,a),r.invalidating.length>0&&await t.invalidate(...r.invalidating),a)}catch(a){if(o.signal.aborted||e.disposed)return;y(e,a);return}}function w(e){return e===void 0?"undefined":e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(w).join(",")}]`:e instanceof Date?e.toISOString():`{${Object.entries(e).filter(([,r])=>r!==void 0).sort(([r],[n])=>r<n?-1:1).map(([r,n])=>`${r}:${w(n)}`).join(",")}}`}function R(e={}){let t={ttl:e.ttl??0,max:e.max??100,now:e.now??(()=>Date.now()),entries:new Map},r=(n,o)=>{ue(t,n,o)};return{get size(){return t.entries.size},dump:()=>ce(t),seed:n=>{for(let o in n)r(o,n[o])},settle:(n=10)=>ge(t,n),peek:n=>{let o=t.entries.get(n);return o===void 0||o.expires<=t.now()?void 0:o.value},write:r,forget:n=>{for(let o of n===void 0?[...t.entries.keys()]:[n])b(t,o)},forgetTagged:n=>{for(let[o,a]of[...t.entries])a.tags.length>0&&c(n,a.tags)&&b(t,o)},read:(n,o)=>async a=>fe(t,n,o,a)}}function b(e,t){e.entries.get(t)?.controller?.abort(),e.entries.delete(t)}function S(e,t,r){if(e.entries.delete(t),e.entries.set(t,r),e.entries.size>e.max)for(let n of e.entries.keys()){b(e,n);break}}function ue(e,t,r){S(e,t,{value:r,tags:[],expires:e.ttl===0?1/0:e.now()+e.ttl,inflight:null,controller:null,waiting:0})}function ce(e){let t={};for(let[r,n]of e.entries)n.inflight===null&&(t[r]=n.value);return t}async function ge(e,t){for(let r=0;r<t;r++){let n=[];for(let o of e.entries.values())o.inflight!==null&&n.push(o.inflight);if(n.length===0)return;await Promise.all(n.map(async o=>o.catch(()=>{})))}}async function fe(e,t,r,n){if(n.mutating===!0)return await r(n);let o=e.entries.get(t);if(n.force)b(e,t);else if(o!==void 0){if(o.inflight!==null)return await E(o,n);if(o.expires>e.now())return S(e,t,o),o.value;e.entries.delete(t)}return await pe(e,t,r,n)}async function pe(e,t,r,n){let o=new AbortController,a={value:void 0,tags:n.declared??[],expires:0,inflight:null,controller:o,waiting:0},i=r({signal:o.signal,force:n.force}).then(s=>(e.entries.get(t)===a&&me(e,t,a,s),s)).catch(s=>{throw e.entries.get(t)===a&&e.entries.delete(t),s});return a.inflight=i,S(e,t,a),await E(a,n)}function me(e,t,r,n){if(e.ttl===0){e.entries.delete(t);return}r.value=n,r.expires=e.now()+e.ttl,r.inflight=null,r.controller=null}async function E(e,t){e.waiting+=1;let r=()=>{e.waiting<=1&&e.inflight!==null&&e.controller?.abort()};t.signal.addEventListener("abort",r,{once:!0});try{return await e.inflight}finally{t.signal.removeEventListener("abort",r),e.waiting-=1}}function ye(e){let t=new Map(e===void 0?[]:Object.entries(e));return{get size(){return t.size},read:r=>t.get(r),write:(r,n)=>{t.set(r,n)},clear:()=>{t.clear()},dump:()=>Object.fromEntries(t),seed:r=>{for(let n in r)t.set(n,r[n])}}}function Te(e){return JSON.stringify(e).replace(he,t=>be[t])}var he=/[<\u2028\u2029]/g,be={"<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"};var u=class extends Error{constructor(t){super(t),this.name="FirsthandDirectiveError"}},T=class extends Error{constructor(r,n,o){super(`HTTP ${String(r)} for ${n}`);this.status=r;this.url=n;this.body=o;this.name="FirsthandHttpError"}status;url;body};var ve=/^@(tag|invalidates)\b/,xe=/\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/,H=/^[_A-Za-z][_0-9A-Za-z]*/;function k(e,t){if(e.startsWith('"""',t)){let n=e.indexOf('"""',t+3);return n===-1?e.length:n+3}let r=t+1;for(;r<e.length&&e[r]!=='"';)r+=e[r]==="\\"?2:1;return r+1}function we(e,t){let r=0,n=t;for(;n<e.length;){let o=e[n];if(o==='"'){n=k(e,n);continue}if(o==="("||o==="["||o==="{")r++;else if((o===")"||o==="]"||o==="}")&&(r--,r===0))return n+1;n++}throw new u(`unclosed arguments in ${e.slice(t,t+40)}`)}function Re(e,t){try{return JSON.parse(e)}catch{throw new u(`@${t}: ${e} is not a valid string`)}}function Se(e,t){let r={},n=0,o=()=>{for(;n<e.length&&/[\s,]/.test(e[n]);)n++};for(o();n<e.length;){let a=H.exec(e.slice(n));if(a===null)throw new u(`@${t}: expected an argument name at "${e.slice(n)}"`);if(n+=a[0].length,o(),e[n]!==":")throw new u(`@${t}: argument ${a[0]} has no value`);n++,o();let i=ke(e,t,n);r[a[0]]=i.value,n=i.next,o()}return r}function ke(e,t,r){let n=e[r];if(n==="$"){let l=H.exec(e.slice(r+1));if(l===null)throw new u(`@${t}: expected a variable name after $`);return{value:{variable:l[0]},next:r+1+l[0].length}}if(n==='"'){let l=k(e,r),d=e.slice(r,l);return{value:{literal:d.startsWith('"""')?d.slice(3,-3).trim():Re(d,t)},next:l}}if(n==="["||n==="{")throw new u(`@${t}: a tag variable must be a scalar, not a list or object`);let o=/^[^\s,)]+/.exec(e.slice(r));if(o===null)throw new u(`@${t}: expected a value`);let a=o[0],i=r+a.length;if(a==="true"||a==="false")return{value:{literal:a==="true"},next:i};if(a==="null")return{value:{literal:null},next:i};let s=Number(a);return{value:{literal:Number.isNaN(s)?a:s},next:i}}function Ce(e){let t={tags:[],invalidates:[]},r="",n=0,o=0;for(;n<e.length;){let a=De(e,n);if(a!==null){n=a;continue}let i=ve.exec(e.slice(n));if(i===null){n++;continue}let s=Oe(e,n,i,t),l=n;for(;l>o&&/\s/.test(e[l-1]);)l--;r+=e.slice(o,l),o=s,n=s}return{...t,stripped:r+e.slice(o)}}function De(e,t){let r=e[t];if(r==='"')return k(e,t);if(r==="#"){let n=e.indexOf(`
|
|
2
|
+
`,t);return n===-1?e.length:n}return r==="@"?null:t+1}function Oe(e,t,r,n){let o=r[1],a=t+r[0].length,i="",s=a;for(;s<e.length&&/\s/.test(e[s]);)s++;if(e[s]==="("){let p=we(e,s);i=e.slice(s+1,p-1),a=p}let l=Se(i,o),d=l.name;if(d===void 0||!("literal"in d)||typeof d.literal!="string")throw new u(`@${o} needs a literal name, as in @${o}(name: "user", id: $id)`);return delete l.name,(o==="tag"?n.tags:n.invalidates).push({name:d.literal,vars:l}),a}function Pe(e){let{tags:t,invalidates:r,stripped:n}=Ce(e),o=xe.exec(n.replace(/#[^\n]*/g,""));return{source:n,operation:o?.[2]??"",kind:o?.[1]??"query",tags:t,invalidates:r}}function Le(e,t){return e.map(r=>{let n={};for(let[o,a]of Object.entries(r.vars)){if("literal"in a){n[o]=a.literal;continue}let i=t[a.variable];i!=null&&(n[o]=typeof i=="object"?JSON.stringify(i):i)}return v(r.name,n)})}import{untrack as F}from"@firsthandjs/core";function qe(e,t,r){let n=/^[a-z]+:\/\//i.test(t)?t:`${e.baseUrl??""}${t}`,{json:o,cacheKey:a,...i}=r,s={...e.init,...i},l=new Headers(typeof e.headers=="function"?F(e.headers):e.headers);for(let[d,p]of new Headers(r.headers??{}))l.set(d,p);return o!==void 0&&(s.body=JSON.stringify(o),l.has("content-type")||l.set("content-type","application/json")),s.headers=l,[n,s]}async function V(e,t,r,n){let a=await(e.fetch??globalThis.fetch)(t,{...r,signal:n.signal}),i=await a.text(),s=i===""?void 0:JSON.parse(i);if(!a.ok)throw new T(a.status,t,s);return s}function Ae(e,t,r,n){if(t.cacheKey===!1)return;let o=(n.method??"GET").toUpperCase(),a=typeof t.cacheKey=="string"?t.cacheKey:o==="GET"||o==="HEAD"?`${o} ${r}`:void 0;return a===void 0?void 0:`${e.scope===void 0?n.headers.get("authorization")??"":F(e.scope)}\0${a}`}function j(e={}){let t=e.cache===void 0||e.cache===!1?void 0:"read"in e.cache?e.cache:R(e.cache),r={cache:t,request:(n,o={})=>async a=>{let[i,s]=qe(e,n,o),l=Ae(e,o,i,s);return t===void 0||l===void 0||a.mutating===!0?await V(e,i,s,a):await t.read(l,d=>V(e,i,s,d))(a)},get:(n,o={})=>r.request(n,o),post:(n,o={})=>r.request(n,{method:"POST",...o}),put:(n,o={})=>r.request(n,{method:"PUT",...o}),patch:(n,o={})=>r.request(n,{method:"PATCH",...o}),remove:(n,o={})=>r.request(n,{method:"DELETE",...o}),with:n=>j({...e,...n,cache:n.cache??t??!1})};return r}export{q as DataContext,u as FirsthandDirectiveError,T as FirsthandHttpError,c as anyTagMatches,R as createCacheClient,O as createData,j as createFetchClient,ye as createMemoryStorage,te as fromObservable,re as fromPromise,Pe as parseGraphQL,Le as resolveTags,Te as serialize,w as stableKey,v as tag,C as tagMatches,se as useAction,f as useData,B as useInvalidate,A as useResource};
|
package/dist/resource.d.ts
CHANGED
|
@@ -17,26 +17,6 @@ export type ResourceOptions = {
|
|
|
17
17
|
readonly persist?: string;
|
|
18
18
|
};
|
|
19
19
|
export declare function useResource<T>(load: (context: LoadContext) => Promise<T>, options?: ResourceOptions): Resource<T>;
|
|
20
|
-
export type Action<I, R> = {
|
|
21
|
-
readonly data: Resource<R>['data'];
|
|
22
|
-
readonly error: Resource<R>['error'];
|
|
23
|
-
readonly status: Resource<R>['status'];
|
|
24
|
-
readonly running: Resource<R>['loading'];
|
|
25
|
-
/** Runs it. Never rejects: failure is reported through `error`. */
|
|
26
|
-
run(input: I): Promise<R | undefined>;
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Changes something, and says what it changed.
|
|
30
|
-
*
|
|
31
|
-
* ```tsx
|
|
32
|
-
* const rename = useAction(async (input: Rename, { signal, invalidates }) => {
|
|
33
|
-
* const changed = await patch(input, signal);
|
|
34
|
-
* invalidates(...changed.tags); // the server knows which user that was
|
|
35
|
-
* return changed.user;
|
|
36
|
-
* });
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export declare function useAction<I, R>(run: (input: I, context: ActionContext) => Promise<R>): Action<I, R>;
|
|
40
20
|
export type ObservableLike<T> = {
|
|
41
21
|
subscribe(observer: {
|
|
42
22
|
next?: (value: T) => void;
|
package/dist/resource.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAKL,KAAK,aAAa,EAElB,KAAK,SAAS,EAEd,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,MAAM,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAGpD,eAAO,MAAM,WAAW,gDAA6B,CAAC;AAEtD,wBAAgB,OAAO,IAAI,SAAS,CAEnC;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAmCF,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAAC,CAAC,CAAC,CAoBb;AAgOD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;IAC9B,SAAS,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAClC,GAAG;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,aAAkB,GAC1B,QAAQ,CAAC,CAAC,CAAC,CAoCb;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAErE;AAQD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC"}
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/vite.dev.js
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
|
|
5
|
-
// packages/data/src/
|
|
6
|
-
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
7
|
-
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
8
|
-
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
5
|
+
// packages/data/src/errors.ts
|
|
9
6
|
var FirsthandDirectiveError = class extends Error {
|
|
10
7
|
constructor(message) {
|
|
11
8
|
super(message);
|
|
12
9
|
this.name = "FirsthandDirectiveError";
|
|
13
10
|
}
|
|
14
11
|
};
|
|
12
|
+
|
|
13
|
+
// packages/data/src/document.ts
|
|
14
|
+
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
15
|
+
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
16
|
+
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
15
17
|
function endOfString(source, start) {
|
|
16
18
|
if (source.startsWith('"""', start)) {
|
|
17
19
|
const close = source.indexOf('"""', start + 3);
|
|
@@ -117,24 +119,14 @@ function readValue(raw, directive, at) {
|
|
|
117
119
|
return { value: { literal: Number.isNaN(asNumber) ? text : asNumber }, next };
|
|
118
120
|
}
|
|
119
121
|
function scan(source) {
|
|
120
|
-
const
|
|
121
|
-
const invalidates = [];
|
|
122
|
+
const into = { tags: [], invalidates: [] };
|
|
122
123
|
let stripped = "";
|
|
123
124
|
let at = 0;
|
|
124
125
|
let kept = 0;
|
|
125
126
|
while (at < source.length) {
|
|
126
|
-
const
|
|
127
|
-
if (
|
|
128
|
-
at =
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (character === "#") {
|
|
132
|
-
const newline = source.indexOf("\n", at);
|
|
133
|
-
at = newline === -1 ? source.length : newline;
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
if (character !== "@") {
|
|
137
|
-
at++;
|
|
127
|
+
const skipped = skipPast(source, at);
|
|
128
|
+
if (skipped !== null) {
|
|
129
|
+
at = skipped;
|
|
138
130
|
continue;
|
|
139
131
|
}
|
|
140
132
|
const directive = DIRECTIVE.exec(source.slice(at));
|
|
@@ -142,26 +134,7 @@ function scan(source) {
|
|
|
142
134
|
at++;
|
|
143
135
|
continue;
|
|
144
136
|
}
|
|
145
|
-
|
|
146
|
-
let args = "";
|
|
147
|
-
let probe = end;
|
|
148
|
-
while (probe < source.length && /\s/.test(source[probe])) {
|
|
149
|
-
probe++;
|
|
150
|
-
}
|
|
151
|
-
if (source[probe] === "(") {
|
|
152
|
-
const close = endOfArguments(source, probe);
|
|
153
|
-
args = source.slice(probe + 1, close - 1);
|
|
154
|
-
end = close;
|
|
155
|
-
}
|
|
156
|
-
const vars = parseArguments(args, directive[1]);
|
|
157
|
-
const named = vars["name"];
|
|
158
|
-
if (named === void 0 || !("literal" in named) || typeof named.literal !== "string") {
|
|
159
|
-
throw new FirsthandDirectiveError(
|
|
160
|
-
`@${directive[1]} needs a literal name, as in @${directive[1]}(name: "user", id: $id)`
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
delete vars["name"];
|
|
164
|
-
(directive[1] === "tag" ? tags : invalidates).push({ name: named.literal, vars });
|
|
137
|
+
const end = takeDirective(source, at, directive, into);
|
|
165
138
|
let from = at;
|
|
166
139
|
while (from > kept && /\s/.test(source[from - 1])) {
|
|
167
140
|
from--;
|
|
@@ -170,7 +143,42 @@ function scan(source) {
|
|
|
170
143
|
kept = end;
|
|
171
144
|
at = end;
|
|
172
145
|
}
|
|
173
|
-
return {
|
|
146
|
+
return { ...into, stripped: stripped + source.slice(kept) };
|
|
147
|
+
}
|
|
148
|
+
function skipPast(source, at) {
|
|
149
|
+
const character = source[at];
|
|
150
|
+
if (character === '"') {
|
|
151
|
+
return endOfString(source, at);
|
|
152
|
+
}
|
|
153
|
+
if (character === "#") {
|
|
154
|
+
const newline = source.indexOf("\n", at);
|
|
155
|
+
return newline === -1 ? source.length : newline;
|
|
156
|
+
}
|
|
157
|
+
return character === "@" ? null : at + 1;
|
|
158
|
+
}
|
|
159
|
+
function takeDirective(source, at, directive, into) {
|
|
160
|
+
const kind = directive[1];
|
|
161
|
+
let end = at + directive[0].length;
|
|
162
|
+
let args = "";
|
|
163
|
+
let probe = end;
|
|
164
|
+
while (probe < source.length && /\s/.test(source[probe])) {
|
|
165
|
+
probe++;
|
|
166
|
+
}
|
|
167
|
+
if (source[probe] === "(") {
|
|
168
|
+
const close = endOfArguments(source, probe);
|
|
169
|
+
args = source.slice(probe + 1, close - 1);
|
|
170
|
+
end = close;
|
|
171
|
+
}
|
|
172
|
+
const vars = parseArguments(args, kind);
|
|
173
|
+
const named = vars["name"];
|
|
174
|
+
if (named === void 0 || !("literal" in named) || typeof named.literal !== "string") {
|
|
175
|
+
throw new FirsthandDirectiveError(
|
|
176
|
+
`@${kind} needs a literal name, as in @${kind}(name: "user", id: $id)`
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
delete vars["name"];
|
|
180
|
+
(kind === "tag" ? into.tags : into.invalidates).push({ name: named.literal, vars });
|
|
181
|
+
return end;
|
|
174
182
|
}
|
|
175
183
|
function parseGraphQL(source) {
|
|
176
184
|
const { tags, invalidates, stripped } = scan(source);
|
package/dist/vite.js
CHANGED
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
4
|
|
|
5
|
-
// packages/data/src/
|
|
6
|
-
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
7
|
-
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
8
|
-
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
5
|
+
// packages/data/src/errors.ts
|
|
9
6
|
var FirsthandDirectiveError = class extends Error {
|
|
10
7
|
constructor(message) {
|
|
11
8
|
super(message);
|
|
12
9
|
this.name = "FirsthandDirectiveError";
|
|
13
10
|
}
|
|
14
11
|
};
|
|
12
|
+
|
|
13
|
+
// packages/data/src/document.ts
|
|
14
|
+
var DIRECTIVE = /^@(tag|invalidates)\b/;
|
|
15
|
+
var OPERATION = /\b(query|mutation|subscription)\b[^\S\n]*([A-Za-z_]\w*)?/;
|
|
16
|
+
var NAME = /^[_A-Za-z][_0-9A-Za-z]*/;
|
|
15
17
|
function endOfString(source, start) {
|
|
16
18
|
if (source.startsWith('"""', start)) {
|
|
17
19
|
const close = source.indexOf('"""', start + 3);
|
|
@@ -117,24 +119,14 @@ function readValue(raw, directive, at) {
|
|
|
117
119
|
return { value: { literal: Number.isNaN(asNumber) ? text : asNumber }, next };
|
|
118
120
|
}
|
|
119
121
|
function scan(source) {
|
|
120
|
-
const
|
|
121
|
-
const invalidates = [];
|
|
122
|
+
const into = { tags: [], invalidates: [] };
|
|
122
123
|
let stripped = "";
|
|
123
124
|
let at = 0;
|
|
124
125
|
let kept = 0;
|
|
125
126
|
while (at < source.length) {
|
|
126
|
-
const
|
|
127
|
-
if (
|
|
128
|
-
at =
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
if (character === "#") {
|
|
132
|
-
const newline = source.indexOf("\n", at);
|
|
133
|
-
at = newline === -1 ? source.length : newline;
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
if (character !== "@") {
|
|
137
|
-
at++;
|
|
127
|
+
const skipped = skipPast(source, at);
|
|
128
|
+
if (skipped !== null) {
|
|
129
|
+
at = skipped;
|
|
138
130
|
continue;
|
|
139
131
|
}
|
|
140
132
|
const directive = DIRECTIVE.exec(source.slice(at));
|
|
@@ -142,26 +134,7 @@ function scan(source) {
|
|
|
142
134
|
at++;
|
|
143
135
|
continue;
|
|
144
136
|
}
|
|
145
|
-
|
|
146
|
-
let args = "";
|
|
147
|
-
let probe = end;
|
|
148
|
-
while (probe < source.length && /\s/.test(source[probe])) {
|
|
149
|
-
probe++;
|
|
150
|
-
}
|
|
151
|
-
if (source[probe] === "(") {
|
|
152
|
-
const close = endOfArguments(source, probe);
|
|
153
|
-
args = source.slice(probe + 1, close - 1);
|
|
154
|
-
end = close;
|
|
155
|
-
}
|
|
156
|
-
const vars = parseArguments(args, directive[1]);
|
|
157
|
-
const named = vars["name"];
|
|
158
|
-
if (named === void 0 || !("literal" in named) || typeof named.literal !== "string") {
|
|
159
|
-
throw new FirsthandDirectiveError(
|
|
160
|
-
`@${directive[1]} needs a literal name, as in @${directive[1]}(name: "user", id: $id)`
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
delete vars["name"];
|
|
164
|
-
(directive[1] === "tag" ? tags : invalidates).push({ name: named.literal, vars });
|
|
137
|
+
const end = takeDirective(source, at, directive, into);
|
|
165
138
|
let from = at;
|
|
166
139
|
while (from > kept && /\s/.test(source[from - 1])) {
|
|
167
140
|
from--;
|
|
@@ -170,7 +143,42 @@ function scan(source) {
|
|
|
170
143
|
kept = end;
|
|
171
144
|
at = end;
|
|
172
145
|
}
|
|
173
|
-
return {
|
|
146
|
+
return { ...into, stripped: stripped + source.slice(kept) };
|
|
147
|
+
}
|
|
148
|
+
function skipPast(source, at) {
|
|
149
|
+
const character = source[at];
|
|
150
|
+
if (character === '"') {
|
|
151
|
+
return endOfString(source, at);
|
|
152
|
+
}
|
|
153
|
+
if (character === "#") {
|
|
154
|
+
const newline = source.indexOf("\n", at);
|
|
155
|
+
return newline === -1 ? source.length : newline;
|
|
156
|
+
}
|
|
157
|
+
return character === "@" ? null : at + 1;
|
|
158
|
+
}
|
|
159
|
+
function takeDirective(source, at, directive, into) {
|
|
160
|
+
const kind = directive[1];
|
|
161
|
+
let end = at + directive[0].length;
|
|
162
|
+
let args = "";
|
|
163
|
+
let probe = end;
|
|
164
|
+
while (probe < source.length && /\s/.test(source[probe])) {
|
|
165
|
+
probe++;
|
|
166
|
+
}
|
|
167
|
+
if (source[probe] === "(") {
|
|
168
|
+
const close = endOfArguments(source, probe);
|
|
169
|
+
args = source.slice(probe + 1, close - 1);
|
|
170
|
+
end = close;
|
|
171
|
+
}
|
|
172
|
+
const vars = parseArguments(args, kind);
|
|
173
|
+
const named = vars["name"];
|
|
174
|
+
if (named === void 0 || !("literal" in named) || typeof named.literal !== "string") {
|
|
175
|
+
throw new FirsthandDirectiveError(
|
|
176
|
+
`@${kind} needs a literal name, as in @${kind}(name: "user", id: $id)`
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
delete vars["name"];
|
|
180
|
+
(kind === "tag" ? into.tags : into.invalidates).push({ name: named.literal, vars });
|
|
181
|
+
return end;
|
|
174
182
|
}
|
|
175
183
|
function parseGraphQL(source) {
|
|
176
184
|
const { tags, invalidates, stripped } = scan(source);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@firsthandjs/data",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Resources, actions and invalidation for Firsthand: reactive async state, with the cache one layer down.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"LICENSE"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@firsthandjs/core": "0.
|
|
32
|
-
"@firsthandjs/dom": "0.
|
|
31
|
+
"@firsthandjs/core": "0.10.1",
|
|
32
|
+
"@firsthandjs/dom": "0.10.1"
|
|
33
33
|
},
|
|
34
34
|
"engines": {
|
|
35
35
|
"node": ">=20.11.0"
|