@symbo.ls/fetch 3.14.664 → 3.14.666

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/CHANGELOG.md CHANGED
@@ -1,5 +1,34 @@
1
1
  # @symbo.ls/fetch
2
2
 
3
+ ## 3.14.666
4
+
5
+ ### Patch Changes
6
+
7
+ - Cross-tenant isolation for server renders, and the wider CLI production gate.
8
+
9
+ - fetch: a server render context (`isolateFetchCache`, set by brender) has its own query store — cache, requests in flight, invalidations and mounted queries — so two renders of different projects in one process never share rows, in sequence or at the same time; a server render binds no browser-only refetch (no focus / online listeners, no `refetchInterval` timer), so no request of one page lands in another page's seed and the process exits when the work is done.
10
+ - brender: renders that start together share one framework bundle; every render owns its `location`, Web Storage and `history`.
11
+ - cli: destructive platform writes (project delete, transfer, members, invites, library changes, version writes) print the target and need a typed "production" or `--yes` for production; `project create` is not gated.
12
+
13
+ ## 3.14.665
14
+
15
+ ### Patch Changes
16
+
17
+ - xma.info report round (FW-XMA-EXCEPTIONS-UPSTREAM-1), its /simplify pass and the follow-ups.
18
+
19
+ - element: optional features (view events, `always` handler chains, plain-row diff, hydration, yielding mount) are feature slots — `create.js` installs all of them, `src/lean.js` none (the smbls embed); one chunked mount driver and one meter per task; the chunked first render costs about a third of what it did (a resumed row goes after the previous row, one `__ref` shape, the budget is read once); `whenConnected`; `onWindowLoad` after load reaches an element built off-document; a null/false row item under `childExtends` builds nothing; building an n-row list no longer scans the parent's keys per row.
20
+ - smbls: the embed is back under its 72 KiB cap and the iife is 2.6 % smaller (terser renames locals after esbuild in the two classic-script builds; maps chained); kits stay lazy in `smbls/core`, fetch is one chunk; live sync loads only when `wantsLiveSync`; a URL-loaded dependency registers in parcel builds.
21
+ - router: the newest navigation wins over one waiting on an async guard; no lazy chunk rides along a resumed route.
22
+ - default-config: accessible Dropdown writes its attributes straight to the nodes, one tab stop per list, an `active` write re-runs only the rows that change, a key-opened menu focuses its item during the reveal; Dialog and Icon clean-ups.
23
+ - styling (scratch, css, css-in-props): one compound-value resolver; CSS colour functions (`oklch()`, `color()`, `color-mix()`, `light-dark()`, `lab()`, `lch()`, `hwb()`) pass through compound values; border props read the scheme only in literal mode.
24
+ - fetch / brender: every server render starts from an empty query cache (seeds carry every request a page makes); the local adapter stays lazy; shared route loop for `smbls build` and `smbls brender`, `smbls brender --strict`.
25
+ - cli: every command that writes to the platform prints its target and needs a typed "production" or `--yes` for production; `smbls deploy --save` saves the provider, `-y/--yes` is consent; `deploy --dry-run` no longer pushes.
26
+ - frank-audit: FA205 reports only factory calls that run at module load.
27
+
28
+ - Updated dependencies
29
+ - @symbo.ls/signal@3.14.789
30
+ - @symbo.ls/utils@3.14.787
31
+
3
32
  ## 3.14.664
4
33
 
5
34
  ### Patch Changes
package/README.md CHANGED
@@ -30,6 +30,8 @@ fetch: { adapter: 'sdk', sdk: getSDK() }
30
30
 
31
31
  > `db` is **not** a config key — it's the local name for the resolved adapter you get from `await this.getDB()` (`db.select(...)`, `db.insert(...)`, …).
32
32
 
33
+ The REST adapter ships inside the plugin. The local adapter is a file of its own: an app loads it only when its config names `adapter: 'local'`.
34
+
33
35
  ## Declarative `fetch`
34
36
 
35
37
  ```js
@@ -239,6 +241,8 @@ Each tick sends a request, also while the cached entry is still fresh.
239
241
  { fetch: { from: 'alerts', refetchInterval: '1m', refetchIntervalInBackground: true } }
240
242
  ```
241
243
 
244
+ Focus, reconnect and interval refetches belong to a live page. A server render (brender) binds none of them: its page is markup once the render ends ([one cache per render](#server-seeded-answers-brender)).
245
+
242
246
  ## Placeholder data
243
247
 
244
248
  Show temporary data immediately while the real query loads:
@@ -560,6 +564,8 @@ Global cache management, importable anywhere:
560
564
  import { queryClient } from '@symbo.ls/fetch'
561
565
  ```
562
566
 
567
+ It manages the page's cache. A server render has a cache of its own ([one per render](#server-seeded-answers-brender)): its elements reach it through `el.call`, and `prefetchQuery` takes its context.
568
+
563
569
  Project code (components, pages, functions) cannot import it — frank serializes an import of `@symbo.ls/fetch` to a stub. It calls the same controls through `el.call` instead (see [From project code](#from-project-code-elcall)).
564
570
 
565
571
  ### Cache keys
@@ -627,7 +633,7 @@ await queryClient.prefetchQuery({
627
633
  }, context)
628
634
  ```
629
635
 
630
- The prefetched entry has the key an element of that context builds for the same query — with its language and tenant scope from `context.state.root` — and the request carries the same `Accept-Language`, so a later mount reads it without a request.
636
+ The prefetched entry has the key an element of that context builds for the same query — with its language and tenant scope from `context.state.root` — and the request carries the same `Accept-Language`, so a later mount reads it without a request. It lands in that context's cache: a server render's own (`isolateFetchCache`), else the page's.
631
637
 
632
638
  ## From project code (`el.call`)
633
639
 
@@ -642,6 +648,8 @@ When `fetch` is configured, smbls registers the query client's controls as proje
642
648
 
643
649
  `getQueryData` / `setQueryData` take a key, or a fetch config — `{ from, method, params }` — whose key is built the way the calling element would build it (params resolved with that element, its language and tenant scope).
644
650
 
651
+ Each works on the calling element's cache: the page's in a browser, its own render's in a server render (`isolateFetchCache`) — what a render's project code writes, removes or invalidates stays in that render.
652
+
645
653
  A write made through `getDB()` does not know which queries it changed — invalidate them after it:
646
654
 
647
655
  ```js
@@ -739,7 +747,22 @@ A request is the adapter call it stands for: `{ method: 'select' | 'rpc', from,
739
747
 
740
748
  Early GETs skip the HTTP cache (`cache: 'no-store'`) unless the adapter's `fetchOptions.cache` says otherwise; they copy `credentials`, `mode`, `redirect`, `referrerPolicy` and `priority` from `fetchOptions`.
741
749
 
742
- **Build.** `smbls build` (and `smbls deploy` to Cloudflare or Netlify) writes the script next to the built page as `early.<hash>.js` and references it first thing in `<head>` — `<script async data-symbols-early src="…">`. A file, not an inline script, so a Content-Security-Policy without `'unsafe-inline'` allows it. Without `fetch.early` the build output is unchanged. Other build paths can generate the script with `createEarlyScript({ fetch, polyglot, state })` from `@symbo.ls/fetch/early-script`. The script never runs on the server (brender), and an adapter without `early` never looks for its answers.
750
+ **Build.** `smbls build` (and `smbls deploy` to Cloudflare or Netlify) writes the script next to the built page as `early.<hash>.js` and references it first thing in `<head>` — `<script async data-symbols-early src="…">`. A file, not an inline script, so a Content-Security-Policy without `'unsafe-inline'` allows it. The optimized page counts as written: unquoted attributes (`<script type=module src=/index.1a2b.js>`) and a dropped optional `<head>` tag (the script then opens the implied head, right after `<html>`). When `fetch.early` is set and nothing could be added — no app script on the page, or no request the script can make (it needs the REST adapter, `url`, and `always` or `routes`) — the build says why (`Early data requests not added: …`) and still succeeds. Without `fetch.early` the build output is unchanged. Other build paths can generate the script with `createEarlyScript({ fetch, polyglot, state })` from `@symbo.ls/fetch/early-script`. The script never runs on the server (brender), and an adapter without `early` never looks for its answers.
751
+
752
+ ## Server-seeded answers (brender)
753
+
754
+ A page pre-rendered by `@symbo.ls/brender` carries the answers its render got, so the client does not ask for them again: a JSON data block after the markup (no Content-Security-Policy blocks one).
755
+
756
+ ```html
757
+ <script type="application/json" data-fetch-seed>[{"k":"<earlyKey>","s":200,"t":"application/json","b":"[…]"}]</script>
758
+ ```
759
+
760
+ - **Recorded on the server:** a GET whose only headers are `Accept` / `Accept-Language` — an anonymous read; with `reads` its configured key travels in the query string, so a keyed backend's reads (Supabase) count, and read-only RPCs (`reads.rpc: 'get'`, `read: true`) too — with an ok JSON or text answer. Never a POST, a call with `Authorization` or another header.
761
+ - **Read on the client:** the REST adapter reads the block when it opens (the block goes once read). A call takes a seeded answer when it sends exactly the recorded request: the same URL (query included) and `Accept-Language`, no other header. Each answer is taken once, within 30 s, and read without a `Response` — its data lands in the task the app booted in. Without `fetch.early` too.
762
+ - **Build side:** `createEarlySeedBlock(entries)` (`entries`: `[{ url, lang, status, type, body }]`); `createEarlySeedScript(entries)` is the older inline form.
763
+ - **One query cache per render:** a context with `isolateFetchCache: true` (brender sets it on every render) has a cache of its own — its entries, its requests in flight, its invalidations and its mounted queries — made at its first query and dropped with the context. A render starts empty and makes every request its markup depends on itself, so its seed carries every answer it shows, even when an earlier page read the same key. Renders in one process — one after another or at once, of one project or of several — never share a row, a request in flight or an invalidation, and a request that outlives its render never reaches another one. `queryClient` stays the page's cache; a render's own is reached through its elements (`el.call('invalidateQueries', …)`, `getQueryData`, …) and `prefetchQuery(config, context)`. Such a context also binds no window focus, reconnect or `refetchInterval` refetch: once its markup is taken, a render's queries leave no listener, no timer and no request behind. A browser context never sets it; the cache works as described above.
764
+
765
+ `requestsInFlight()` and `whenRequestsIdle()` (from `@symbo.ls/fetch`) count the REST adapter's requests from the call until the body is read — `smbls` holds the hydration window over a pre-rendered page open until the first view's requests are done.
743
766
 
744
767
  ## Auth guard
745
768
 
package/adapters/rest.js CHANGED
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
3
  import { openEarly, takeEarly, earlyKey, isScalarParams, withReads, queryHeaderEntries } from '../early.js'
4
+ import { requestStarted, requestFinished } from '../inflight.js'
4
5
 
5
6
  // `buildUrl` and `selectQuery` are the address of a GET. The pre-boot script
6
7
  // of `fetch.early` (earlyScript.js) embeds both BY SOURCE, so an early request
@@ -91,16 +92,52 @@ const readErrorBody = async (res) => {
91
92
  // read as a success.
92
93
  const errorMessage = (body, res) => body?.message || body?.error || res.statusText || `HTTP ${res.status}`
93
94
 
95
+ // A server-seeded answer (early.js takeEarly) read without a Response — the
96
+ // readers that need nothing but the body text. null for any other type (the
97
+ // caller builds a Response from it); false for a JSON body that does not
98
+ // parse (the caller asks the network instead).
99
+ const readSeeded = (answer, type) => {
100
+ const body = answer.body
101
+ const json = type === 'json' || (type === 'auto' && /json/i.test(answer.type))
102
+ if (!json && type !== 'auto' && type !== 'text') return null
103
+ let data
104
+ try {
105
+ data = json ? (body ? JSON.parse(body) : null) : body
106
+ } catch (e) {
107
+ return false
108
+ }
109
+ return { data, error: null, status: answer.status }
110
+ }
111
+
94
112
  const request = async (url, options, responseType, early) => {
95
113
  const type = responseType == null ? 'auto' : responseType
96
114
  if (!RESPONSE_TYPES.includes(type)) {
97
115
  throw new TypeError(`@symbo.ls/fetch rest: unknown responseType "${type}" — use one of: ${RESPONSE_TYPES.join(', ')}`)
98
116
  }
117
+ // Counted until the body is read (../inflight.js): smbls's hydration window
118
+ // waits for the first view's requests.
119
+ requestStarted()
120
+ try {
121
+ return await send(url, options, type, early)
122
+ } finally {
123
+ requestFinished()
124
+ }
125
+ }
99
126
 
100
- // `early` — the pre-boot script's answer to this very request (fetch.early),
101
- // read exactly like the adapter's own; when that GET failed or was refused,
102
- // the request is sent as usual.
103
- const res = (early && await early) || await globalThis.fetch(url, options)
127
+ const send = async (url, options, type, early) => {
128
+ // `early` — an answer to this very request that is already here: the
129
+ // pre-boot script's (fetch.early) or the server's (a brender seed), read
130
+ // exactly like the adapter's own; when that GET failed or was refused, the
131
+ // request is sent as usual.
132
+ let answer = early ? await early : null
133
+ if (answer && answer.seeded === true) {
134
+ const read = readSeeded(answer, type)
135
+ if (read) return read
136
+ answer = read === false
137
+ ? null
138
+ : new Response(answer.body, { status: answer.status, headers: { 'content-type': answer.type } })
139
+ }
140
+ const res = answer || await globalThis.fetch(url, options)
104
141
 
105
142
  if (type === 'auto') {
106
143
  const data = await readAuto(res)
@@ -278,6 +315,30 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
278
315
  }
279
316
  }
280
317
 
318
+ // The server's recorded answer to this call (a brender seed), if one waits
319
+ // for the request exactly as it goes out: its URL — an anonymous read's
320
+ // key moved into the query included (`reads.query`) — and language, and no
321
+ // header beyond Accept-Language and Accept, which is all the server records
322
+ // (an anonymous GET). Looked up before the pre-boot script's answer: it is
323
+ // already here, and it is what the page on screen was rendered from. The
324
+ // seed recorded such a read under its sent URL, and `adopt` keys by the
325
+ // address without the moved key and wants it in `carried`, so a Supabase
326
+ // project's reads were never adopted (XMA report, brender items 3 and 15).
327
+ const adoptSeeded = (sentUrl, headers) => {
328
+ if (!early || !early.seeded) return null
329
+ let lang = ''
330
+ for (const name in headers) {
331
+ const lower = name.toLowerCase()
332
+ if (lower === 'accept-language') lang = String(headers[name])
333
+ else if (lower !== 'accept') return null
334
+ }
335
+ try {
336
+ return takeEarly(earlyKey(sentUrl, lang), early.maxAge)
337
+ } catch (e) {
338
+ return null
339
+ }
340
+ }
341
+
281
342
  // Precedence, lowest first: the configured headers, the adapter's token, the
282
343
  // body's Content-Type, then the call's own `headers` — so one call can send
283
344
  // its own Bearer token (a per-user token) or its own Content-Type.
@@ -359,10 +420,11 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
359
420
  const anonymous = anonymousRead(merged)
360
421
  if (anonymous) {
361
422
  const options = getFetchOptions({ headers: anonymous.headers })
362
- return request(withQuery(url, anonymous.query), options, responseType, adopt(() => url, anonymous.adoptHeaders))
423
+ const sent = withQuery(url, anonymous.query)
424
+ return request(sent, options, responseType, adoptSeeded(sent, anonymous.headers) || adopt(() => url, anonymous.adoptHeaders))
363
425
  }
364
426
  const options = getFetchOptions({ headers: merged })
365
- return request(url, options, responseType, adopt(() => url, options.headers))
427
+ return request(url, options, responseType, adoptSeeded(url, options.headers) || adopt(() => url, options.headers))
366
428
  },
367
429
 
368
430
  // An RPC is a POST. With `reads.rpc: 'get'` an anonymous call marked
@@ -385,7 +447,8 @@ export const restAdapter = (baseUrl, defaultHeaders = {}, authConfig, defaultFet
385
447
  if (!url) return post(early && early.rpc && scalar ? adopt(address, merged) : null)
386
448
 
387
449
  const options = getFetchOptions({ method: 'GET', headers: anonymous.headers })
388
- const result = await request(withQuery(url, anonymous.query), options, responseType, adopt(() => url, anonymous.adoptHeaders))
450
+ const sent = withQuery(url, anonymous.query)
451
+ const result = await request(sent, options, responseType, adoptSeeded(sent, anonymous.headers) || adopt(() => url, anonymous.adoptHeaders))
389
452
  // 405: the backend serves this function only as a POST (PostgREST runs
390
453
  // a GET read-only and refuses a VOLATILE function that writes with 405
391
454
  // before anything was written) — the call's own POST decides.
@@ -1 +1 @@
1
- "use strict";var B=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var M=(t,e)=>{for(var r in e)B(t,r,{get:e[r],enumerable:!0})},Q=(t,e,r,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of G(e))!z.call(t,s)&&s!==r&&B(t,s,{get:()=>e[s],enumerable:!(l=F(e,s))||l.enumerable});return t};var K=t=>Q(B({},"__esModule",{value:!0}),t);var ot={};M(ot,{buildUrl:()=>H,headerEntries:()=>Y,restAdapter:()=>D,selectQuery:()=>W,setup:()=>st,withQuery:()=>L});module.exports=K(ot);var f=require("../early.js");const H=(t,e,r)=>{const l=e&&!e.startsWith("/")?"/":"",s=new URL(`${t}${l}${e}`);if(r)for(const c in r){const o=r[c];o!=null&&s.searchParams.set(c,typeof o=="object"?JSON.stringify(o):o)}return s.toString()},W=({params:t,select:e,limit:r,offset:l,order:s,single:c})=>{const o={...t};return e&&(o.select=e),r&&(o.limit=r),l&&(o.offset=l),c&&(o.single=!0),s&&(typeof s=="string"?o.order=s:Array.isArray(s)?o.order=s.map(T=>`${T.by}:${T.asc===!1?"desc":"asc"}`).join(","):s.by&&(o.order=`${s.by}:${s.asc===!1?"desc":"asc"}`)),o},q=t=>Object.prototype.toString.call(t).slice(8,-1),J=["auto","json","text","blob","arrayBuffer","stream","response"],V={json:async t=>{const e=await t.text();return e?JSON.parse(e):null},text:t=>t.text(),blob:t=>t.blob(),arrayBuffer:t=>t.arrayBuffer(),stream:t=>t.body,response:t=>t},v=t=>{const e=t.headers.get("content-type");return e&&e.includes("json")?t.json():t.text()},X=async t=>{const e=await t.text(),r=t.headers.get("content-type");if(e&&r&&r.includes("json"))try{return JSON.parse(e)}catch{}return e},I=(t,e)=>t?.message||t?.error||e.statusText||`HTTP ${e.status}`,h=async(t,e,r,l)=>{const s=r??"auto";if(!J.includes(s))throw new TypeError(`@symbo.ls/fetch rest: unknown responseType "${s}" \u2014 use one of: ${J.join(", ")}`);const c=l&&await l||await globalThis.fetch(t,e);if(s==="auto"){const o=await v(c);return{data:o,error:c.ok?null:I(o,c),status:c.status}}if(!c.ok){const o=await X(s==="response"?c.clone():c);return{data:s==="response"?c:o,error:I(o,c),status:c.status}}return{data:await V[s](c),error:null,status:c.status}},Z=["FormData","Blob","File","URLSearchParams","ReadableStream","ArrayBuffer"],C=t=>t!==null&&typeof t=="object"&&(ArrayBuffer.isView(t)||Z.includes(q(t))),Y=t=>Array.isArray(t)?t:typeof t.entries=="function"?t.entries():Object.entries(t),N=(...t)=>{const e={},r=new Map;for(const l of t)if(l)for(const[s,c]of Y(l)){const o=s.toLowerCase();if(r.has(o)&&delete e[r.get(o)],c==null){r.delete(o);continue}r.set(o,s),e[s]=c}return e},tt={"Content-Type":"application/json"},et={"Content-Type":void 0},nt=t=>{if(!t||typeof t!="object")return null;const e={};for(const{header:r,param:l}of(0,f.queryHeaderEntries)(t.query))e[r]=l;return{params:e,rpc:t.rpc==="get"}},rt="content-type",L=(t,e)=>{const r=Object.keys(e);if(!r.length)return t;const l=new URL(t);for(const s of r)l.searchParams.set(s,e[s]);return l.toString()},st=async({url:t,headers:e,auth:r,fetchOptions:l,early:s,reads:c})=>{if(!t)throw new Error("@symbo.ls/fetch rest: url is required");return D(t,e,r,l,s,c)},D=(t,e={},r,l={},s,c)=>{let o=r?.token||null;const T=(0,f.openEarly)((0,f.withReads)(s,c),e),j=nt(c),_=n=>{if(!j)return null;const a={},u={},i={};for(const d in n){const p=d.toLowerCase();if(p==="authorization")return null;if(p===rt)continue;u[d]=n[d];const y=j.params[p];y?i[y]=n[d]:a[d]=n[d]}return{headers:a,adoptHeaders:u,query:i}},A=(n,a)=>{if(!T)return null;let u="";for(const i in a){const d=i.toLowerCase();if(d==="accept-language")u=String(a[i]);else if(T.carried[d]!==a[i])return null}try{return(0,f.takeEarly)((0,f.earlyKey)(n(),u),T.maxAge)}catch{return null}},R=()=>o?{Authorization:`Bearer ${o}`}:null,U=n=>N(e,R(),n),S=n=>({...l,...n}),P=(n,a,u)=>{if(!C(a))return S({method:n,headers:N(e,R(),tt,u),body:JSON.stringify(a)});const i={method:n,headers:N(e,R(),et,u),body:a};return q(a)==="ReadableStream"&&(i.duplex="half"),S(i)},$=(n,a)=>{const u=a||t;if(n&&(n.startsWith("http://")||n.startsWith("https://")))return n;const i=n&&!n.startsWith("/")?"/":"";return`${u}${i}${n||""}`};return{name:"rest",setToken:n=>{o=n},getSession:async()=>{if(!r?.sessionUrl)return o?{token:o}:null;const n=await h($(r.sessionUrl,r.baseUrl),S({headers:U()}));return n.error?null:n.data},signIn:async n=>{if(!r?.signInUrl)throw new Error("rest: auth.signInUrl not configured");const a=await h($(r.signInUrl,r.baseUrl),P("POST",n));return a.data?.token&&(o=a.data.token),a},signOut:async()=>(r?.signOutUrl&&await h($(r.signOutUrl,r.baseUrl),S({method:"POST",headers:U()})),o=null,{error:null}),select:({from:n,params:a,select:u,limit:i,offset:d,order:p,single:y,headers:w,baseUrl:g,responseType:m})=>{const b=H(g||t,n||"",W({params:a,select:u,limit:i,offset:d,order:p,single:y})),E=U(w),O=_(E);if(O){const k=S({headers:O.headers});return h(L(b,O.query),k,m,A(()=>b,O.adoptHeaders))}const x=S({headers:E});return h(b,x,m,A(()=>b,x.headers))},rpc:async({from:n,params:a,headers:u,baseUrl:i,responseType:d,read:p})=>{const y=(0,f.isScalarParams)(a),w=()=>H(i||t,`rpc/${n}`,a),g=k=>h($(`rpc/${n}`,i),P("POST",a,u),d,k),m=U(u),b=p===!0&&j&&j.rpc&&y?_(m):null;let E=null;if(b)try{E=w()}catch{E=null}if(!E)return g(T&&T.rpc&&y?A(w,m):null);const O=S({method:"GET",headers:b.headers}),x=await h(L(E,b.query),O,d,A(()=>E,b.adoptHeaders));return x.status===405?g(null):x},insert:({from:n,data:a,headers:u,baseUrl:i,responseType:d})=>h($(n,i),P("POST",a,u),d),update:({from:n,data:a,params:u,method:i,headers:d,baseUrl:p,responseType:y})=>{const w=u?.id||a?.id,g=w?`${n}/${w}`:n;return h($(g,p),P(i||"PATCH",a,d),y)},upsert:({from:n,data:a,params:u,method:i,headers:d,baseUrl:p,responseType:y})=>{const w=u?.id||a?.id,g=w?`${n}/${w}`:n;return h($(g,p),P(i||"PUT",a,d),y)},delete:({from:n,params:a,headers:u,baseUrl:i,responseType:d})=>{const p=a?.id,y=p?`${n}/${p}`:n;return h($(y,i),S({method:"DELETE",headers:U(u)}),d)}}};
1
+ "use strict";var H=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var V=(t,e)=>{for(var n in e)H(t,n,{get:e[n],enumerable:!0})},v=(t,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Q(e))!K.call(t,s)&&s!==n&&H(t,s,{get:()=>e[s],enumerable:!(l=M(e,s))||l.enumerable});return t};var X=t=>v(H({},"__esModule",{value:!0}),t);var it={};V(it,{buildUrl:()=>_,headerEntries:()=>G,restAdapter:()=>z,selectQuery:()=>D,setup:()=>ut,withQuery:()=>J});module.exports=X(it);var f=require("../early.js"),N=require("../inflight.js");const _=(t,e,n)=>{const l=e&&!e.startsWith("/")?"/":"",s=new URL(`${t}${l}${e}`);if(n)for(const u in n){const o=n[u];o!=null&&s.searchParams.set(u,typeof o=="object"?JSON.stringify(o):o)}return s.toString()},D=({params:t,select:e,limit:n,offset:l,order:s,single:u})=>{const o={...t};return e&&(o.select=e),n&&(o.limit=n),l&&(o.offset=l),u&&(o.single=!0),s&&(typeof s=="string"?o.order=s:Array.isArray(s)?o.order=s.map(h=>`${h.by}:${h.asc===!1?"desc":"asc"}`).join(","):s.by&&(o.order=`${s.by}:${s.asc===!1?"desc":"asc"}`)),o},I=t=>Object.prototype.toString.call(t).slice(8,-1),W=["auto","json","text","blob","arrayBuffer","stream","response"],Z={json:async t=>{const e=await t.text();return e?JSON.parse(e):null},text:t=>t.text(),blob:t=>t.blob(),arrayBuffer:t=>t.arrayBuffer(),stream:t=>t.body,response:t=>t},C=t=>{const e=t.headers.get("content-type");return e&&e.includes("json")?t.json():t.text()},tt=async t=>{const e=await t.text(),n=t.headers.get("content-type");if(e&&n&&n.includes("json"))try{return JSON.parse(e)}catch{}return e},Y=(t,e)=>t?.message||t?.error||e.statusText||`HTTP ${e.status}`,et=(t,e)=>{const n=t.body,l=e==="json"||e==="auto"&&/json/i.test(t.type);if(!l&&e!=="auto"&&e!=="text")return null;let s;try{s=l?n?JSON.parse(n):null:n}catch{return!1}return{data:s,error:null,status:t.status}},b=async(t,e,n,l)=>{const s=n??"auto";if(!W.includes(s))throw new TypeError(`@symbo.ls/fetch rest: unknown responseType "${s}" \u2014 use one of: ${W.join(", ")}`);(0,N.requestStarted)();try{return await nt(t,e,s,l)}finally{(0,N.requestFinished)()}},nt=async(t,e,n,l)=>{let s=l?await l:null;if(s&&s.seeded===!0){const o=et(s,n);if(o)return o;s=o===!1?null:new Response(s.body,{status:s.status,headers:{"content-type":s.type}})}const u=s||await globalThis.fetch(t,e);if(n==="auto"){const o=await C(u);return{data:o,error:u.ok?null:Y(o,u),status:u.status}}if(!u.ok){const o=await tt(n==="response"?u.clone():u);return{data:n==="response"?u:o,error:Y(o,u),status:u.status}}return{data:await Z[n](u),error:null,status:u.status}},rt=["FormData","Blob","File","URLSearchParams","ReadableStream","ArrayBuffer"],st=t=>t!==null&&typeof t=="object"&&(ArrayBuffer.isView(t)||rt.includes(I(t))),G=t=>Array.isArray(t)?t:typeof t.entries=="function"?t.entries():Object.entries(t),L=(...t)=>{const e={},n=new Map;for(const l of t)if(l)for(const[s,u]of G(l)){const o=s.toLowerCase();if(n.has(o)&&delete e[n.get(o)],u==null){n.delete(o);continue}n.set(o,s),e[s]=u}return e},ot={"Content-Type":"application/json"},at={"Content-Type":void 0},ct=t=>{if(!t||typeof t!="object")return null;const e={};for(const{header:n,param:l}of(0,f.queryHeaderEntries)(t.query))e[n]=l;return{params:e,rpc:t.rpc==="get"}},lt="content-type",J=(t,e)=>{const n=Object.keys(e);if(!n.length)return t;const l=new URL(t);for(const s of n)l.searchParams.set(s,e[s]);return l.toString()},ut=async({url:t,headers:e,auth:n,fetchOptions:l,early:s,reads:u})=>{if(!t)throw new Error("@symbo.ls/fetch rest: url is required");return z(t,e,n,l,s,u)},z=(t,e={},n,l={},s,u)=>{let o=n?.token||null;const h=(0,f.openEarly)((0,f.withReads)(s,u),e),A=ct(u),F=r=>{if(!A)return null;const a={},i={},c={};for(const d in r){const p=d.toLowerCase();if(p==="authorization")return null;if(p===lt)continue;i[d]=r[d];const y=A.params[p];y?c[y]=r[d]:a[d]=r[d]}return{headers:a,adoptHeaders:i,query:c}},k=(r,a)=>{if(!h)return null;let i="";for(const c in a){const d=c.toLowerCase();if(d==="accept-language")i=String(a[c]);else if(h.carried[d]!==a[c])return null}try{return(0,f.takeEarly)((0,f.earlyKey)(r(),i),h.maxAge)}catch{return null}},B=(r,a)=>{if(!h||!h.seeded)return null;let i="";for(const c in a){const d=c.toLowerCase();if(d==="accept-language")i=String(a[c]);else if(d!=="accept")return null}try{return(0,f.takeEarly)((0,f.earlyKey)(r,i),h.maxAge)}catch{return null}},q=()=>o?{Authorization:`Bearer ${o}`}:null,m=r=>L(e,q(),r),g=r=>({...l,...r}),P=(r,a,i)=>{if(!st(a))return g({method:r,headers:L(e,q(),ot,i),body:JSON.stringify(a)});const c={method:r,headers:L(e,q(),at,i),body:a};return I(a)==="ReadableStream"&&(c.duplex="half"),g(c)},T=(r,a)=>{const i=a||t;if(r&&(r.startsWith("http://")||r.startsWith("https://")))return r;const c=r&&!r.startsWith("/")?"/":"";return`${i}${c}${r||""}`};return{name:"rest",setToken:r=>{o=r},getSession:async()=>{if(!n?.sessionUrl)return o?{token:o}:null;const r=await b(T(n.sessionUrl,n.baseUrl),g({headers:m()}));return r.error?null:r.data},signIn:async r=>{if(!n?.signInUrl)throw new Error("rest: auth.signInUrl not configured");const a=await b(T(n.signInUrl,n.baseUrl),P("POST",r));return a.data?.token&&(o=a.data.token),a},signOut:async()=>(n?.signOutUrl&&await b(T(n.signOutUrl,n.baseUrl),g({method:"POST",headers:m()})),o=null,{error:null}),select:({from:r,params:a,select:i,limit:c,offset:d,order:p,single:y,headers:S,baseUrl:O,responseType:x})=>{const w=_(O||t,r||"",D({params:a,select:i,limit:c,offset:d,order:p,single:y})),$=m(S),E=F($);if(E){const R=g({headers:E.headers}),j=J(w,E.query);return b(j,R,x,B(j,E.headers)||k(()=>w,E.adoptHeaders))}const U=g({headers:$});return b(w,U,x,B(w,U.headers)||k(()=>w,U.headers))},rpc:async({from:r,params:a,headers:i,baseUrl:c,responseType:d,read:p})=>{const y=(0,f.isScalarParams)(a),S=()=>_(c||t,`rpc/${r}`,a),O=j=>b(T(`rpc/${r}`,c),P("POST",a,i),d,j),x=m(i),w=p===!0&&A&&A.rpc&&y?F(x):null;let $=null;if(w)try{$=S()}catch{$=null}if(!$)return O(h&&h.rpc&&y?k(S,x):null);const E=g({method:"GET",headers:w.headers}),U=J($,w.query),R=await b(U,E,d,B(U,w.headers)||k(()=>$,w.adoptHeaders));return R.status===405?O(null):R},insert:({from:r,data:a,headers:i,baseUrl:c,responseType:d})=>b(T(r,c),P("POST",a,i),d),update:({from:r,data:a,params:i,method:c,headers:d,baseUrl:p,responseType:y})=>{const S=i?.id||a?.id,O=S?`${r}/${S}`:r;return b(T(O,p),P(c||"PATCH",a,d),y)},upsert:({from:r,data:a,params:i,method:c,headers:d,baseUrl:p,responseType:y})=>{const S=i?.id||a?.id,O=S?`${r}/${S}`:r;return b(T(O,p),P(c||"PUT",a,d),y)},delete:({from:r,params:a,headers:i,baseUrl:c,responseType:d})=>{const p=a?.id,y=p?`${r}/${p}`:r;return b(T(y,c),g({method:"DELETE",headers:m(i)}),d)}}};
package/dist/cjs/early.js CHANGED
@@ -1 +1 @@
1
- "use strict";var y=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var w=(e,r)=>{for(var n in r)y(e,n,{get:r[n],enumerable:!0})},j=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of k(r))!E.call(e,o)&&o!==n&&y(e,o,{get:()=>r[o],enumerable:!(t=A(r,o))||t.enumerable});return e};var v=e=>j(y({},"__esModule",{value:!0}),e);var Y={};w(Y,{EARLY_KEY:()=>b,EARLY_MAX_AGE:()=>a,createEarlySeedScript:()=>O,dropEarly:()=>P,earlyKey:()=>m,isScalarParams:()=>S,matchEarlyRoute:()=>R,openEarly:()=>q,queryHeaderEntries:()=>x,takeEarly:()=>L,withReads:()=>T});module.exports=v(Y);var h=require("@symbo.ls/utils");const b="@symbo.ls/fetch:EARLY",a=3e4,m=(e,r)=>{const n=new URL(e);return n.searchParams.sort(),n.toString()+" "+(r||"")},S=e=>{if(e==null)return!0;if(typeof e!="object"||Array.isArray(e))return!1;const r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)return!1;for(const n in e){const t=e[n];if(!(t===void 0||typeof t=="string"||typeof t=="boolean")&&!(typeof t=="number"&&isFinite(t)))return!1}return!0},R=(e,r)=>{const n=s=>String(s).split("/").filter(Boolean),t=n(r);let o=null;for(let s=0;s<e.length;s++){const i=n(e[s]),c=i[i.length-1]==="*",f=c?i.length-1:i.length;if(c?t.length<f:t.length!==f)continue;const g={};let u=c?-1:0,p=!0;for(let l=0;l<f;l++)if(i[l].charAt(0)===":"){try{g[i[l].slice(1)]=decodeURIComponent(t[l])}catch{p=!1;break}u+=1}else if(i[l]===t[l])u+=3;else{p=!1;break}p&&(!o||u>o.score)&&(o={index:s,params:g,score:u})}return o&&{index:o.index,params:o.params}},d=()=>Symbol.for(b),x=(e,r)=>{const n=[];for(const t in e||{}){const o=t.toLowerCase(),s={name:t,header:o,param:e[t],found:!1,value:void 0};for(const i in r||{})i.toLowerCase()===o&&(s.found=!0,s.value=r[i]);n.push(s)}return n},T=(e,r)=>{if(!e||typeof e!="object"||!r||typeof r!="object")return e;const n={...e};return n.query===void 0&&r.query!==void 0&&(n.query=r.query),n.rpc===void 0&&r.rpc!==void 0&&(n.rpc=r.rpc),n},q=(e,r)=>{const n=d();if(!e||typeof e!="object"){const s=globalThis[n];return s&&s.seeded?{carried:{},rpc:!1,maxAge:a}:null}globalThis[n]||(globalThis[n]={entries:{}});const t={};for(const{header:s,found:i,value:c}of x(e.query,r))i&&(t[s]=c);const o=typeof e.maxAge=="number"&&e.maxAge>=0?e.maxAge:a;return{carried:t,rpc:e.rpc==="get",maxAge:o}},L=(e,r=a)=>{const n=globalThis[d()],t=n&&n.entries&&n.entries[e];return!t||(delete n.entries[e],!(Date.now()-t.time<=r))?null:Promise.resolve(t.answer).then(o=>o&&o.ok&&!o.bodyUsed?o:null,()=>null)},P=()=>{const e=globalThis[d()];e&&e.entries&&(e.entries={})},O=e=>{const r=(Array.isArray(e)?e:[]).filter(t=>t&&typeof t.url=="string"&&typeof t.body=="string");if(!r.length)return"";const n=(0,h.jsonForScript)(r.map(t=>({k:m(t.url,t.lang||""),s:t.status||200,t:t.type||"application/json",b:t.body})));return"<script>(function(){try{var k=Symbol.for("+JSON.stringify(b)+"),r=globalThis[k]||(globalThis[k]={entries:{}}),t=Date.now(),l="+n+';r.seeded=true;r.entries=r.entries||{};for(var i=0;i<l.length;i++){var e=l[i];r.entries[e.k]={time:t,answer:Promise.resolve(new Response(e.b,{status:e.s,headers:{"content-type":e.t}}))}}}catch(e){}})()<\/script>'};
1
+ "use strict";var g=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var w=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of v(t))!S.call(e,o)&&o!==r&&g(e,o,{get:()=>t[o],enumerable:!(n=j(t,o))||n.enumerable});return e};var L=e=>T(g({},"__esModule",{value:!0}),e);var Y={};w(Y,{EARLY_KEY:()=>h,EARLY_MAX_AGE:()=>d,SEED_BLOCK:()=>A,createEarlySeedBlock:()=>C,createEarlySeedScript:()=>K,dropEarly:()=>O,earlyKey:()=>x,isScalarParams:()=>R,matchEarlyRoute:()=>q,openEarly:()=>B,queryHeaderEntries:()=>k,readSeedBlock:()=>E,takeEarly:()=>D,withReads:()=>P});module.exports=L(Y);var a=require("@symbo.ls/utils");const h="@symbo.ls/fetch:EARLY",d=3e4,x=(e,t)=>{const r=new URL(e);return r.searchParams.sort(),r.toString()+" "+(t||"")},R=e=>{if(e==null)return!0;if(typeof e!="object"||Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return!1;for(const r in e){const n=e[r];if(!(n===void 0||typeof n=="string"||typeof n=="boolean")&&!(typeof n=="number"&&isFinite(n)))return!1}return!0},q=(e,t)=>{const r=s=>String(s).split("/").filter(Boolean),n=r(t);let o=null;for(let s=0;s<e.length;s++){const i=r(e[s]),c=i[i.length-1]==="*",p=c?i.length-1:i.length;if(c?n.length<p:n.length!==p)continue;const b={};let u=c?-1:0,y=!0;for(let l=0;l<p;l++)if(i[l].charAt(0)===":"){try{b[i[l].slice(1)]=decodeURIComponent(n[l])}catch{y=!1;break}u+=1}else if(i[l]===n[l])u+=3;else{y=!1;break}y&&(!o||u>o.score)&&(o={index:s,params:b,score:u})}return o&&{index:o.index,params:o.params}},f=()=>Symbol.for(h),k=(e,t)=>{const r=[];for(const n in e||{}){const o=n.toLowerCase(),s={name:n,header:o,param:e[n],found:!1,value:void 0};for(const i in t||{})i.toLowerCase()===o&&(s.found=!0,s.value=t[i]);r.push(s)}return r},P=(e,t)=>{if(!e||typeof e!="object"||!t||typeof t!="object")return e;const r={...e};return r.query===void 0&&t.query!==void 0&&(r.query=t.query),r.rpc===void 0&&t.rpc!==void 0&&(r.rpc=t.rpc),r},B=(e,t)=>{const r=f();if(E(),!e||typeof e!="object"){const s=globalThis[r];return s&&s.seeded?{carried:{},rpc:!1,maxAge:d,seeded:!0}:null}globalThis[r]||(globalThis[r]={entries:{}});const n={};for(const{header:s,found:i,value:c}of k(e.query,t))i&&(n[s]=c);const o=typeof e.maxAge=="number"&&e.maxAge>=0?e.maxAge:d;return{carried:n,rpc:e.rpc==="get",maxAge:o,seeded:!!globalThis[r].seeded}},D=(e,t=d)=>{const r=globalThis[f()],n=r&&r.entries&&r.entries[e];return!n||(delete r.entries[e],!(Date.now()-n.time<=t))?null:n.seeded?Promise.resolve(n.seeded):Promise.resolve(n.answer).then(o=>o&&o.ok&&!o.bodyUsed?o:null,()=>null)},O=()=>{const e=globalThis[f()];e&&e.entries&&(e.entries={})},m=e=>(Array.isArray(e)?e:[]).filter(t=>t&&typeof t.url=="string"&&typeof t.body=="string").map(t=>({k:x(t.url,t.lang||""),s:t.status||200,t:t.type||"application/json",b:t.body})),A='script[type="application/json"][data-fetch-seed]',C=e=>{const t=m(e);return t.length?'<script type="application/json" data-fetch-seed>'+(0,a.jsonForScript)(t)+"<\/script>":""},E=()=>{const e=(0,a.readJsonDataBlock)(globalThis.document,A,{remove:!0}),t=e&&e.value;if(!Array.isArray(t)||!t.length)return;const r=f(),n=globalThis[r]||(globalThis[r]={entries:{}});n.entries||(n.entries={}),n.seeded=!0;const o=Date.now();for(const s of t)!s||typeof s.k!="string"||typeof s.b!="string"||n.entries[s.k]||(n.entries[s.k]={time:o,seeded:{seeded:!0,status:s.s||200,type:s.t||"application/json",body:s.b}})},K=e=>{const t=m(e);if(!t.length)return"";const r=(0,a.jsonForScript)(t);return"<script>(function(){try{var k=Symbol.for("+JSON.stringify(h)+"),r=globalThis[k]||(globalThis[k]={entries:{}}),t=Date.now(),l="+r+';r.seeded=true;r.entries=r.entries||{};for(var i=0;i<l.length;i++){var e=l[i];r.entries[e.k]={time:t,answer:Promise.resolve(new Response(e.b,{status:e.s,headers:{"content-type":e.t}}))}}}catch(e){}})()<\/script>'};
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var bt=Object.create;var he=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var mt=(e,t)=>{for(var r in t)he(e,r,{get:t[r],enumerable:!0})},Ve=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of wt(t))!Tt.call(e,o)&&o!==r&&he(e,o,{get:()=>t[o],enumerable:!(s=St(t,o))||s.enumerable});return e};var We=(e,t,r)=>(r=e!=null?bt(gt(e)):{},Ve(t||!e||!e.__esModule?he(r,"default",{value:e,enumerable:!0}):r,e)),vt=e=>Ve(he({},"__esModule",{value:!0}),e);var Bt={};mt(Bt,{EARLY_KEY:()=>Z.EARLY_KEY,createAdapter:()=>Ct,createEarlySeedScript:()=>Z.createEarlySeedScript,default:()=>Yt,earlyKey:()=>Z.earlyKey,executeFetch:()=>Be,fetchFunctions:()=>jt,fetchPlugin:()=>Kt,hasAdapter:()=>At,initAdapterAuth:()=>De,parseDuration:()=>X,queryClient:()=>ae,registerAdapter:()=>Ft,resolveDb:()=>pt});module.exports=vt(Bt);var i=require("@symbo.ls/utils"),lt=require("@symbo.ls/signal"),dt=require("./early.js"),Z=require("./early.js");const Et=["select","rpc","insert","update","upsert","delete","subscribe"],Je={rest:()=>import("./adapters/rest.js"),local:()=>import("./adapters/local.js")},_e=Symbol.for("@symbo.ls/fetch:CUSTOM_ADAPTERS"),J=(()=>{if(typeof globalThis<"u"&&globalThis[_e])return globalThis[_e];const e={};if(typeof globalThis<"u")try{return Object.defineProperty(globalThis,_e,{value:e,writable:!1,configurable:!1,enumerable:!1}),globalThis[_e]}catch{}return e})(),ye=Symbol.for("@symbo.ls/fetch:PENDING_ADAPTERS"),ke=(()=>{if(typeof globalThis<"u"&&globalThis[ye])return globalThis[ye];const e={};if(typeof globalThis<"u")try{return Object.defineProperty(globalThis,ye,{value:e,writable:!1,configurable:!1,enumerable:!1}),globalThis[ye]}catch{}return e})(),Dt=5e3,Pt=e=>new Promise(t=>{if(J[e])return t(J[e]);const r=ke[e]||=[];let s=!1;const o=()=>{s||(s=!0,t(J[e]||null))};r.push(o),setTimeout(o,Dt)}),Ft=(e,t)=>{J[e]=t;const r=ke[e];if(r&&r.length){ke[e]=[];for(const s of r)s()}},At=e=>typeof e=="string"&&!!(J[e]||Je[e]),Ct=e=>{const t={};for(const r of Et)e[r]&&(t[r]=e[r]);return t.name=e.name||"custom",t},pt=async e=>{if(!e)return null;if(typeof e.select=="function")return e;const{adapter:t,...r}=e,s=typeof t=="string"?t:typeof e=="string"?e:null;if(!s)return null;let o=J[s]||Je[s];if(!o&&(o=await Pt(s),!o))throw new Error(`Unknown db adapter: "${s}". Use registerAdapter() for adapters with optional deps.`);const n=await o();if(!n||typeof n.setup!="function")throw new Error(`Adapter "${s}" loader returned a module without a setup() function. Got keys: [${Object.keys(n||{}).join(", ")}]. Likely a bundler chunk-resolution issue.`);return n.setup(r)},X=e=>{if(!e)return 0;if(typeof e=="number")return e;const t=e.match(/^(\d+)(ms|s|m|h)$/);if(!t)return 0;const r=parseInt(t[1]),s=t[2];return s==="ms"?r:s==="s"?r*1e3:s==="m"?r*6e4:s==="h"?r*36e5:0},m=new Map,K=new Map,I=new Map;let be=0;const Se=new Map,Oe=new WeakMap,Le=(e,t,r,s,o=e.page,n=e.cursor)=>{if(e.cache?.key)return e.cache.key;const{from:u,method:c,infinite:a}=e,l=r?`${r}:`:"",h=s?`:${s}`:"",p=o?":p"+JSON.stringify(o):"",v=n!=null?":c"+JSON.stringify(n):"";return`${u}:${c}:${l}${JSON.stringify(t||"")}${a?":infinite":""}${p}${v}${h}`},te=e=>m.get(e)||null,re=(e,t,r,s=++be,o=!1)=>{const n={data:t,error:r,time:Date.now(),stale:o,seq:s};m.set(e,n);const u=K.get(e);if(u)for(const c of u)(0,i.isFunction)(c)&&c(n);return n},we=(e,t)=>{const r=e?m.get(e):null;return r&&!r.error&&r.seq>t?r:null},Re=(e,t)=>(Se.get(e)||0)>t,ge=e=>{Se.set(e,++be)},He=e=>{m.delete(e),ge(e)},xt=(e,t)=>(K.has(e)||K.set(e,new Set),K.get(e).add(t),()=>{const r=K.get(e);r&&(r.delete(t),r.size===0&&K.delete(e))}),Ie=e=>!e&&e!==!1?{staleTime:6e4,gcTime:3e5}:e===!1?null:e===!0?{staleTime:6e4,gcTime:3e5}:typeof e=="number"?{staleTime:e,gcTime:Math.max(e*5,3e5)}:(0,i.isString)(e)?{staleTime:X(e),gcTime:3e5}:{staleTime:X(e.stale||e.staleTime)||6e4,gcTime:X(e.gc||e.gcTime||e.expire)||3e5,key:e.key},Y=new Set,Xe=e=>!!e.ref&&e.element.__ref===e.ref,Mt=({config:e,element:t,context:r})=>{try{return Ue(e,t,r)}catch{return null}};let Te=null;const kt=()=>{Te||(Te=setInterval(()=>{const e=Date.now();for(const[t,r]of m){const s=K.get(t);!(s&&s.size>0)&&e-r.time>(r.gcTime||3e5)&&m.delete(t)}for(const[t]of Se)!m.has(t)&&!I.has(t)&&Se.delete(t);for(const t of Y)Xe(t)||Y.delete(t)},3e4),Te.unref&&Te.unref())};kt();const Ze=3,qe=e=>Math.min(1e3*2**e,3e4),et=(e,t)=>{const r=e.retry;return r===void 0&&t?{count:0}:r===!1?{count:0}:r===!0||r===void 0?{count:Ze,delay:qe}:typeof r=="number"?{count:r,delay:qe}:{count:r.count??Ze,delay:(0,i.isFunction)(r.delay)?r.delay:typeof r.delay=="number"?()=>r.delay:qe}},tt=async(e,t)=>{const{count:r,delay:s}=t;let o;for(let n=0;n<=r;n++)try{const u=await e();if(u?.error){if(o=u.error,n<r){const c=(0,i.isFunction)(s)?s(n,o):s;await new Promise(a=>setTimeout(a,c));continue}return u}return u}catch(u){if(o=u,n<r){const c=(0,i.isFunction)(s)?s(n,u):s;await new Promise(a=>setTimeout(a,c));continue}throw u}return{data:null,error:o}},H={focus:new Set,online:new Set};let rt=!1;const Ot=()=>{if(rt||typeof window>"u")return;rt=!0;const e=()=>{for(const r of H.focus)r()},t=()=>{for(const r of H.online)r()};window.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&e()}),window.addEventListener("focus",e),window.addEventListener("online",t)},st=(e,t)=>{const r=t.__ref;if(e===!0)return{from:r.__state||t.key,method:"select",query:!0,on:"create"};if((0,i.isString)(e))return{from:e,method:"select",query:!0,on:"create"};if((0,i.isObject)(e)){const s={...e};return s.from=s.from||r.__state||t.key,s.method=s.method||"select",s.on=s.on||"create",s.query===void 0&&(s.query=!0),s}return null},Lt=["insert","update","upsert","delete"],nt=e=>Lt.includes(e),Ne=e=>e.mutation===!0?!0:e.mutation===!1||e.method!=="rpc"?!1:e.on==="submit"||e.on==="click"||e.invalidates!=null,se=(e,t)=>{const r=e?.state?.root||t?.state?.root;if(r?.lang)return r.lang},me=(e,t)=>{const s=(e?.state?.root||t?.state?.root)?.__fetchScope;return s?String(s):void 0},ve=(e,t,r)=>{let s;if(!e)s=void 0;else if((0,i.isFunction)(e))s=e(t,t.state);else{s={};for(const o in e){const n=e[o];s[o]=(0,i.isFunction)(n)?n(t,t.state):n}}return s},ne=(e,t)=>(0,i.isFunction)(e)?e(t,t.state):e,Ue=(e,t,r)=>Le(e,ve(e.params,t,r),me(t,r),se(t,r),ne(e.page,t),ne(e.cursor,t)),De=async(e,t)=>{if(!e||e.__authInitialized||(e.__authInitialized=!0,!e.getSession))return;const r=(s,o)=>{const n=t.state?.root;n?.update&&n.update({auth:{user:s,session:o,loading:!1}})};try{const s=await e.getSession();r(s?.user||null,s)}catch(s){console.warn("[fetch] Failed to restore auth session:",s.message)}e.onAuthStateChange&&e.onAuthStateChange((s,o)=>{r(o?.user||null,o)})},Qe=async(e,t)=>{if((0,i.isFunction)(e.select))return e.auth!==!1&&await De(e,t),e;if(e.__resolved)return e.auth!==!1&&await De(e.__resolved,t),e.__resolved;if(e.__resolving)return e.__resolving;e.__resolving=pt(e);const r=await e.__resolving;return delete e.__resolving,r?(r.auth=e.auth,r.url=e.url,r.key=e.key,e.__resolved=r,t.fetch=r,e.auth!==!1&&await De(r,t),r):null},F=(e,t,...r)=>{const s=(0,i.isFunction)(e[t])?e[t]:null;s&&s.call(e,...r,e,e.state,e.context)},k=(e,t,r,...s)=>{const o=e&&(0,i.isFunction)(e[r])?e[r]:null;o&&o.call(t,...s,t,t.state,t.context)},oe=e=>{const t={},r=e.node;if(!r)return t;if(r.tagName==="FORM"){const o=new FormData(r);for(const[n,u]of o.entries())t[n]=u;return t}const s=r.querySelectorAll("input, textarea, select");for(let o=0;o<s.length;o++){const n=s[o],u=n.name||n.getAttribute("name");u&&(n.type==="checkbox"?t[u]=n.checked:n.type==="file"?t[u]=n.files:t[u]=n.value)}return t},Ee=e=>e.responseType==="stream"||e.responseType==="response",Rt=["Blob","File","ArrayBuffer","ReadableStream","Response"],$e=e=>e!==null&&typeof e=="object"&&(ArrayBuffer.isView(e)||Rt.includes(Object.prototype.toString.call(e).slice(8,-1))),q=(e,t,r,s={})=>{if(!r&&$e(t))return;const o=r&&r.startsWith("~/"),n=o&&e.state?.root||e.state;if(n?.update)if(o){const u=r.slice(2);t&&typeof t=="object"&&!Array.isArray(t)&&!$e(t)&&u in t?n.update(t,{preventFetch:!0,...s}):n.update({[u]:t},{preventFetch:!0,...s})}else{const u=r?{[r]:t}:t;n.update(u,{preventFetch:!0,...s})}},ze=Object.freeze({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),je=e=>({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:e,status:"error",fetchStatus:"idle"}),N=(e,t)=>{const r=e?.__ref;r&&(r.__fetchStatus={...t,isError:!!t.error},r.__fetching=t.isFetching,r.__fetchError=t.error)},ot=(e,t,r)=>{const s=e.__pages&&e.__pages.length?e.__pages:[r];(0,i.isFunction)(t.getNextPageParam)&&(e.__nextPageParam=t.getNextPageParam(s[s.length-1],s),e.__hasNextPage=e.__nextPageParam!=null),(0,i.isFunction)(t.getPreviousPageParam)&&(e.__prevPageParam=t.getPreviousPageParam(s[0],s),e.__hasPreviousPage=e.__prevPageParam!=null)},O=async(e,t,r,s={})=>{const o=r?.fetch;if(!o||!t||!t.__ref)return;const n=t.__ref,u=me(t,r);(!n.__fetchScopeOwner||n.__fetchScopeOwner.scope!==u)&&(n.__fetchScopeOwner={scope:u});const c=n.__fetchScopeOwner,a=()=>t.__ref===n&&n.__fetchScopeOwner===c&&me(t,r)===u;if(e.enabled===!1||(0,i.isFunction)(e.enabled)&&!e.enabled(t,t.state)||e.skip===!0||(0,i.isFunction)(e.skip)&&e.skip(t,t.state))return;const l=await Qe(o,r);if(!l||!a())return;const{from:h,method:p,query:v,params:Pe,cache:Fe,transform:U,single:ie,auth:ue,fields:B,as:A,limit:Q,offset:L,order:S,headers:ee,baseUrl:E,responseType:G,page:g,cursor:P,infinite:$,placeholderData:x,initialData:V,select:T,keepPreviousData:C}=e,z=f=>((0,i.isFunction)(T)&&(f=T(f,t,t.state)),U&&(f=U(f,t,t.state)),f),R=f=>{N(t,je(f)),F(t,"onFetchError",f),k(e,t,"onFetchError",f)};let Ae=(0,i.isString)(T)?T:void 0;if(v&&(0,i.isFunction)(t.getQuery)){const f=t.getQuery(l.name||"paths");f&&(Ae=f.select||f.length&&f.join(",")||Ae)}const ce=ve(Pe,t,r),D=ne(g,t),Ce=ne(P,t),fe=Ne(e),le=Ee(e)||fe?null:Ie(Fe),ht=et(e,fe||nt(p)),Ge=se(t,r),y=le?Le(e,ce,u,Ge,D,Ce):null;if(!n.__fetchInitialized&&y&&(n.__fetchInitialized=!0,V!==void 0)){const f=(0,i.isFunction)(V)?V():V;re(y,f,null)}if((p==="select"||p==="rpc")&&y&&le&&!s.refresh&&!s.force){const f=te(y);if(f&&!f.error){const d=Date.now()-f.time,w=f.stale||d>(le.staleTime||0);$&&(0,i.isArray)(f.data)&&!n.__pages&&(n.__pages=[f.data],ot(n,e,f.data));const _=z(f.data);if(!a())return;if(!w){N(t,ze),q(t,_,A);return}q(t,_,A)}else if(x!==void 0){const d=(0,i.isFunction)(x)?x(t,t.state):x;d!==void 0&&q(t,d,A)}}const de=y&&!s.force?I.get(y):null;if(de&&!Re(y,Oe.get(de)||0)){try{const f=await Promise.race([de,new Promise((d,w)=>setTimeout(()=>w("DEDUP_TIMEOUT"),15e3))]);if(!a())return;if(f?.error)R(f.error);else if(f?.data!==void 0){const d=!$&&we(y,Oe.get(de)||0),w=z(d?d.data:f.data);if(!a())return;q(t,w,A),F(t,"onFetchComplete",w),k(e,t,"onFetchComplete",w)}}catch(f){if(!a())return;f!=="DEDUP_TIMEOUT"&&R(f)}return}const _t=!te(y)?.data;N(t,{isFetching:!0,isLoading:_t,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),F(t,"onFetchStart"),k(e,t,"onFetchStart");const M=r?.analyze?.emitNetwork,Me=M?typeof performance<"u"?performance.now():Date.now():0;M&&M({phase:"start",mode:"query",from:h,method:p,cacheKey:y,lang:Ge});const yt=async()=>{if(!a())return;if(ue!==!1&&l.auth!==!1&&l.getSession){const _=await l.getSession();if(!a())return;if(ue===!0&&!_){const b={message:"Not authenticated"};return R(b),{data:null,error:b}}}const f=l[p];if(!(0,i.isFunction)(f))return{data:null,error:{message:`Method "${p}" not found on adapter`}};const d={from:h,select:Ae,params:ce,single:ie,limit:Q,offset:L,order:S,headers:ee,baseUrl:E};G!==void 0&&(d.responseType=G);const w=se(t,r);if(w&&(d.headers={...d.headers,"Accept-Language":w}),D!==void 0){if((0,i.isObject)(D))D.offset!==void 0&&(d.offset=D.offset),D.limit!==void 0&&(d.limit=D.limit),D.cursor!==void 0&&(d.params={...d.params,cursor:D.cursor});else if(typeof D=="number"){const _=e.pageSize||Q||20;d.offset=(D-1)*_,d.limit=_}}if(Ce!==void 0&&(d.params={...d.params,cursor:Ce}),p==="insert"||p==="update"||p==="upsert"){let _;if(B===!0||e.on==="submit")_=oe(t);else if((0,i.isArray)(B)){const b=oe(t);_={};for(const j of B)_[j]=b[j]}else t.state?.parse?_=t.state.parse():(0,i.isObject)(t.state)&&(_={...t.state});U&&(_=U(_,t,t.state)),d.data=_}if(p==="rpc"){let _=ce;if(e.on==="submit"){const b=oe(t);_=e.transformParams?e.transformParams(b,t,t.state):b}d.params=_,d.read=!fe&&e.read!==!1}if(p==="subscribe"){if((0,i.isFunction)(n.__unsubscribe)){const b=n.__unsubscribe;n.__unsubscribe=null;try{b()}catch{}}const _=l.subscribe({from:h,params:ce,on:e.subscribeOn},(b,j,xe)=>{a()&&(q(t,b,A),F(t,"onFetchComplete",b),k(e,t,"onFetchComplete",b))});return a()?(n.__unsubscribe=_,{data:null,error:null,subscribed:!0}):((0,i.isFunction)(_)&&_(),{data:null,error:null,subscribed:!0})}return f(d)},W=++be,pe=tt(yt,ht);Oe.set(pe,W),y&&I.set(y,pe);try{const f=await pe;if(fe&&e.invalidates&&f&&!f.error&&!f.subscribed&&it(e.invalidates,h),!a()||f?.subscribed)return;const{data:d,error:w}=f||{};if(w){y&&!we(y,W)&&re(y,null,w,W),R(w),M&&M({phase:"error",mode:"query",from:h,method:p,cacheKey:y,error:w.message||w,durationMs:(typeof performance<"u"?performance.now():Date.now())-Me});return}if(d!==void 0){let _=d;if((p==="select"||p==="rpc")&&y){const j=!$&&we(y,W);if(j)_=j.data;else{const xe=re(y,d,null,W,Re(y,W));xe.gcTime=le?.gcTime||3e5}}let b=_;if($&&(0,i.isArray)(d)&&((!n.__pages||!s.direction)&&(n.__pages=[]),s.direction==="previous"?n.__pages.unshift(d):n.__pages.push(d),b=n.__pages.flat(),ot(n,e,d)),b=z(b),!a())return;N(t,ze),(!C||b!==void 0)&&q(t,b,A),F(t,"onFetchComplete",b),k(e,t,"onFetchComplete",b),M&&M({phase:"success",mode:"query",ok:!0,from:h,method:p,cacheKey:y,durationMs:(typeof performance<"u"?performance.now():Date.now())-Me})}}catch(f){if(!a())return;R(f),M&&M({phase:"error",mode:"query",from:h,method:p,cacheKey:y,error:f.message||String(f),durationMs:(typeof performance<"u"?performance.now():Date.now())-Me})}finally{y&&I.get(y)===pe&&I.delete(y)}},It=(e,t,r)=>{const s=e.on,o=t.__ref;if(!o)return;o.__fetchListeners||(o.__fetchListeners=[]);const n=e.__runner||O;if(s==="submit"){const u=a=>{a.preventDefault(),n(e,t,r)},c=t.node;c&&(c.addEventListener("submit",u),o.__fetchListeners.push(()=>c.removeEventListener("submit",u)))}else if(s==="click"){const u=()=>n(e,t,r),c=t.node;c&&(c.addEventListener("click",u),o.__fetchListeners.push(()=>c.removeEventListener("click",u)))}else s==="stateChange"&&qt(e,t,r,n)},qt=(e,t,r,s)=>{const o=t.__ref;let n;const u=(0,lt.createEffect)(()=>{let c;try{c=JSON.stringify([ve(e.params,t,r)??null,(0,i.isFunction)(e.enabled)?!!e.enabled(t,t.state):e.enabled!==!1,(0,i.isFunction)(e.skip)?!!e.skip(t,t.state):e.skip===!0,ne(e.page,t)??null])}catch{return}if(n===void 0){n=c;return}c!==n&&(n=c,Promise.resolve().then(()=>s(e,t,r)))});Array.isArray(o.__effects)?o.__effects.push(u):o.__fetchListeners.push(()=>u.dispose())},Nt=(e,t,r)=>{const s=t.__ref;s.__fetchCleanups||(s.__fetchCleanups=[]),Ot();const o=e.refetchInterval;if(o){const a=typeof o=="number"?o:X(o);if(a>0){const l=setInterval(()=>{(e.refetchIntervalInBackground||typeof document>"u"||document.visibilityState==="visible")&&O(e,t,r,{force:!0})},a);s.__fetchCleanups.push(()=>clearInterval(l))}}const n=Ee(e),u=e.refetchOnWindowFocus===void 0?!n:e.refetchOnWindowFocus!==!1,c=e.refetchOnReconnect===void 0?!n:e.refetchOnReconnect!==!1;if(u){const a=()=>{const l=Ue(e,t,r),h=te(l),p=Ie(e.cache);(!h||h.stale||Date.now()-h.time>(p?.staleTime||0))&&O(e,t,r,{force:!0})};H.focus.add(a),s.__fetchCleanups.push(()=>H.focus.delete(a))}if(c){const a=()=>O(e,t,r,{force:!0});H.online.add(a),s.__fetchCleanups.push(()=>H.online.delete(a))}},Ut=(e,t,r)=>{if(!t.optimistic)return null;const s=e.__ref,o=t.as,n=e.state?.parse?e.state.parse():(0,i.isObject)(e.state)?{...e.state}:e.state;s.__optimisticSnapshot=n;const u=(0,i.isFunction)(t.optimistic)?t.optimistic(r,n,e):t.optimistic;return u!==void 0&&q(e,u,o),n},Ke=(e,t)=>{const r=e.__ref;if(!r||!t.optimistic)return;const s=r.__optimisticSnapshot;s!==void 0&&(q(e,s,t.as),delete r.__optimisticSnapshot)},Ye=e=>{if(!e)return()=>!0;if((0,i.isString)(e))return t=>t.includes(e);if((0,i.isArray)(e)){const t=e.join(":");return r=>r.includes(t)}return e instanceof RegExp?t=>(e.lastIndex=0,e.test(t)):(0,i.isFunction)(e)?t=>{try{return!!e(t)}catch{return!1}}:()=>!1},Qt=e=>{const t=[];for(const r of Y){if(!Xe(r)){Y.delete(r);continue}const s=Mt(r);s&&e(s)&&t.push(O(r.config,r.element,r.context,{refresh:!0}))}return Promise.allSettled(t).then(()=>{})},at=e=>{(0,dt.dropEarly)();for(const[t,r]of m)e(t)&&(r.stale=!0,ge(t));for(const[t]of I)!m.has(t)&&e(t)&&ge(t);return Qt(e)},it=(e,t)=>{const r=((0,i.isArray)(e)?e:[e]).map(s=>s===!0||s==="*"?o=>o.startsWith(t+":"):s?Ye(s):()=>!1);return at(s=>r.some(o=>o(s)))},ut=e=>{for(const[t]of m)e(t)&&He(t);for(const[t]of I)e(t)&&ge(t)},ct=()=>!0,$t=async(e,t,r)=>{const s=r?.fetch;if(!s)return;const o=await Qe(s,r);if(!o)return;const n=t.__ref,{method:u,from:c,fields:a,transform:l,as:h,on:p,auth:v,headers:Pe,baseUrl:Fe,responseType:U,invalidates:ie,optimistic:ue,onMutate:B,onSuccess:A,onError:Q,onSettled:L}=e;let S;if(a===!0||p==="submit")S=oe(t);else if((0,i.isArray)(a)){const g=oe(t);S={};for(const P of a)S[P]=g[P]}else t.state?.parse?S=t.state.parse():(0,i.isObject)(t.state)&&(S={...t.state});l&&(S=l(S,t,t.state)),(0,i.isFunction)(B)&&B(S,t,t.state);const ee=ue?Ut(t,e,S):null;N(t,{isFetching:!0,isLoading:!1,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),F(t,"onFetchStart"),k(e,t,"onFetchStart");const E=r?.analyze?.emitNetwork,G=E?typeof performance<"u"?performance.now():Date.now():0;E&&E({phase:"start",mode:"mutation",from:c,method:u});try{if(v!==!1&&o.auth!==!1&&o.getSession){const z=await o.getSession();if(v===!0&&!z){ee!==void 0&&Ke(t,e);const R={message:"Not authenticated"};F(t,"onFetchError",R),k(e,t,"onFetchError",R);return}}const g=o[u];if(!(0,i.isFunction)(g))return;const P={from:c,data:S,headers:Pe,baseUrl:Fe};U!==void 0&&(P.responseType=U),e.params&&(P.params=ve(e.params,t,r));const $=se(t,r);$&&(P.headers={...P.headers,"Accept-Language":$});const x=et(e,!0),V=await tt(()=>g(P),x),{data:T,error:C}=V||{};if(C){ee!==void 0&&Ke(t,e),N(t,je(C)),F(t,"onFetchError",C),(0,i.isFunction)(Q)&&Q(C,S,t),(0,i.isFunction)(L)&&L(null,C,S,t),E&&E({phase:"error",mode:"mutation",from:c,method:u,error:C.message||String(C),durationMs:(typeof performance<"u"?performance.now():Date.now())-G});return}if(delete n.__optimisticSnapshot,N(t,ze),T!==void 0&&(h||!$e(T))){const z=h?{[h]:T}:T;t.state?.update&&t.state.update(z,{preventFetch:!0})}F(t,"onFetchComplete",T),k(e,t,"onFetchComplete",T),(0,i.isFunction)(A)&&A(T,S,t),(0,i.isFunction)(L)&&L(T,null,S,t),E&&E({phase:"success",mode:"mutation",ok:!0,from:c,method:u,durationMs:(typeof performance<"u"?performance.now():Date.now())-G}),ie&&it(ie,c)}catch(g){ee!==void 0&&Ke(t,e),N(t,je(g)),F(t,"onFetchError",g),k(e,t,"onFetchError",g),(0,i.isFunction)(Q)&&Q(g,S,t),(0,i.isFunction)(L)&&L(null,g,S,t),E&&E({phase:"error",mode:"mutation",from:c,method:u,error:g.message||String(g),durationMs:(typeof performance<"u"?performance.now():Date.now())-G})}finally{n.__fetching=!1}},zt=e=>{const t=r=>{try{r()}catch{}};for(const r of e.__fetchCleanups||[])t(r);for(const r of e.__fetchListeners||[])t(r);(0,i.isFunction)(e.__unsubscribe)&&t(e.__unsubscribe);for(const r of e.__fetchMounted||[])Y.delete(r);e.__fetchCleanups=[],e.__fetchListeners=[],e.__unsubscribe=null,e.__fetchMounted=[]},Be=(e,t,r,s)=>{if(!e||!s?.fetch)return;const n=(0,i.exec)(e,t);if(!n)return;const u=(0,i.isArray)(n)?n.map(a=>st((0,i.exec)(a,t),t)).filter(Boolean):[st(n,t)].filter(Boolean),c=t.__ref;if(c.__fetchMounted)for(const a of c.__fetchMounted)Y.delete(a);c.__fetchMounted=[],!c.__fetchDisposer&&(0,i.isArray)(c.__effects)&&(c.__fetchDisposer={dispose:()=>zt(c)},c.__effects.push(c.__fetchDisposer));for(const a of u){const l=nt(a.method),h=l?$t:O,p=!l&&!Ne(a)&&a.method!=="subscribe";if(a.on==="create"?h(a,t,s):Promise.resolve().then(()=>{It({...a,__runner:h},t,s)}),p&&a.on==="create"&&((a.refetchInterval||a.refetchOnWindowFocus!==!1||a.refetchOnReconnect!==!1)&&Nt(a,t,s),!Ee(a))){const v={element:t,ref:c,config:a,context:s};Y.add(v),c.__fetchMounted.push(v)}}c.refetch=a=>{for(const l of u)O(l,t,s,{force:!0,...a})},c.fetchNextPage=()=>{const a=u[0];if(!a||!a.infinite)return;const l=c.__nextPageParam;if(l==null)return;const h={...a,cursor:l};O(h,t,s,{direction:"next",force:!0})},c.fetchPreviousPage=()=>{const a=u[0];if(!a||!a.infinite)return;const l=c.__prevPageParam;if(l==null)return;const h={...a,cursor:l};O(h,t,s,{direction:"previous",force:!0})}},ae={invalidateQueries:e=>at(Ye(e)),removeQueries:e=>{ut(e?Ye(e):ct)},getQueryData:e=>te(e)?.data??void 0,setQueryData:(e,t)=>{const r=te(e),s=(0,i.isFunction)(t)?t(r?.data):t;re(e,s,null)},prefetchQuery:async(e,t)=>{const r=t?.fetch;if(!r)return;const s=await Qe(r,t);if(!s)return;const o=e.method||"select",n=me(null,t),u=se(null,t),c=Le({...e,method:o},e.params,n,u),a=s[o];if(!(0,i.isFunction)(a))return;const l={from:e.from,params:e.params,limit:e.limit,offset:e.offset,order:e.order,single:e.single,headers:e.headers,baseUrl:e.baseUrl};u&&(l.headers={...l.headers,"Accept-Language":u}),e.responseType!==void 0&&(l.responseType=e.responseType),o==="rpc"&&(l.read=!Ne(e)&&e.read!==!1);const h=++be,p=await a(l);if(p?.data!==void 0&&!p?.error&&!Ee(e)&&!we(c,h)){const v=re(c,p.data,null,h,Re(c,h));v.gcTime=Ie(e.cache)?.gcTime||3e5}return p},getCache:()=>m,clear:()=>ut(ct),dropNonLang:e=>{if(!e)return;const t=`:${e}`;for(const[r]of m)r.match(/:([a-z]{2,3})$/i)&&(r.endsWith(t)||He(r))}},ft=(e,t)=>(0,i.isObject)(e)?Ue({method:"select",...e},t,t?.context):e,jt={invalidateQueries(e){return ae.invalidateQueries(e)},removeQueries(e){return ae.removeQueries(e)},getQueryData(e){return ae.getQueryData(ft(e,this))},setQueryData(e,t){return ae.setQueryData(ft(e,this),t)}},Kt={name:"fetch",create(e){const t=e.fetch;t&&(e.parent||I.clear(),Be(t,e,e.state,e.context))}};var Yt=Be;
1
+ "use strict";var gt=Object.create;var _e=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var Dt=(e,t)=>{for(var r in t)_e(e,r,{get:t[r],enumerable:!0})},xe=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of mt(t))!Et.call(e,o)&&o!==r&&_e(e,o,{get:()=>t[o],enumerable:!(s=vt(t,o))||s.enumerable});return e};var Je=(e,t,r)=>(r=e!=null?gt(Tt(e)):{},xe(t||!e||!e.__esModule?_e(r,"default",{value:e,enumerable:!0}):r,e)),Pt=e=>xe(_e({},"__esModule",{value:!0}),e);var Jt={};Dt(Jt,{EARLY_KEY:()=>M.EARLY_KEY,SEED_BLOCK:()=>M.SEED_BLOCK,createAdapter:()=>Lt,createEarlySeedBlock:()=>M.createEarlySeedBlock,createEarlySeedScript:()=>M.createEarlySeedScript,default:()=>xt,earlyKey:()=>M.earlyKey,executeFetch:()=>Ge,fetchFunctions:()=>Wt,fetchPlugin:()=>Vt,hasAdapter:()=>Ot,initAdapterAuth:()=>De,parseDuration:()=>ee,queryClient:()=>Gt,registerAdapter:()=>kt,requestsInFlight:()=>Pe.requestsInFlight,resolveDb:()=>yt,whenRequestsIdle:()=>Pe.whenRequestsIdle});module.exports=Pt(Jt);var i=require("@symbo.ls/utils"),ht=require("@symbo.ls/signal"),_t=require("./early.js"),Ft=Je(require("./adapters/rest.js"),1),M=require("./early.js"),Pe=require("./inflight.js");const At=["select","rpc","insert","update","upsert","delete","subscribe"],He={rest:()=>Promise.resolve(Ft),local:()=>import("./adapters/local.js")},ye=Symbol.for("@symbo.ls/fetch:CUSTOM_ADAPTERS"),X=(()=>{if(typeof globalThis<"u"&&globalThis[ye])return globalThis[ye];const e={};if(typeof globalThis<"u")try{return Object.defineProperty(globalThis,ye,{value:e,writable:!1,configurable:!1,enumerable:!1}),globalThis[ye]}catch{}return e})(),be=Symbol.for("@symbo.ls/fetch:PENDING_ADAPTERS"),Me=(()=>{if(typeof globalThis<"u"&&globalThis[be])return globalThis[be];const e={};if(typeof globalThis<"u")try{return Object.defineProperty(globalThis,be,{value:e,writable:!1,configurable:!1,enumerable:!1}),globalThis[be]}catch{}return e})(),Ct=5e3,Mt=e=>new Promise(t=>{if(X[e])return t(X[e]);const r=Me[e]||=[];let s=!1;const o=()=>{s||(s=!0,t(X[e]||null))};r.push(o),setTimeout(o,Ct)}),kt=(e,t)=>{X[e]=t;const r=Me[e];if(r&&r.length){Me[e]=[];for(const s of r)s()}},Ot=e=>typeof e=="string"&&!!(X[e]||He[e]),Lt=e=>{const t={};for(const r of At)e[r]&&(t[r]=e[r]);return t.name=e.name||"custom",t},yt=async e=>{if(!e)return null;if(typeof e.select=="function")return e;const{adapter:t,...r}=e,s=typeof t=="string"?t:typeof e=="string"?e:null;if(!s)return null;let o=X[s]||He[s];if(!o&&(o=await Mt(s),!o))throw new Error(`Unknown db adapter: "${s}". Use registerAdapter() for adapters with optional deps.`);const n=await o();if(!n||typeof n.setup!="function")throw new Error(`Adapter "${s}" loader returned a module without a setup() function. Got keys: [${Object.keys(n||{}).join(", ")}]. Likely a bundler chunk-resolution issue.`);return n.setup(r)},ee=e=>{if(!e)return 0;if(typeof e=="number")return e;const t=e.match(/^(\d+)(ms|s|m|h)$/);if(!t)return 0;const r=parseInt(t[1]),s=t[2];return s==="ms"?r:s==="s"?r*1e3:s==="m"?r*6e4:s==="h"?r*36e5:0},Xe=e=>!!e&&!!e.isolateFetchCache,Ze=()=>({cache:new Map,subscribers:new Map,active:new Map,invalidatedAt:new Map,mounted:new Set}),A=Ze(),et=new WeakMap,P=e=>{if(!Xe(e))return A;let t=et.get(e);return t||et.set(e,t=Ze()),t};let Se=0;const ke=new WeakMap,Oe=(e,t,r,s,o=e.page,n=e.cursor)=>{if(e.cache?.key)return e.cache.key;const{from:a,method:c,infinite:f}=e,y=r?`${r}:`:"",u=s?`:${s}`:"",d=o?":p"+JSON.stringify(o):"",S=n!=null?":c"+JSON.stringify(n):"";return`${a}:${c}:${y}${JSON.stringify(t||"")}${f?":infinite":""}${d}${S}${u}`},re=(e,t)=>e.cache.get(t)||null,se=(e,t,r,s,o=++Se,n=!1)=>{const a={data:r,error:s,time:Date.now(),stale:n,seq:o};e.cache.set(t,a);const c=e.subscribers.get(t);if(c)for(const f of c)(0,i.isFunction)(f)&&f(a);return a},we=(e,t,r)=>{const s=t?e.cache.get(t):null;return s&&!s.error&&s.seq>r?s:null},Le=(e,t,r)=>(e.invalidatedAt.get(t)||0)>r,ge=(e,t)=>{e.invalidatedAt.set(t,++Se)},tt=(e,t)=>{e.cache.delete(t),ge(e,t)},Xt=(e,t,r)=>{const{subscribers:s}=e;return s.has(t)||s.set(t,new Set),s.get(t).add(r),()=>{const o=s.get(t);o&&(o.delete(r),o.size===0&&s.delete(t))}},Re=e=>!e&&e!==!1?{staleTime:6e4,gcTime:3e5}:e===!1?null:e===!0?{staleTime:6e4,gcTime:3e5}:typeof e=="number"?{staleTime:e,gcTime:Math.max(e*5,3e5)}:(0,i.isString)(e)?{staleTime:ee(e),gcTime:3e5}:{staleTime:ee(e.stale||e.staleTime)||6e4,gcTime:ee(e.gc||e.gcTime||e.expire)||3e5,key:e.key},rt=e=>!!e.ref&&e.element.__ref===e.ref,Rt=({config:e,element:t,context:r})=>{try{return Ne(e,t,r)}catch{return null}};let ve=null;const It=()=>{ve||(ve=setInterval(()=>{const e=Date.now(),{cache:t,subscribers:r,active:s,invalidatedAt:o,mounted:n}=A;for(const[a,c]of t){const f=r.get(a);!(f&&f.size>0)&&e-c.time>(c.gcTime||3e5)&&t.delete(a)}for(const[a]of o)!t.has(a)&&!s.has(a)&&o.delete(a);for(const a of n)rt(a)||n.delete(a)},3e4),ve.unref&&ve.unref())};It();const st=3,Ie=e=>Math.min(1e3*2**e,3e4),nt=(e,t)=>{const r=e.retry;return r===void 0&&t?{count:0}:r===!1?{count:0}:r===!0||r===void 0?{count:st,delay:Ie}:typeof r=="number"?{count:r,delay:Ie}:{count:r.count??st,delay:(0,i.isFunction)(r.delay)?r.delay:typeof r.delay=="number"?()=>r.delay:Ie}},ot=async(e,t)=>{const{count:r,delay:s}=t;let o;for(let n=0;n<=r;n++)try{const a=await e();if(a?.error){if(o=a.error,n<r){const c=(0,i.isFunction)(s)?s(n,o):s;await new Promise(f=>setTimeout(f,c));continue}return a}return a}catch(a){if(o=a,n<r){const c=(0,i.isFunction)(s)?s(n,a):s;await new Promise(f=>setTimeout(f,c));continue}throw a}return{data:null,error:o}},Z={focus:new Set,online:new Set};let at=!1;const qt=()=>{if(at||typeof window>"u")return;at=!0;const e=()=>{for(const r of Z.focus)r()},t=()=>{for(const r of Z.online)r()};window.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&e()}),window.addEventListener("focus",e),window.addEventListener("online",t)},it=(e,t)=>{const r=t.__ref;if(e===!0)return{from:r.__state||t.key,method:"select",query:!0,on:"create"};if((0,i.isString)(e))return{from:e,method:"select",query:!0,on:"create"};if((0,i.isObject)(e)){const s={...e};return s.from=s.from||r.__state||t.key,s.method=s.method||"select",s.on=s.on||"create",s.query===void 0&&(s.query=!0),s}return null},Nt=["insert","update","upsert","delete"],ct=e=>Nt.includes(e),qe=e=>e.mutation===!0?!0:e.mutation===!1||e.method!=="rpc"?!1:e.on==="submit"||e.on==="click"||e.invalidates!=null,ne=(e,t)=>{const r=e?.state?.root||t?.state?.root;if(r?.lang)return r.lang},me=(e,t)=>{const s=(e?.state?.root||t?.state?.root)?.__fetchScope;return s?String(s):void 0},Te=(e,t,r)=>{let s;if(!e)s=void 0;else if((0,i.isFunction)(e))s=e(t,t.state);else{s={};for(const o in e){const n=e[o];s[o]=(0,i.isFunction)(n)?n(t,t.state):n}}return s},oe=(e,t)=>(0,i.isFunction)(e)?e(t,t.state):e,Ne=(e,t,r)=>Oe(e,Te(e.params,t,r),me(t,r),ne(t,r),oe(e.page,t),oe(e.cursor,t)),De=async(e,t)=>{if(!e||e.__authInitialized||(e.__authInitialized=!0,!e.getSession))return;const r=(s,o)=>{const n=t.state?.root;n?.update&&n.update({auth:{user:s,session:o,loading:!1}})};try{const s=await e.getSession();r(s?.user||null,s)}catch(s){console.warn("[fetch] Failed to restore auth session:",s.message)}e.onAuthStateChange&&e.onAuthStateChange((s,o)=>{r(o?.user||null,o)})},Ue=async(e,t)=>{if((0,i.isFunction)(e.select))return e.auth!==!1&&await De(e,t),e;if(e.__resolved)return e.auth!==!1&&await De(e.__resolved,t),e.__resolved;if(e.__resolving)return e.__resolving;e.__resolving=yt(e);const r=await e.__resolving;return delete e.__resolving,r?(r.auth=e.auth,r.url=e.url,r.key=e.key,e.__resolved=r,t.fetch=r,e.auth!==!1&&await De(r,t),r):null},C=(e,t,...r)=>{const s=(0,i.isFunction)(e[t])?e[t]:null;s&&s.call(e,...r,e,e.state,e.context)},R=(e,t,r,...s)=>{const o=e&&(0,i.isFunction)(e[r])?e[r]:null;o&&o.call(t,...s,t,t.state,t.context)},ae=e=>{const t={},r=e.node;if(!r)return t;if(r.tagName==="FORM"){const o=new FormData(r);for(const[n,a]of o.entries())t[n]=a;return t}const s=r.querySelectorAll("input, textarea, select");for(let o=0;o<s.length;o++){const n=s[o],a=n.name||n.getAttribute("name");a&&(n.type==="checkbox"?t[a]=n.checked:n.type==="file"?t[a]=n.files:t[a]=n.value)}return t},Ee=e=>e.responseType==="stream"||e.responseType==="response",Ut=["Blob","File","ArrayBuffer","ReadableStream","Response"],$e=e=>e!==null&&typeof e=="object"&&(ArrayBuffer.isView(e)||Ut.includes(Object.prototype.toString.call(e).slice(8,-1))),U=(e,t,r,s={})=>{if(!r&&$e(t))return;const o=r&&r.startsWith("~/"),n=o&&e.state?.root||e.state;if(n?.update)if(o){const a=r.slice(2);t&&typeof t=="object"&&!Array.isArray(t)&&!$e(t)&&a in t?n.update(t,{preventFetch:!0,...s}):n.update({[a]:t},{preventFetch:!0,...s})}else{const a=r?{[r]:t}:t;n.update(a,{preventFetch:!0,...s})}},Qe=Object.freeze({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!0,error:null,status:"success",fetchStatus:"idle"}),ze=e=>({isFetching:!1,isLoading:!1,isStale:!1,isSuccess:!1,error:e,status:"error",fetchStatus:"idle"}),$=(e,t)=>{const r=e?.__ref;r&&(r.__fetchStatus={...t,isError:!!t.error},r.__fetching=t.isFetching,r.__fetchError=t.error)},ut=(e,t,r)=>{const s=e.__pages&&e.__pages.length?e.__pages:[r];(0,i.isFunction)(t.getNextPageParam)&&(e.__nextPageParam=t.getNextPageParam(s[s.length-1],s),e.__hasNextPage=e.__nextPageParam!=null),(0,i.isFunction)(t.getPreviousPageParam)&&(e.__prevPageParam=t.getPreviousPageParam(s[0],s),e.__hasPreviousPage=e.__prevPageParam!=null)},I=async(e,t,r,s={})=>{const o=r?.fetch;if(!o||!t||!t.__ref)return;const n=t.__ref,a=me(t,r);(!n.__fetchScopeOwner||n.__fetchScopeOwner.scope!==a)&&(n.__fetchScopeOwner={scope:a});const c=n.__fetchScopeOwner,f=()=>t.__ref===n&&n.__fetchScopeOwner===c&&me(t,r)===a;if(e.enabled===!1||(0,i.isFunction)(e.enabled)&&!e.enabled(t,t.state)||e.skip===!0||(0,i.isFunction)(e.skip)&&e.skip(t,t.state))return;const y=await Ue(o,r);if(!y||!f())return;const{from:u,method:d,query:S,params:Q,cache:G,transform:z,single:ce,auth:ue,fields:W,as:k,limit:j,offset:q,order:w,headers:te,baseUrl:E,responseType:V,page:m,cursor:F,infinite:B,placeholderData:x,initialData:J,select:T,keepPreviousData:O}=e,K=l=>((0,i.isFunction)(T)&&(l=T(l,t,t.state)),z&&(l=z(l,t,t.state)),l),N=l=>{$(t,ze(l)),C(t,"onFetchError",l),R(e,t,"onFetchError",l)};let Fe=(0,i.isString)(T)?T:void 0;if(S&&(0,i.isFunction)(t.getQuery)){const l=t.getQuery(y.name||"paths");l&&(Fe=l.select||l.length&&l.join(",")||Fe)}const fe=Te(Q,t,r),D=oe(m,t),Ae=oe(F,t),le=qe(e),de=Ee(e)||le?null:Re(G),bt=nt(e,le||ct(d)),We=ne(t,r),_=de?Oe(e,fe,a,We,D,Ae):null,v=P(r);if(!n.__fetchInitialized&&_&&(n.__fetchInitialized=!0,J!==void 0)){const l=(0,i.isFunction)(J)?J():J;se(v,_,l,null)}if((d==="select"||d==="rpc")&&_&&de&&!s.refresh&&!s.force){const l=re(v,_);if(l&&!l.error){const p=Date.now()-l.time,g=l.stale||p>(de.staleTime||0);B&&(0,i.isArray)(l.data)&&!n.__pages&&(n.__pages=[l.data],ut(n,e,l.data));const h=K(l.data);if(!f())return;if(!g){$(t,Qe),U(t,h,k);return}U(t,h,k)}else if(x!==void 0){const p=(0,i.isFunction)(x)?x(t,t.state):x;p!==void 0&&U(t,p,k)}}const pe=_&&!s.force?v.active.get(_):null;if(pe&&!Le(v,_,ke.get(pe)||0)){try{const l=await Promise.race([pe,new Promise((p,g)=>setTimeout(()=>g("DEDUP_TIMEOUT"),15e3))]);if(!f())return;if(l?.error)N(l.error);else if(l?.data!==void 0){const p=!B&&we(v,_,ke.get(pe)||0),g=K(p?p.data:l.data);if(!f())return;U(t,g,k),C(t,"onFetchComplete",g),R(e,t,"onFetchComplete",g)}}catch(l){if(!f())return;l!=="DEDUP_TIMEOUT"&&N(l)}return}const St=!re(v,_)?.data;$(t,{isFetching:!0,isLoading:St,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),C(t,"onFetchStart"),R(e,t,"onFetchStart");const L=r?.analyze?.emitNetwork,Ce=L?typeof performance<"u"?performance.now():Date.now():0;L&&L({phase:"start",mode:"query",from:u,method:d,cacheKey:_,lang:We});const wt=async()=>{if(!f())return;if(ue!==!1&&y.auth!==!1&&y.getSession){const h=await y.getSession();if(!f())return;if(ue===!0&&!h){const b={message:"Not authenticated"};return N(b),{data:null,error:b}}}const l=y[d];if(!(0,i.isFunction)(l))return{data:null,error:{message:`Method "${d}" not found on adapter`}};const p={from:u,select:Fe,params:fe,single:ce,limit:j,offset:q,order:w,headers:te,baseUrl:E};V!==void 0&&(p.responseType=V);const g=ne(t,r);if(g&&(p.headers={...p.headers,"Accept-Language":g}),D!==void 0){if((0,i.isObject)(D))D.offset!==void 0&&(p.offset=D.offset),D.limit!==void 0&&(p.limit=D.limit),D.cursor!==void 0&&(p.params={...p.params,cursor:D.cursor});else if(typeof D=="number"){const h=e.pageSize||j||20;p.offset=(D-1)*h,p.limit=h}}if(Ae!==void 0&&(p.params={...p.params,cursor:Ae}),d==="insert"||d==="update"||d==="upsert"){let h;if(W===!0||e.on==="submit")h=ae(t);else if((0,i.isArray)(W)){const b=ae(t);h={};for(const Y of W)h[Y]=b[Y]}else t.state?.parse?h=t.state.parse():(0,i.isObject)(t.state)&&(h={...t.state});z&&(h=z(h,t,t.state)),p.data=h}if(d==="rpc"){let h=fe;if(e.on==="submit"){const b=ae(t);h=e.transformParams?e.transformParams(b,t,t.state):b}p.params=h,p.read=!le&&e.read!==!1}if(d==="subscribe"){if((0,i.isFunction)(n.__unsubscribe)){const b=n.__unsubscribe;n.__unsubscribe=null;try{b()}catch{}}const h=y.subscribe({from:u,params:fe,on:e.subscribeOn},(b,Y,Ve)=>{f()&&(U(t,b,k),C(t,"onFetchComplete",b),R(e,t,"onFetchComplete",b))});return f()?(n.__unsubscribe=h,{data:null,error:null,subscribed:!0}):((0,i.isFunction)(h)&&h(),{data:null,error:null,subscribed:!0})}return l(p)},H=++Se,he=ot(wt,bt);ke.set(he,H),_&&v.active.set(_,he);try{const l=await he;if(le&&e.invalidates&&l&&!l.error&&!l.subscribed&&ft(v,e.invalidates,u),!f()||l?.subscribed)return;const{data:p,error:g}=l||{};if(g){_&&!we(v,_,H)&&se(v,_,null,g,H),N(g),L&&L({phase:"error",mode:"query",from:u,method:d,cacheKey:_,error:g.message||g,durationMs:(typeof performance<"u"?performance.now():Date.now())-Ce});return}if(p!==void 0){let h=p;if((d==="select"||d==="rpc")&&_){const Y=!B&&we(v,_,H);if(Y)h=Y.data;else{const Ve=se(v,_,p,null,H,Le(v,_,H));Ve.gcTime=de?.gcTime||3e5}}let b=h;if(B&&(0,i.isArray)(p)&&((!n.__pages||!s.direction)&&(n.__pages=[]),s.direction==="previous"?n.__pages.unshift(p):n.__pages.push(p),b=n.__pages.flat(),ut(n,e,p)),b=K(b),!f())return;$(t,Qe),(!O||b!==void 0)&&U(t,b,k),C(t,"onFetchComplete",b),R(e,t,"onFetchComplete",b),L&&L({phase:"success",mode:"query",ok:!0,from:u,method:d,cacheKey:_,durationMs:(typeof performance<"u"?performance.now():Date.now())-Ce})}}catch(l){if(!f())return;N(l),L&&L({phase:"error",mode:"query",from:u,method:d,cacheKey:_,error:l.message||String(l),durationMs:(typeof performance<"u"?performance.now():Date.now())-Ce})}finally{_&&v.active.get(_)===he&&v.active.delete(_)}},$t=(e,t,r)=>{const s=e.on,o=t.__ref;if(!o)return;o.__fetchListeners||(o.__fetchListeners=[]);const n=e.__runner||I;if(s==="submit"){const a=f=>{f.preventDefault(),n(e,t,r)},c=t.node;c&&(c.addEventListener("submit",a),o.__fetchListeners.push(()=>c.removeEventListener("submit",a)))}else if(s==="click"){const a=()=>n(e,t,r),c=t.node;c&&(c.addEventListener("click",a),o.__fetchListeners.push(()=>c.removeEventListener("click",a)))}else s==="stateChange"&&Qt(e,t,r,n)},Qt=(e,t,r,s)=>{const o=t.__ref;let n;const a=(0,ht.createEffect)(()=>{let c;try{c=JSON.stringify([Te(e.params,t,r)??null,(0,i.isFunction)(e.enabled)?!!e.enabled(t,t.state):e.enabled!==!1,(0,i.isFunction)(e.skip)?!!e.skip(t,t.state):e.skip===!0,oe(e.page,t)??null])}catch{return}if(n===void 0){n=c;return}c!==n&&(n=c,queueMicrotask(()=>s(e,t,r)))});Array.isArray(o.__effects)?o.__effects.push(a):o.__fetchListeners.push(()=>a.dispose())},zt=(e,t,r)=>{const s=t.__ref;s.__fetchCleanups||(s.__fetchCleanups=[]),qt();const o=e.refetchInterval;if(o){const f=typeof o=="number"?o:ee(o);if(f>0){const y=setInterval(()=>{(e.refetchIntervalInBackground||typeof document>"u"||document.visibilityState==="visible")&&I(e,t,r,{force:!0})},f);s.__fetchCleanups.push(()=>clearInterval(y))}}const n=Ee(e),a=e.refetchOnWindowFocus===void 0?!n:e.refetchOnWindowFocus!==!1,c=e.refetchOnReconnect===void 0?!n:e.refetchOnReconnect!==!1;if(a){const f=()=>{const y=Ne(e,t,r),u=re(P(r),y),d=Re(e.cache);(!u||u.stale||Date.now()-u.time>(d?.staleTime||0))&&I(e,t,r,{force:!0})};Z.focus.add(f),s.__fetchCleanups.push(()=>Z.focus.delete(f))}if(c){const f=()=>I(e,t,r,{force:!0});Z.online.add(f),s.__fetchCleanups.push(()=>Z.online.delete(f))}},jt=(e,t,r)=>{if(!t.optimistic)return null;const s=e.__ref,o=t.as,n=e.state?.parse?e.state.parse():(0,i.isObject)(e.state)?{...e.state}:e.state;s.__optimisticSnapshot=n;const a=(0,i.isFunction)(t.optimistic)?t.optimistic(r,n,e):t.optimistic;return a!==void 0&&U(e,a,o),n},je=(e,t)=>{const r=e.__ref;if(!r||!t.optimistic)return;const s=r.__optimisticSnapshot;s!==void 0&&(U(e,s,t.as),delete r.__optimisticSnapshot)},ie=e=>{if(!e)return()=>!0;if((0,i.isString)(e))return t=>t.includes(e);if((0,i.isArray)(e)){const t=e.join(":");return r=>r.includes(t)}return e instanceof RegExp?t=>(e.lastIndex=0,e.test(t)):(0,i.isFunction)(e)?t=>{try{return!!e(t)}catch{return!1}}:()=>!1},Bt=(e,t)=>{const r=[];for(const s of e.mounted){if(!rt(s)){e.mounted.delete(s);continue}const o=Rt(s);o&&t(o)&&r.push(I(s.config,s.element,s.context,{refresh:!0}))}return Promise.allSettled(r).then(()=>{})},Be=(e,t)=>{(0,_t.dropEarly)();for(const[r,s]of e.cache)t(r)&&(s.stale=!0,ge(e,r));for(const[r]of e.active)!e.cache.has(r)&&t(r)&&ge(e,r);return Bt(e,t)},ft=(e,t,r)=>{const s=((0,i.isArray)(t)?t:[t]).map(o=>o===!0||o==="*"?n=>n.startsWith(r+":"):o?ie(o):()=>!1);return Be(e,o=>s.some(n=>n(o)))},Ke=(e,t)=>{for(const[r]of e.cache)t(r)&&tt(e,r);for(const[r]of e.active)t(r)&&ge(e,r)},Ye=()=>!0,lt=(e,t)=>re(e,t)?.data??void 0,dt=(e,t,r)=>{const s=re(e,t),o=(0,i.isFunction)(r)?r(s?.data):r;se(e,t,o,null)},Kt=async(e,t,r)=>{const s=r?.fetch;if(!s)return;const o=await Ue(s,r);if(!o)return;const n=t.__ref,{method:a,from:c,fields:f,transform:y,as:u,on:d,auth:S,headers:Q,baseUrl:G,responseType:z,invalidates:ce,optimistic:ue,onMutate:W,onSuccess:k,onError:j,onSettled:q}=e;let w;if(f===!0||d==="submit")w=ae(t);else if((0,i.isArray)(f)){const m=ae(t);w={};for(const F of f)w[F]=m[F]}else t.state?.parse?w=t.state.parse():(0,i.isObject)(t.state)&&(w={...t.state});y&&(w=y(w,t,t.state)),(0,i.isFunction)(W)&&W(w,t,t.state);const te=ue?jt(t,e,w):null;$(t,{isFetching:!0,isLoading:!1,isStale:!1,isSuccess:!1,error:null,status:"pending",fetchStatus:"fetching"}),C(t,"onFetchStart"),R(e,t,"onFetchStart");const E=r?.analyze?.emitNetwork,V=E?typeof performance<"u"?performance.now():Date.now():0;E&&E({phase:"start",mode:"mutation",from:c,method:a});try{if(S!==!1&&o.auth!==!1&&o.getSession){const K=await o.getSession();if(S===!0&&!K){te!==void 0&&je(t,e);const N={message:"Not authenticated"};C(t,"onFetchError",N),R(e,t,"onFetchError",N);return}}const m=o[a];if(!(0,i.isFunction)(m))return;const F={from:c,data:w,headers:Q,baseUrl:G};z!==void 0&&(F.responseType=z),e.params&&(F.params=Te(e.params,t,r));const B=ne(t,r);B&&(F.headers={...F.headers,"Accept-Language":B});const x=nt(e,!0),J=await ot(()=>m(F),x),{data:T,error:O}=J||{};if(O){te!==void 0&&je(t,e),$(t,ze(O)),C(t,"onFetchError",O),(0,i.isFunction)(j)&&j(O,w,t),(0,i.isFunction)(q)&&q(null,O,w,t),E&&E({phase:"error",mode:"mutation",from:c,method:a,error:O.message||String(O),durationMs:(typeof performance<"u"?performance.now():Date.now())-V});return}if(delete n.__optimisticSnapshot,$(t,Qe),T!==void 0&&(u||!$e(T))){const K=u?{[u]:T}:T;t.state?.update&&t.state.update(K,{preventFetch:!0})}C(t,"onFetchComplete",T),R(e,t,"onFetchComplete",T),(0,i.isFunction)(k)&&k(T,w,t),(0,i.isFunction)(q)&&q(T,null,w,t),E&&E({phase:"success",mode:"mutation",ok:!0,from:c,method:a,durationMs:(typeof performance<"u"?performance.now():Date.now())-V}),ce&&ft(P(r),ce,c)}catch(m){te!==void 0&&je(t,e),$(t,ze(m)),C(t,"onFetchError",m),R(e,t,"onFetchError",m),(0,i.isFunction)(j)&&j(m,w,t),(0,i.isFunction)(q)&&q(null,m,w,t),E&&E({phase:"error",mode:"mutation",from:c,method:a,error:m.message||String(m),durationMs:(typeof performance<"u"?performance.now():Date.now())-V})}finally{n.__fetching=!1}},Yt=e=>{const t=r=>{try{r()}catch{}};for(const r of e.__fetchCleanups||[])t(r);for(const r of e.__fetchListeners||[])t(r);(0,i.isFunction)(e.__unsubscribe)&&t(e.__unsubscribe);for(const r of e.__fetchMounted||[])P(r.context).mounted.delete(r);e.__fetchCleanups=[],e.__fetchListeners=[],e.__unsubscribe=null,e.__fetchMounted=[]},Ge=(e,t,r,s)=>{if(!e||!s?.fetch)return;const n=(0,i.exec)(e,t);if(!n)return;const a=(0,i.isArray)(n)?n.map(u=>it((0,i.exec)(u,t),t)).filter(Boolean):[it(n,t)].filter(Boolean),c=t.__ref,f=P(s);if(c.__fetchMounted)for(const u of c.__fetchMounted)f.mounted.delete(u);c.__fetchMounted=[],!c.__fetchDisposer&&(0,i.isArray)(c.__effects)&&(c.__fetchDisposer={dispose:()=>Yt(c)},c.__effects.push(c.__fetchDisposer));const y=!Xe(s);for(const u of a){const d=ct(u.method),S=d?Kt:I,Q=!d&&!qe(u)&&u.method!=="subscribe";if(u.on==="create"?S(u,t,s):queueMicrotask(()=>$t({...u,__runner:S},t,s)),Q&&u.on==="create"&&(y&&(u.refetchInterval||u.refetchOnWindowFocus!==!1||u.refetchOnReconnect!==!1)&&zt(u,t,s),!Ee(u))){const G={element:t,ref:c,config:u,context:s};f.mounted.add(G),c.__fetchMounted.push(G)}}c.refetch=u=>{for(const d of a)I(d,t,s,{force:!0,...u})},c.fetchNextPage=()=>{const u=a[0];if(!u||!u.infinite)return;const d=c.__nextPageParam;if(d==null)return;const S={...u,cursor:d};I(S,t,s,{direction:"next",force:!0})},c.fetchPreviousPage=()=>{const u=a[0];if(!u||!u.infinite)return;const d=c.__prevPageParam;if(d==null)return;const S={...u,cursor:d};I(S,t,s,{direction:"previous",force:!0})}},Gt={invalidateQueries:e=>Be(A,ie(e)),removeQueries:e=>{Ke(A,e?ie(e):Ye)},getQueryData:e=>lt(A,e),setQueryData:(e,t)=>{dt(A,e,t)},prefetchQuery:async(e,t)=>{const r=t?.fetch;if(!r)return;const s=P(t),o=await Ue(r,t);if(!o)return;const n=e.method||"select",a=me(null,t),c=ne(null,t),f=Oe({...e,method:n},e.params,a,c),y=o[n];if(!(0,i.isFunction)(y))return;const u={from:e.from,params:e.params,limit:e.limit,offset:e.offset,order:e.order,single:e.single,headers:e.headers,baseUrl:e.baseUrl};c&&(u.headers={...u.headers,"Accept-Language":c}),e.responseType!==void 0&&(u.responseType=e.responseType),n==="rpc"&&(u.read=!qe(e)&&e.read!==!1);const d=++Se,S=await y(u);if(S?.data!==void 0&&!S?.error&&!Ee(e)&&!we(s,f,d)){const Q=se(s,f,S.data,null,d,Le(s,f,d));Q.gcTime=Re(e.cache)?.gcTime||3e5}return S},getCache:()=>A.cache,clear:()=>Ke(A,Ye),dropNonLang:e=>{if(!e)return;const t=`:${e}`;for(const[r]of A.cache)r.match(/:([a-z]{2,3})$/i)&&(r.endsWith(t)||tt(A,r))}},pt=(e,t)=>(0,i.isObject)(e)?Ne({method:"select",...e},t,t?.context):e,Wt={invalidateQueries(e){return Be(P(this?.context),ie(e))},removeQueries(e){Ke(P(this?.context),e?ie(e):Ye)},getQueryData(e){return lt(P(this?.context),pt(e,this))},setQueryData(e,t){dt(P(this?.context),pt(e,this),t)}},Vt={name:"fetch",create(e){const t=e.fetch;t&&(e.parent||P(e.context).active.clear(),Ge(t,e,e.state,e.context))}};var xt=Ge;
@@ -0,0 +1 @@
1
+ "use strict";var r=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var h=(t,s)=>{for(var e in s)r(t,e,{get:s[e],enumerable:!0})},w=(t,s,e,c)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of l(s))!a.call(t,o)&&o!==e&&r(t,o,{get:()=>s[o],enumerable:!(c=u(s,o))||c.enumerable});return t};var f=t=>w(r({},"__esModule",{value:!0}),t);var q={};h(q,{requestFinished:()=>b,requestStarted:()=>p,requestsInFlight:()=>g,whenRequestsIdle:()=>m});module.exports=f(q);const i=Symbol.for("@symbo.ls/fetch:IN_FLIGHT"),n=()=>globalThis[i]||(globalThis[i]={count:0,waiters:[]}),p=()=>{n().count++},b=()=>{const t=n();if(t.count=t.count>0?t.count-1:0,t.count===0&&t.waiters.length){const s=t.waiters;t.waiters=[];for(const e of s)e()}},g=()=>n().count,m=()=>{const t=n();return t.count===0?Promise.resolve():new Promise(s=>{t.waiters.push(s)})};
@@ -1 +1 @@
1
- import{openEarly as J,takeEarly as I,earlyKey as W,isScalarParams as Y,withReads as D,queryHeaderEntries as F}from"../early.js";const N=(t,n,r)=>{const d=n&&!n.startsWith("/")?"/":"",a=new URL(`${t}${d}${n}`);if(r)for(const c in r){const s=r[c];s!=null&&a.searchParams.set(c,typeof s=="object"?JSON.stringify(s):s)}return a.toString()},G=({params:t,select:n,limit:r,offset:d,order:a,single:c})=>{const s={...t};return n&&(s.select=n),r&&(s.limit=r),d&&(s.offset=d),c&&(s.single=!0),a&&(typeof a=="string"?s.order=a:Array.isArray(a)?s.order=a.map(b=>`${b.by}:${b.asc===!1?"desc":"asc"}`).join(","):a.by&&(s.order=`${a.by}:${a.asc===!1?"desc":"asc"}`)),s},H=t=>Object.prototype.toString.call(t).slice(8,-1),L=["auto","json","text","blob","arrayBuffer","stream","response"],z={json:async t=>{const n=await t.text();return n?JSON.parse(n):null},text:t=>t.text(),blob:t=>t.blob(),arrayBuffer:t=>t.arrayBuffer(),stream:t=>t.body,response:t=>t},M=t=>{const n=t.headers.get("content-type");return n&&n.includes("json")?t.json():t.text()},Q=async t=>{const n=await t.text(),r=t.headers.get("content-type");if(n&&r&&r.includes("json"))try{return JSON.parse(n)}catch{}return n},_=(t,n)=>t?.message||t?.error||n.statusText||`HTTP ${n.status}`,f=async(t,n,r,d)=>{const a=r??"auto";if(!L.includes(a))throw new TypeError(`@symbo.ls/fetch rest: unknown responseType "${a}" \u2014 use one of: ${L.join(", ")}`);const c=d&&await d||await globalThis.fetch(t,n);if(a==="auto"){const s=await M(c);return{data:s,error:c.ok?null:_(s,c),status:c.status}}if(!c.ok){const s=await Q(a==="response"?c.clone():c);return{data:a==="response"?c:s,error:_(s,c),status:c.status}}return{data:await z[a](c),error:null,status:c.status}},K=["FormData","Blob","File","URLSearchParams","ReadableStream","ArrayBuffer"],V=t=>t!==null&&typeof t=="object"&&(ArrayBuffer.isView(t)||K.includes(H(t))),v=t=>Array.isArray(t)?t:typeof t.entries=="function"?t.entries():Object.entries(t),R=(...t)=>{const n={},r=new Map;for(const d of t)if(d)for(const[a,c]of v(d)){const s=a.toLowerCase();if(r.has(s)&&delete n[r.get(s)],c==null){r.delete(s);continue}r.set(s,a),n[a]=c}return n},X={"Content-Type":"application/json"},Z={"Content-Type":void 0},C=t=>{if(!t||typeof t!="object")return null;const n={};for(const{header:r,param:d}of F(t.query))n[r]=d;return{params:n,rpc:t.rpc==="get"}},tt="content-type",q=(t,n)=>{const r=Object.keys(n);if(!r.length)return t;const d=new URL(t);for(const a of r)d.searchParams.set(a,n[a]);return d.toString()},st=async({url:t,headers:n,auth:r,fetchOptions:d,early:a,reads:c})=>{if(!t)throw new Error("@symbo.ls/fetch rest: url is required");return et(t,n,r,d,a,c)},et=(t,n={},r,d={},a,c)=>{let s=r?.token||null;const b=J(D(a,c),n),x=C(c),B=e=>{if(!x)return null;const o={},l={},i={};for(const u in e){const p=u.toLowerCase();if(p==="authorization")return null;if(p===tt)continue;l[u]=e[u];const y=x.params[p];y?i[y]=e[u]:o[u]=e[u]}return{headers:o,adoptHeaders:l,query:i}},j=(e,o)=>{if(!b)return null;let l="";for(const i in o){const u=i.toLowerCase();if(u==="accept-language")l=String(o[i]);else if(b.carried[u]!==o[i])return null}try{return I(W(e(),l),b.maxAge)}catch{return null}},k=()=>s?{Authorization:`Bearer ${s}`}:null,O=e=>R(n,k(),e),T=e=>({...d,...e}),U=(e,o,l)=>{if(!V(o))return T({method:e,headers:R(n,k(),X,l),body:JSON.stringify(o)});const i={method:e,headers:R(n,k(),Z,l),body:o};return H(o)==="ReadableStream"&&(i.duplex="half"),T(i)},S=(e,o)=>{const l=o||t;if(e&&(e.startsWith("http://")||e.startsWith("https://")))return e;const i=e&&!e.startsWith("/")?"/":"";return`${l}${i}${e||""}`};return{name:"rest",setToken:e=>{s=e},getSession:async()=>{if(!r?.sessionUrl)return s?{token:s}:null;const e=await f(S(r.sessionUrl,r.baseUrl),T({headers:O()}));return e.error?null:e.data},signIn:async e=>{if(!r?.signInUrl)throw new Error("rest: auth.signInUrl not configured");const o=await f(S(r.signInUrl,r.baseUrl),U("POST",e));return o.data?.token&&(s=o.data.token),o},signOut:async()=>(r?.signOutUrl&&await f(S(r.signOutUrl,r.baseUrl),T({method:"POST",headers:O()})),s=null,{error:null}),select:({from:e,params:o,select:l,limit:i,offset:u,order:p,single:y,headers:h,baseUrl:$,responseType:P})=>{const w=N($||t,e||"",G({params:o,select:l,limit:i,offset:u,order:p,single:y})),g=O(h),E=B(g);if(E){const A=T({headers:E.headers});return f(q(w,E.query),A,P,j(()=>w,E.adoptHeaders))}const m=T({headers:g});return f(w,m,P,j(()=>w,m.headers))},rpc:async({from:e,params:o,headers:l,baseUrl:i,responseType:u,read:p})=>{const y=Y(o),h=()=>N(i||t,`rpc/${e}`,o),$=A=>f(S(`rpc/${e}`,i),U("POST",o,l),u,A),P=O(l),w=p===!0&&x&&x.rpc&&y?B(P):null;let g=null;if(w)try{g=h()}catch{g=null}if(!g)return $(b&&b.rpc&&y?j(h,P):null);const E=T({method:"GET",headers:w.headers}),m=await f(q(g,w.query),E,u,j(()=>g,w.adoptHeaders));return m.status===405?$(null):m},insert:({from:e,data:o,headers:l,baseUrl:i,responseType:u})=>f(S(e,i),U("POST",o,l),u),update:({from:e,data:o,params:l,method:i,headers:u,baseUrl:p,responseType:y})=>{const h=l?.id||o?.id,$=h?`${e}/${h}`:e;return f(S($,p),U(i||"PATCH",o,u),y)},upsert:({from:e,data:o,params:l,method:i,headers:u,baseUrl:p,responseType:y})=>{const h=l?.id||o?.id,$=h?`${e}/${h}`:e;return f(S($,p),U(i||"PUT",o,u),y)},delete:({from:e,params:o,headers:l,baseUrl:i,responseType:u})=>{const p=o?.id,y=p?`${e}/${p}`:e;return f(S(y,i),T({method:"DELETE",headers:O(l)}),u)}}};export{N as buildUrl,v as headerEntries,et as restAdapter,G as selectQuery,st as setup,q as withQuery};
1
+ import{openEarly as Y,takeEarly as H,earlyKey as L,isScalarParams as D,withReads as G,queryHeaderEntries as z}from"../early.js";import{requestStarted as M,requestFinished as Q}from"../inflight.js";const _=(t,n,r)=>{const i=n&&!n.startsWith("/")?"/":"",s=new URL(`${t}${i}${n}`);if(r)for(const l in r){const o=r[l];o!=null&&s.searchParams.set(l,typeof o=="object"?JSON.stringify(o):o)}return s.toString()},K=({params:t,select:n,limit:r,offset:i,order:s,single:l})=>{const o={...t};return n&&(o.select=n),r&&(o.limit=r),i&&(o.offset=i),l&&(o.single=!0),s&&(typeof s=="string"?o.order=s:Array.isArray(s)?o.order=s.map(y=>`${y.by}:${y.asc===!1?"desc":"asc"}`).join(","):s.by&&(o.order=`${s.by}:${s.asc===!1?"desc":"asc"}`)),o},J=t=>Object.prototype.toString.call(t).slice(8,-1),F=["auto","json","text","blob","arrayBuffer","stream","response"],V={json:async t=>{const n=await t.text();return n?JSON.parse(n):null},text:t=>t.text(),blob:t=>t.blob(),arrayBuffer:t=>t.arrayBuffer(),stream:t=>t.body,response:t=>t},v=t=>{const n=t.headers.get("content-type");return n&&n.includes("json")?t.json():t.text()},X=async t=>{const n=await t.text(),r=t.headers.get("content-type");if(n&&r&&r.includes("json"))try{return JSON.parse(n)}catch{}return n},I=(t,n)=>t?.message||t?.error||n.statusText||`HTTP ${n.status}`,Z=(t,n)=>{const r=t.body,i=n==="json"||n==="auto"&&/json/i.test(t.type);if(!i&&n!=="auto"&&n!=="text")return null;let s;try{s=i?r?JSON.parse(r):null:r}catch{return!1}return{data:s,error:null,status:t.status}},w=async(t,n,r,i)=>{const s=r??"auto";if(!F.includes(s))throw new TypeError(`@symbo.ls/fetch rest: unknown responseType "${s}" \u2014 use one of: ${F.join(", ")}`);M();try{return await C(t,n,s,i)}finally{Q()}},C=async(t,n,r,i)=>{let s=i?await i:null;if(s&&s.seeded===!0){const o=Z(s,r);if(o)return o;s=o===!1?null:new Response(s.body,{status:s.status,headers:{"content-type":s.type}})}const l=s||await globalThis.fetch(t,n);if(r==="auto"){const o=await v(l);return{data:o,error:l.ok?null:I(o,l),status:l.status}}if(!l.ok){const o=await X(r==="response"?l.clone():l);return{data:r==="response"?l:o,error:I(o,l),status:l.status}}return{data:await V[r](l),error:null,status:l.status}},tt=["FormData","Blob","File","URLSearchParams","ReadableStream","ArrayBuffer"],et=t=>t!==null&&typeof t=="object"&&(ArrayBuffer.isView(t)||tt.includes(J(t))),nt=t=>Array.isArray(t)?t:typeof t.entries=="function"?t.entries():Object.entries(t),B=(...t)=>{const n={},r=new Map;for(const i of t)if(i)for(const[s,l]of nt(i)){const o=s.toLowerCase();if(r.has(o)&&delete n[r.get(o)],l==null){r.delete(o);continue}r.set(o,s),n[s]=l}return n},rt={"Content-Type":"application/json"},st={"Content-Type":void 0},ot=t=>{if(!t||typeof t!="object")return null;const n={};for(const{header:r,param:i}of z(t.query))n[r]=i;return{params:n,rpc:t.rpc==="get"}},at="content-type",W=(t,n)=>{const r=Object.keys(n);if(!r.length)return t;const i=new URL(t);for(const s of r)i.searchParams.set(s,n[s]);return i.toString()},dt=async({url:t,headers:n,auth:r,fetchOptions:i,early:s,reads:l})=>{if(!t)throw new Error("@symbo.ls/fetch rest: url is required");return ct(t,n,r,i,s,l)},ct=(t,n={},r,i={},s,l)=>{let o=r?.token||null;const y=Y(G(s,l),n),j=ot(l),q=e=>{if(!j)return null;const a={},u={},c={};for(const d in e){const p=d.toLowerCase();if(p==="authorization")return null;if(p===at)continue;u[d]=e[d];const f=j.params[p];f?c[f]=e[d]:a[d]=e[d]}return{headers:a,adoptHeaders:u,query:c}},A=(e,a)=>{if(!y)return null;let u="";for(const c in a){const d=c.toLowerCase();if(d==="accept-language")u=String(a[c]);else if(y.carried[d]!==a[c])return null}try{return H(L(e(),u),y.maxAge)}catch{return null}},R=(e,a)=>{if(!y||!y.seeded)return null;let u="";for(const c in a){const d=c.toLowerCase();if(d==="accept-language")u=String(a[c]);else if(d!=="accept")return null}try{return H(L(e,u),y.maxAge)}catch{return null}},N=()=>o?{Authorization:`Bearer ${o}`}:null,U=e=>B(n,N(),e),S=e=>({...i,...e}),m=(e,a,u)=>{if(!et(a))return S({method:e,headers:B(n,N(),rt,u),body:JSON.stringify(a)});const c={method:e,headers:B(n,N(),st,u),body:a};return J(a)==="ReadableStream"&&(c.duplex="half"),S(c)},g=(e,a)=>{const u=a||t;if(e&&(e.startsWith("http://")||e.startsWith("https://")))return e;const c=e&&!e.startsWith("/")?"/":"";return`${u}${c}${e||""}`};return{name:"rest",setToken:e=>{o=e},getSession:async()=>{if(!r?.sessionUrl)return o?{token:o}:null;const e=await w(g(r.sessionUrl,r.baseUrl),S({headers:U()}));return e.error?null:e.data},signIn:async e=>{if(!r?.signInUrl)throw new Error("rest: auth.signInUrl not configured");const a=await w(g(r.signInUrl,r.baseUrl),m("POST",e));return a.data?.token&&(o=a.data.token),a},signOut:async()=>(r?.signOutUrl&&await w(g(r.signOutUrl,r.baseUrl),S({method:"POST",headers:U()})),o=null,{error:null}),select:({from:e,params:a,select:u,limit:c,offset:d,order:p,single:f,headers:b,baseUrl:T,responseType:P})=>{const h=_(T||t,e||"",K({params:a,select:u,limit:c,offset:d,order:p,single:f})),O=U(b),$=q(O);if($){const k=S({headers:$.headers}),x=W(h,$.query);return w(x,k,P,R(x,$.headers)||A(()=>h,$.adoptHeaders))}const E=S({headers:O});return w(h,E,P,R(h,E.headers)||A(()=>h,E.headers))},rpc:async({from:e,params:a,headers:u,baseUrl:c,responseType:d,read:p})=>{const f=D(a),b=()=>_(c||t,`rpc/${e}`,a),T=x=>w(g(`rpc/${e}`,c),m("POST",a,u),d,x),P=U(u),h=p===!0&&j&&j.rpc&&f?q(P):null;let O=null;if(h)try{O=b()}catch{O=null}if(!O)return T(y&&y.rpc&&f?A(b,P):null);const $=S({method:"GET",headers:h.headers}),E=W(O,h.query),k=await w(E,$,d,R(E,h.headers)||A(()=>O,h.adoptHeaders));return k.status===405?T(null):k},insert:({from:e,data:a,headers:u,baseUrl:c,responseType:d})=>w(g(e,c),m("POST",a,u),d),update:({from:e,data:a,params:u,method:c,headers:d,baseUrl:p,responseType:f})=>{const b=u?.id||a?.id,T=b?`${e}/${b}`:e;return w(g(T,p),m(c||"PATCH",a,d),f)},upsert:({from:e,data:a,params:u,method:c,headers:d,baseUrl:p,responseType:f})=>{const b=u?.id||a?.id,T=b?`${e}/${b}`:e;return w(g(T,p),m(c||"PUT",a,d),f)},delete:({from:e,params:a,headers:u,baseUrl:c,responseType:d})=>{const p=a?.id,f=p?`${e}/${p}`:e;return w(g(f,c),S({method:"DELETE",headers:U(u)}),d)}}};export{_ as buildUrl,nt as headerEntries,ct as restAdapter,K as selectQuery,dt as setup,W as withQuery};
package/dist/esm/early.js CHANGED
@@ -1 +1 @@
1
- import{jsonForScript as g}from"@symbo.ls/utils";const b="@symbo.ls/fetch:EARLY",p=3e4,h=(e,n)=>{const r=new URL(e);return r.searchParams.sort(),r.toString()+" "+(n||"")},k=e=>{if(e==null)return!0;if(typeof e!="object"||Array.isArray(e))return!1;const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)return!1;for(const r in e){const t=e[r];if(!(t===void 0||typeof t=="string"||typeof t=="boolean")&&!(typeof t=="number"&&isFinite(t)))return!1}return!0},E=(e,n)=>{const r=s=>String(s).split("/").filter(Boolean),t=r(n);let o=null;for(let s=0;s<e.length;s++){const i=r(e[s]),c=i[i.length-1]==="*",a=c?i.length-1:i.length;if(c?t.length<a:t.length!==a)continue;const d={};let u=c?-1:0,f=!0;for(let l=0;l<a;l++)if(i[l].charAt(0)===":"){try{d[i[l].slice(1)]=decodeURIComponent(t[l])}catch{f=!1;break}u+=1}else if(i[l]===t[l])u+=3;else{f=!1;break}f&&(!o||u>o.score)&&(o={index:s,params:d,score:u})}return o&&{index:o.index,params:o.params}},y=()=>Symbol.for(b),m=(e,n)=>{const r=[];for(const t in e||{}){const o=t.toLowerCase(),s={name:t,header:o,param:e[t],found:!1,value:void 0};for(const i in n||{})i.toLowerCase()===o&&(s.found=!0,s.value=n[i]);r.push(s)}return r},w=(e,n)=>{if(!e||typeof e!="object"||!n||typeof n!="object")return e;const r={...e};return r.query===void 0&&n.query!==void 0&&(r.query=n.query),r.rpc===void 0&&n.rpc!==void 0&&(r.rpc=n.rpc),r},j=(e,n)=>{const r=y();if(!e||typeof e!="object"){const s=globalThis[r];return s&&s.seeded?{carried:{},rpc:!1,maxAge:p}:null}globalThis[r]||(globalThis[r]={entries:{}});const t={};for(const{header:s,found:i,value:c}of m(e.query,n))i&&(t[s]=c);const o=typeof e.maxAge=="number"&&e.maxAge>=0?e.maxAge:p;return{carried:t,rpc:e.rpc==="get",maxAge:o}},v=(e,n=p)=>{const r=globalThis[y()],t=r&&r.entries&&r.entries[e];return!t||(delete r.entries[e],!(Date.now()-t.time<=n))?null:Promise.resolve(t.answer).then(o=>o&&o.ok&&!o.bodyUsed?o:null,()=>null)},S=()=>{const e=globalThis[y()];e&&e.entries&&(e.entries={})},R=e=>{const n=(Array.isArray(e)?e:[]).filter(t=>t&&typeof t.url=="string"&&typeof t.body=="string");if(!n.length)return"";const r=g(n.map(t=>({k:h(t.url,t.lang||""),s:t.status||200,t:t.type||"application/json",b:t.body})));return"<script>(function(){try{var k=Symbol.for("+JSON.stringify(b)+"),r=globalThis[k]||(globalThis[k]={entries:{}}),t=Date.now(),l="+r+';r.seeded=true;r.entries=r.entries||{};for(var i=0;i<l.length;i++){var e=l[i];r.entries[e.k]={time:t,answer:Promise.resolve(new Response(e.b,{status:e.s,headers:{"content-type":e.t}}))}}}catch(e){}})()<\/script>'};export{b as EARLY_KEY,p as EARLY_MAX_AGE,R as createEarlySeedScript,S as dropEarly,h as earlyKey,k as isScalarParams,E as matchEarlyRoute,j as openEarly,m as queryHeaderEntries,v as takeEarly,w as withReads};
1
+ import{jsonForScript as g,readJsonDataBlock as m}from"@symbo.ls/utils";const h="@symbo.ls/fetch:EARLY",p=3e4,x=(e,t)=>{const r=new URL(e);return r.searchParams.sort(),r.toString()+" "+(t||"")},S=e=>{if(e==null)return!0;if(typeof e!="object"||Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)return!1;for(const r in e){const n=e[r];if(!(n===void 0||typeof n=="string"||typeof n=="boolean")&&!(typeof n=="number"&&isFinite(n)))return!1}return!0},w=(e,t)=>{const r=o=>String(o).split("/").filter(Boolean),n=r(t);let s=null;for(let o=0;o<e.length;o++){const i=r(e[o]),c=i[i.length-1]==="*",f=c?i.length-1:i.length;if(c?n.length<f:n.length!==f)continue;const y={};let a=c?-1:0,d=!0;for(let l=0;l<f;l++)if(i[l].charAt(0)===":"){try{y[i[l].slice(1)]=decodeURIComponent(n[l])}catch{d=!1;break}a+=1}else if(i[l]===n[l])a+=3;else{d=!1;break}d&&(!s||a>s.score)&&(s={index:o,params:y,score:a})}return s&&{index:s.index,params:s.params}},u=()=>Symbol.for(h),k=(e,t)=>{const r=[];for(const n in e||{}){const s=n.toLowerCase(),o={name:n,header:s,param:e[n],found:!1,value:void 0};for(const i in t||{})i.toLowerCase()===s&&(o.found=!0,o.value=t[i]);r.push(o)}return r},T=(e,t)=>{if(!e||typeof e!="object"||!t||typeof t!="object")return e;const r={...e};return r.query===void 0&&t.query!==void 0&&(r.query=t.query),r.rpc===void 0&&t.rpc!==void 0&&(r.rpc=t.rpc),r},L=(e,t)=>{const r=u();if(E(),!e||typeof e!="object"){const o=globalThis[r];return o&&o.seeded?{carried:{},rpc:!1,maxAge:p,seeded:!0}:null}globalThis[r]||(globalThis[r]={entries:{}});const n={};for(const{header:o,found:i,value:c}of k(e.query,t))i&&(n[o]=c);const s=typeof e.maxAge=="number"&&e.maxAge>=0?e.maxAge:p;return{carried:n,rpc:e.rpc==="get",maxAge:s,seeded:!!globalThis[r].seeded}},R=(e,t=p)=>{const r=globalThis[u()],n=r&&r.entries&&r.entries[e];return!n||(delete r.entries[e],!(Date.now()-n.time<=t))?null:n.seeded?Promise.resolve(n.seeded):Promise.resolve(n.answer).then(s=>s&&s.ok&&!s.bodyUsed?s:null,()=>null)},q=()=>{const e=globalThis[u()];e&&e.entries&&(e.entries={})},b=e=>(Array.isArray(e)?e:[]).filter(t=>t&&typeof t.url=="string"&&typeof t.body=="string").map(t=>({k:x(t.url,t.lang||""),s:t.status||200,t:t.type||"application/json",b:t.body})),A='script[type="application/json"][data-fetch-seed]',P=e=>{const t=b(e);return t.length?'<script type="application/json" data-fetch-seed>'+g(t)+"<\/script>":""},E=()=>{const e=m(globalThis.document,A,{remove:!0}),t=e&&e.value;if(!Array.isArray(t)||!t.length)return;const r=u(),n=globalThis[r]||(globalThis[r]={entries:{}});n.entries||(n.entries={}),n.seeded=!0;const s=Date.now();for(const o of t)!o||typeof o.k!="string"||typeof o.b!="string"||n.entries[o.k]||(n.entries[o.k]={time:s,seeded:{seeded:!0,status:o.s||200,type:o.t||"application/json",body:o.b}})},B=e=>{const t=b(e);if(!t.length)return"";const r=g(t);return"<script>(function(){try{var k=Symbol.for("+JSON.stringify(h)+"),r=globalThis[k]||(globalThis[k]={entries:{}}),t=Date.now(),l="+r+';r.seeded=true;r.entries=r.entries||{};for(var i=0;i<l.length;i++){var e=l[i];r.entries[e.k]={time:t,answer:Promise.resolve(new Response(e.b,{status:e.s,headers:{"content-type":e.t}}))}}}catch(e){}})()<\/script>'};export{h as EARLY_KEY,p as EARLY_MAX_AGE,A as SEED_BLOCK,P as createEarlySeedBlock,B as createEarlySeedScript,q as dropEarly,x as earlyKey,S as isScalarParams,w as matchEarlyRoute,L as openEarly,k as queryHeaderEntries,E as readSeedBlock,R as takeEarly,T as withReads};